Index: third_party/WebKit/Source/wtf/ThreadingPthreads.cpp |
diff --git a/third_party/WebKit/Source/wtf/ThreadingPthreads.cpp b/third_party/WebKit/Source/wtf/ThreadingPthreads.cpp |
index 49a35eb33906c2ab6863979184258aeec1721f92..ad9b520ac9f44add1284c67ea911ffe9aed00030 100644 |
--- a/third_party/WebKit/Source/wtf/ThreadingPthreads.cpp |
+++ b/third_party/WebKit/Source/wtf/ThreadingPthreads.cpp |
@@ -59,6 +59,22 @@ |
namespace WTF { |
+namespace internal { |
+ |
+ThreadIdentifier currentThreadSyscall() { |
+#if OS(MACOSX) |
+ return pthread_mach_thread_np(pthread_self()); |
+#elif OS(LINUX) |
+ return syscall(__NR_gettid); |
+#elif OS(ANDROID) |
+ return gettid(); |
+#else |
+ return reinterpret_cast<uintptr_t>(pthread_self()); |
+#endif |
+} |
+ |
+} // namespace internal |
+ |
static Mutex* atomicallyInitializedStaticMutex; |
void initializeThreading() { |
@@ -87,14 +103,14 @@ void unlockAtomicallyInitializedStaticMutex() { |
} |
ThreadIdentifier currentThread() { |
-#if OS(MACOSX) |
- return pthread_mach_thread_np(pthread_self()); |
-#elif OS(LINUX) |
- return syscall(__NR_gettid); |
-#elif OS(ANDROID) |
- return gettid(); |
+// TLS lookup is fast on these platforms. |
+#if defined(__GLIBC__) || OS(ANDROID) || OS(FREEBSD) |
+ return wtfThreadData().threadId(); |
#else |
- return reinterpret_cast<uintptr_t>(pthread_self()); |
+ // TODO(csharrison): For platforms where TLS lookup is slow, use the hack that |
+ // oilpan uses in ThreadState::current() to check if this is the main thread |
+ // via stack address. |
+ return internal::currentThreadSyscall(); |
#endif |
} |