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

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

Issue 2623273007: Fast path for ThreadSpecific for main thread on TLS-slow platforms (Closed)
Patch Set: haraken revieqw 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
« no previous file with comments | « third_party/WebKit/Source/wtf/BUILD.gn ('k') | third_party/WebKit/Source/wtf/StackUtil.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/wtf/StackUtil.h
diff --git a/third_party/WebKit/Source/wtf/StackUtil.h b/third_party/WebKit/Source/wtf/StackUtil.h
new file mode 100644
index 0000000000000000000000000000000000000000..89daef319ecf33695d91a5ba5bd7d67f6bdcb23f
--- /dev/null
+++ b/third_party/WebKit/Source/wtf/StackUtil.h
@@ -0,0 +1,54 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef StackUtil_h
+#define StackUtil_h
+
+#include "wtf/Compiler.h"
+#include "wtf/WTFExport.h"
+#include "wtf/build_config.h"
+#include <stddef.h>
+#include <stdint.h>
+
+namespace WTF {
+
+WTF_EXPORT size_t getUnderestimatedStackSize();
+WTF_EXPORT void* getStackStart();
+
+namespace internal {
+
+WTF_EXPORT uintptr_t mainThreadUnderestimatedStackSize();
+
+#if OS(WIN) && COMPILER(MSVC)
+size_t threadStackSize();
+#endif
+
+// Returns true if the function is not called on the main thread. Note carefully
+// that this function may have false positives, i.e. it can return true even if
+// we are on the main thread. If the function returns false, we are certainly
+// not on the main thread. Must be WTF_EXPORT due to template inlining in
+// ThreadSpecific.
+inline WTF_EXPORT bool mayNotBeMainThread() {
+ // getStackStart is exclusive, not inclusive (i.e. it points past the last
+ // page of the stack in linear order). So, to ensure an inclusive comparison,
+ // subtract here and in mainThreadUnderestimatedStackSize().
+ static uintptr_t s_mainThreadStackStart =
+ reinterpret_cast<uintptr_t>(getStackStart()) - sizeof(void*);
+ static uintptr_t s_mainThreadUnderestimatedStackSize =
+ mainThreadUnderestimatedStackSize();
+ uintptr_t dummy;
+ uintptr_t addressDiff =
+ s_mainThreadStackStart - reinterpret_cast<uintptr_t>(&dummy);
+ // This is a fast way to judge if we are in the main thread.
+ // If |&dummy| is within |s_mainThreadUnderestimatedStackSize| byte from
+ // the stack start of the main thread, we judge that we are in
+ // the main thread.
+ return addressDiff >= s_mainThreadUnderestimatedStackSize;
+}
+
+} // namespace internal
+
+} // namespace WTF
+
+#endif // StackUtil_h
« no previous file with comments | « third_party/WebKit/Source/wtf/BUILD.gn ('k') | third_party/WebKit/Source/wtf/StackUtil.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698