diff options
author | Elliott Hughes <enh@google.com> | 2014-12-01 16:43:51 -0800 |
---|---|---|
committer | Elliott Hughes <enh@google.com> | 2014-12-01 16:43:51 -0800 |
commit | 212e0e38248860b151b28877225629a988d95b58 (patch) | |
tree | f43f3b8bc2472d2584750052171a0d6da5277e25 | |
parent | 076f69d828cfa5d30360e1dd2f24acd751d4a461 (diff) | |
download | bionic-212e0e38248860b151b28877225629a988d95b58.zip bionic-212e0e38248860b151b28877225629a988d95b58.tar.gz bionic-212e0e38248860b151b28877225629a988d95b58.tar.bz2 |
Build our benchmarks against glibc too.
Bug: 18556607
Change-Id: I455ac8b93c0835836180e549486bc52d393ee6a6
-rw-r--r-- | benchmarks/Android.mk | 25 | ||||
-rw-r--r-- | benchmarks/benchmark_main.cpp | 1 | ||||
-rw-r--r-- | benchmarks/pthread_benchmark.cpp | 4 | ||||
-rw-r--r-- | benchmarks/time_benchmark.cpp | 2 | ||||
-rw-r--r-- | benchmarks/unistd_benchmark.cpp | 4 | ||||
-rw-r--r-- | libc/bionic/pthread_atfork.cpp | 4 | ||||
-rw-r--r-- | libc/include/pthread.h | 10 | ||||
-rw-r--r-- | linker/dlfcn.cpp | 2 |
8 files changed, 41 insertions, 11 deletions
diff --git a/benchmarks/Android.mk b/benchmarks/Android.mk index eb39a85..f163463 100644 --- a/benchmarks/Android.mk +++ b/benchmarks/Android.mk @@ -32,7 +32,6 @@ benchmark_c_flags = \ benchmark_src_files = \ benchmark_main.cpp \ math_benchmark.cpp \ - property_benchmark.cpp \ pthread_benchmark.cpp \ semaphore_benchmark.cpp \ stdio_benchmark.cpp \ @@ -41,7 +40,8 @@ benchmark_src_files = \ unistd_benchmark.cpp \ # Build benchmarks for the device (with bionic's .so). Run with: -# adb shell bionic-benchmarks +# adb shell bionic-benchmarks32 +# adb shell bionic-benchmarks64 include $(CLEAR_VARS) LOCAL_MODULE := bionic-benchmarks LOCAL_MODULE_STEM_32 := bionic-benchmarks32 @@ -49,10 +49,29 @@ LOCAL_MODULE_STEM_64 := bionic-benchmarks64 LOCAL_MULTILIB := both LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk LOCAL_CFLAGS += $(benchmark_c_flags) -LOCAL_SRC_FILES := $(benchmark_src_files) +LOCAL_SRC_FILES := $(benchmark_src_files) property_benchmark.cpp LOCAL_CXX_STL := libc++ include $(BUILD_EXECUTABLE) +# We don't build a static benchmark executable because it's not usually +# useful. If you're trying to run the current benchmarks on an older +# release, it's (so far at least) always because you want to measure the +# performance of the old release's libc, and a static benchmark isn't +# going to let you do that. + +# Build benchmarks for the host (against glibc!). Run with: +include $(CLEAR_VARS) +LOCAL_MODULE := bionic-benchmarks-glibc +LOCAL_MODULE_STEM_32 := bionic-benchmarks-glibc32 +LOCAL_MODULE_STEM_64 := bionic-benchmarks-glibc64 +LOCAL_MULTILIB := both +LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk +LOCAL_CFLAGS += $(benchmark_c_flags) +LOCAL_LDFLAGS += -lrt +LOCAL_SRC_FILES := $(benchmark_src_files) +LOCAL_CXX_STL := libc++ +include $(BUILD_HOST_EXECUTABLE) + ifeq ($(HOST_OS)-$(HOST_ARCH),$(filter $(HOST_OS)-$(HOST_ARCH),linux-x86 linux-x86_64)) ifeq ($(TARGET_ARCH),x86) LINKER = linker diff --git a/benchmarks/benchmark_main.cpp b/benchmarks/benchmark_main.cpp index d60670b..815d56b 100644 --- a/benchmarks/benchmark_main.cpp +++ b/benchmarks/benchmark_main.cpp @@ -19,6 +19,7 @@ #include <regex.h> #include <stdio.h> #include <stdlib.h> +#include <time.h> #include <string> #include <map> diff --git a/benchmarks/pthread_benchmark.cpp b/benchmarks/pthread_benchmark.cpp index 11db56d..92e5998 100644 --- a/benchmarks/pthread_benchmark.cpp +++ b/benchmarks/pthread_benchmark.cpp @@ -80,7 +80,7 @@ BENCHMARK(BM_pthread_mutex_lock); static void BM_pthread_mutex_lock_ERRORCHECK(int iters) { StopBenchmarkTiming(); - pthread_mutex_t mutex = PTHREAD_ERRORCHECK_MUTEX_INITIALIZER; + pthread_mutex_t mutex = PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP; StartBenchmarkTiming(); for (int i = 0; i < iters; ++i) { @@ -94,7 +94,7 @@ BENCHMARK(BM_pthread_mutex_lock_ERRORCHECK); static void BM_pthread_mutex_lock_RECURSIVE(int iters) { StopBenchmarkTiming(); - pthread_mutex_t mutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER; + pthread_mutex_t mutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP; StartBenchmarkTiming(); for (int i = 0; i < iters; ++i) { diff --git a/benchmarks/time_benchmark.cpp b/benchmarks/time_benchmark.cpp index 22f6e8e..f093ec1 100644 --- a/benchmarks/time_benchmark.cpp +++ b/benchmarks/time_benchmark.cpp @@ -16,7 +16,9 @@ #include "benchmark.h" +#include <unistd.h> #include <sys/syscall.h> +#include <sys/time.h> #include <time.h> static void BM_time_clock_gettime(int iters) { diff --git a/benchmarks/unistd_benchmark.cpp b/benchmarks/unistd_benchmark.cpp index 7e2ac30..94be1dd 100644 --- a/benchmarks/unistd_benchmark.cpp +++ b/benchmarks/unistd_benchmark.cpp @@ -41,6 +41,8 @@ static void BM_unistd_getpid_syscall(int iters) { } BENCHMARK(BM_unistd_getpid_syscall); +#if defined(__BIONIC__) + // Stop GCC optimizing out our pure function. /* Must not be static! */ pid_t (*gettid_fp)() = gettid; @@ -55,6 +57,8 @@ static void BM_unistd_gettid(int iters) { } BENCHMARK(BM_unistd_gettid); +#endif + static void BM_unistd_gettid_syscall(int iters) { StartBenchmarkTiming(); diff --git a/libc/bionic/pthread_atfork.cpp b/libc/bionic/pthread_atfork.cpp index 82e2b59..d1c4ad0 100644 --- a/libc/bionic/pthread_atfork.cpp +++ b/libc/bionic/pthread_atfork.cpp @@ -44,7 +44,7 @@ struct atfork_list_t { atfork_t* last; }; -static pthread_mutex_t g_atfork_list_mutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER; +static pthread_mutex_t g_atfork_list_mutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP; static atfork_list_t g_atfork_list = { NULL, NULL }; void __bionic_atfork_run_prepare() { @@ -73,7 +73,7 @@ void __bionic_atfork_run_child() { } } - g_atfork_list_mutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER; + g_atfork_list_mutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP; } void __bionic_atfork_run_parent() { diff --git a/libc/include/pthread.h b/libc/include/pthread.h index 24dba1b..2178789 100644 --- a/libc/include/pthread.h +++ b/libc/include/pthread.h @@ -53,9 +53,13 @@ typedef struct { #define __PTHREAD_RECURSIVE_MUTEX_INIT_VALUE 0x4000 #define __PTHREAD_ERRORCHECK_MUTEX_INIT_VALUE 0x8000 -#define PTHREAD_MUTEX_INITIALIZER {__PTHREAD_MUTEX_INIT_VALUE __RESERVED_INITIALIZER} -#define PTHREAD_RECURSIVE_MUTEX_INITIALIZER {__PTHREAD_RECURSIVE_MUTEX_INIT_VALUE __RESERVED_INITIALIZER} -#define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER {__PTHREAD_ERRORCHECK_MUTEX_INIT_VALUE __RESERVED_INITIALIZER} +#define PTHREAD_MUTEX_INITIALIZER {__PTHREAD_MUTEX_INIT_VALUE __RESERVED_INITIALIZER} +#define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP {__PTHREAD_ERRORCHECK_MUTEX_INIT_VALUE __RESERVED_INITIALIZER} +#define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP {__PTHREAD_RECURSIVE_MUTEX_INIT_VALUE __RESERVED_INITIALIZER} + +/* TODO: remove this namespace pollution. */ +#define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP +#define PTHREAD_RECURSIVE_MUTEX_INITIALIZER PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP enum { PTHREAD_MUTEX_NORMAL = 0, diff --git a/linker/dlfcn.cpp b/linker/dlfcn.cpp index 2486e02..57b2c23 100644 --- a/linker/dlfcn.cpp +++ b/linker/dlfcn.cpp @@ -29,7 +29,7 @@ /* This file hijacks the symbols stubbed out in libdl.so. */ -static pthread_mutex_t g_dl_mutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER; +static pthread_mutex_t g_dl_mutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP; static const char* __bionic_set_dlerror(char* new_value) { char** dlerror_slot = &reinterpret_cast<char**>(__get_tls())[TLS_SLOT_DLERROR]; |