author | Elliott Hughes <enh@google.com> | |
Tue, 2 Dec 2014 00:57:44 +0000 (00:57 +0000) | ||
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | |
Tue, 2 Dec 2014 00:57:44 +0000 (00:57 +0000) |
diff --git a/benchmarks/Android.mk b/benchmarks/Android.mk
index eb39a8590a5791272d09689bd3c78c46aed84714..f16346339f50d83704f5e45ad2750349d6db29bc 100644 (file)
--- a/benchmarks/Android.mk
+++ b/benchmarks/Android.mk
benchmark_src_files = \
benchmark_main.cpp \
math_benchmark.cpp \
- property_benchmark.cpp \
pthread_benchmark.cpp \
semaphore_benchmark.cpp \
stdio_benchmark.cpp \
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
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
index d60670b9badf7922b0a04724831845e985e11f79..815d56b68f242c9dcaa25bf9855dec53d4d56343 100644 (file)
#include <regex.h>
#include <stdio.h>
#include <stdlib.h>
+#include <time.h>
#include <string>
#include <map>
index 11db56d1c77a27dde6756fbea3ee95f31aedbacc..92e59982f7c9013d3c32af279d6ced0b6f0c6795 100644 (file)
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) {
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) {
index 22f6e8ea05c3259f047a264127c92d39c38bb76f..f093ec19fa6f0a09eef0a086d0e7b378de01774c 100644 (file)
#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) {
index 7e2ac30c920641587059b07ae7ccacccd652aef6..94be1dd5eeed50ef14fc2025a6081267026188d9 100644 (file)
}
BENCHMARK(BM_unistd_getpid_syscall);
+#if defined(__BIONIC__)
+
// Stop GCC optimizing out our pure function.
/* Must not be static! */ pid_t (*gettid_fp)() = gettid;
}
BENCHMARK(BM_unistd_gettid);
+#endif
+
static void BM_unistd_gettid_syscall(int iters) {
StartBenchmarkTiming();
index 82e2b595d42ade65b748aa9c5214e0f0bb38eaa7..d1c4ad0c4ef32f9bfdb4c0de8f35aefaee6edebd 100644 (file)
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() {
}
}
- 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 24dba1bcfd9b0331495c0501946b3a8845f15bd2..21787894dcf23f1072ff05dab2c31fd7dbb63e8a 100644 (file)
--- a/libc/include/pthread.h
+++ b/libc/include/pthread.h
#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 2486e021f18eabe34e15f1f8104ec39d2e89518e..57b2c23b2b2a86992c1eaf2e3925cd121a2cc548 100644 (file)
--- a/linker/dlfcn.cpp
+++ b/linker/dlfcn.cpp
/* 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];