| Index: third_party/WebKit/Source/wtf/WTFThreadData.h
|
| diff --git a/third_party/WebKit/Source/wtf/WTFThreadData.h b/third_party/WebKit/Source/wtf/WTFThreadData.h
|
| index a8228fce72e0e288153d3311b0ea25875cfe92b0..01a1a1b88ec6872c7d24dfbed26784877db49d94 100644
|
| --- a/third_party/WebKit/Source/wtf/WTFThreadData.h
|
| +++ b/third_party/WebKit/Source/wtf/WTFThreadData.h
|
| @@ -55,6 +55,9 @@ class WTF_EXPORT WTFThreadData {
|
|
|
| ThreadIdentifier threadId() const { return m_threadId; }
|
|
|
| + static void initializeOnOffThread();
|
| + static void initializeOnMainThread();
|
| +
|
| #if OS(WIN) && COMPILER(MSVC)
|
| static size_t threadStackSize();
|
| #endif
|
| @@ -73,11 +76,37 @@ class WTF_EXPORT WTFThreadData {
|
| friend WTFThreadData& wtfThreadData();
|
| };
|
|
|
| +// Special case WTFThreadData so accessors don't need to branch.
|
| +template <>
|
| +inline ThreadSpecific<WTFThreadData>::operator WTFThreadData*() {
|
| + DCHECK(isSet());
|
| +#if defined(__GLIBC__) || OS(ANDROID) || OS(FREEBSD)
|
| + return static_cast<WTFThreadData*>(get());
|
| +#else
|
| + if (UNLIKELY(internal::mayNotBeMainThread()))
|
| + return static_cast<WTFThreadData*>(get());
|
| + return m_mainThreadStorage;
|
| +#endif
|
| +}
|
| +
|
| +template <>
|
| +inline void ThreadSpecific<WTFThreadData>::initializeOnOffThread() {
|
| + WTFThreadData* ptr = static_cast<WTFThreadData*>(Partitions::fastZeroedMalloc(
|
| + sizeof(WTFThreadData), WTF_HEAP_PROFILER_TYPE_NAME(WTFThreadData)));
|
| + set(ptr);
|
| + new (NotNull, ptr) WTFThreadData;
|
| +}
|
| +
|
| +template <>
|
| +inline void ThreadSpecific<WTFThreadData>::initializeOnMainThread() {
|
| + m_mainThreadStorage =
|
| + static_cast<WTFThreadData*>(Partitions::fastZeroedMalloc(
|
| + sizeof(WTFThreadData), WTF_HEAP_PROFILER_TYPE_NAME(WTFThreadData)));
|
| + set(m_mainThreadStorage);
|
| + new (NotNull, m_mainThreadStorage) WTFThreadData;
|
| +}
|
| +
|
| inline WTFThreadData& wtfThreadData() {
|
| - // WTFThreadData is used on main thread before it could possibly be used
|
| - // on secondary ones, so there is no need for synchronization here.
|
| - if (!WTFThreadData::staticData)
|
| - WTFThreadData::staticData = new ThreadSpecific<WTFThreadData>;
|
| return **WTFThreadData::staticData;
|
| }
|
|
|
|
|