Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1686)

Unified Diff: third_party/WebKit/Source/wtf/WTFThreadData.h

Issue 2623273007: Fast path for ThreadSpecific for main thread on TLS-slow platforms (Closed)
Patch Set: [WIP] Fast path for currentThread() for main thread on TLS-slow platforms Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 a3351de1a4782adffc7051de70bf835f2becd445..bf49b3713a805ba87862a8058c3d510a763ef5f8 100644
--- a/third_party/WebKit/Source/wtf/WTFThreadData.h
+++ b/third_party/WebKit/Source/wtf/WTFThreadData.h
@@ -46,7 +46,8 @@ class WTF_EXPORT WTFThreadData {
WTF_MAKE_NONCOPYABLE(WTFThreadData);
public:
- WTFThreadData();
+ enum ThreadType { MainThread, Other };
+ explicit WTFThreadData(ThreadType = Other);
~WTFThreadData();
AtomicStringTable& getAtomicStringTable() { return *m_atomicStringTable; }
@@ -55,27 +56,44 @@ class WTF_EXPORT WTFThreadData {
ThreadIdentifier threadId() const { return m_threadId; }
+#if OS(WIN) && COMPILER(MSVC)
+ size_t threadStackSize();
+#endif
+
+ static void initialize();
+
+ static WTFThreadData& current();
+
+ static bool isMainThread();
+
+ // Returns true if this is the main thread, via a stack address hueristic.
+ // This is a subtle method and most callers should prefer isMainThread.
+ static bool stackBasedIsMainThread();
haraken 2017/01/16 04:42:30 Let's mention that this may return false even if i
Charlie Harrison 2017/01/18 01:49:48 Done.
+
private:
+ static WTFThreadData& mainThreadData();
+ // m_threadId must be initialized first, as following members need it for
+ // initialization.
+ const ThreadIdentifier m_threadId;
+
+#if OS(WIN) && COMPILER(MSVC)
+ size_t m_threadStackSize = 0u;
+#endif
+
std::unique_ptr<AtomicStringTable> m_atomicStringTable;
std::unique_ptr<ICUConverterWrapper> m_cachedConverterICU;
- ThreadIdentifier m_threadId;
+ static uintptr_t s_mainThreadStackStart;
+ static uintptr_t s_mainThreadUnderestimatedStackSize;
+ static uint8_t s_mainThreadDataStorage[];
static ThreadSpecific<WTFThreadData>* staticData;
- friend WTFThreadData& 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;
-}
+bool operator==(const WTFThreadData& data1, const WTFThreadData& data2);
} // namespace WTF
using WTF::WTFThreadData;
-using WTF::wtfThreadData;
#endif // WTFThreadData_h

Powered by Google App Engine
This is Rietveld 408576698