aboutsummaryrefslogtreecommitdiff
path: root/3rdparty/tracy/tracy/client/TracyAlloc.cpp
diff options
context:
space:
mode:
authorrtk0c <[email protected]>2022-05-22 01:08:24 -0700
committerrtk0c <[email protected]>2022-05-22 01:08:24 -0700
commitc568f0a8c9f0aef00c770b494ee1ff3a89ab48de (patch)
tree1dc1e69d796e635cdac6a4ef7e6d3a90ab1423c2 /3rdparty/tracy/tracy/client/TracyAlloc.cpp
parenta5db6bd3cc4af5233010ff44d0572ddf98b43c9d (diff)
Changeset: 35 Fix missing sources in git submodules after migration to PlasticSCM
Diffstat (limited to '3rdparty/tracy/tracy/client/TracyAlloc.cpp')
-rw-r--r--3rdparty/tracy/tracy/client/TracyAlloc.cpp42
1 files changed, 42 insertions, 0 deletions
diff --git a/3rdparty/tracy/tracy/client/TracyAlloc.cpp b/3rdparty/tracy/tracy/client/TracyAlloc.cpp
new file mode 100644
index 0000000..0106a01
--- /dev/null
+++ b/3rdparty/tracy/tracy/client/TracyAlloc.cpp
@@ -0,0 +1,42 @@
+#ifdef TRACY_ENABLE
+
+#include <atomic>
+
+#include "../common/TracyAlloc.hpp"
+#include "../common/TracyForceInline.hpp"
+#include "../common/TracyYield.hpp"
+
+namespace tracy
+{
+
+extern thread_local bool RpThreadInitDone;
+extern std::atomic<int> RpInitDone;
+extern std::atomic<int> RpInitLock;
+
+tracy_no_inline static void InitRpmallocPlumbing()
+{
+ const auto done = RpInitDone.load( std::memory_order_acquire );
+ if( !done )
+ {
+ int expected = 0;
+ while( !RpInitLock.compare_exchange_weak( expected, 1, std::memory_order_release, std::memory_order_relaxed ) ) { expected = 0; YieldThread(); }
+ const auto done = RpInitDone.load( std::memory_order_acquire );
+ if( !done )
+ {
+ rpmalloc_initialize();
+ RpInitDone.store( 1, std::memory_order_release );
+ }
+ RpInitLock.store( 0, std::memory_order_release );
+ }
+ rpmalloc_thread_initialize();
+ RpThreadInitDone = true;
+}
+
+TRACY_API void InitRpmalloc()
+{
+ if( !RpThreadInitDone ) InitRpmallocPlumbing();
+}
+
+}
+
+#endif