diff options
author | monster <monster@yandex-team.ru> | 2022-02-10 16:47:19 +0300 |
---|---|---|
committer | Daniil Cherednik <dcherednik@yandex-team.ru> | 2022-02-10 16:47:19 +0300 |
commit | dd76ae1f6213d065375ab296699f764faafbe5bd (patch) | |
tree | 075a4553d0011d8f92752c0891794febb15912cf /contrib/libs/tcmalloc | |
parent | f02a874a7290593efbe4b3aeae69a04b46c1cc86 (diff) | |
download | ydb-dd76ae1f6213d065375ab296699f764faafbe5bd.tar.gz |
Restoring authorship annotation for <monster@yandex-team.ru>. Commit 1 of 2.
Diffstat (limited to 'contrib/libs/tcmalloc')
-rw-r--r-- | contrib/libs/tcmalloc/patches/userdata.patch | 440 | ||||
-rw-r--r-- | contrib/libs/tcmalloc/tcmalloc/internal/logging.h | 4 | ||||
-rw-r--r-- | contrib/libs/tcmalloc/tcmalloc/internal_malloc_extension.h | 12 | ||||
-rw-r--r-- | contrib/libs/tcmalloc/tcmalloc/malloc_extension.cc | 30 | ||||
-rw-r--r-- | contrib/libs/tcmalloc/tcmalloc/malloc_extension.h | 24 | ||||
-rw-r--r-- | contrib/libs/tcmalloc/tcmalloc/peak_heap_tracker.cc | 8 | ||||
-rw-r--r-- | contrib/libs/tcmalloc/tcmalloc/stack_trace_table.cc | 8 | ||||
-rw-r--r-- | contrib/libs/tcmalloc/tcmalloc/static_vars.cc | 12 | ||||
-rw-r--r-- | contrib/libs/tcmalloc/tcmalloc/static_vars.h | 62 | ||||
-rw-r--r-- | contrib/libs/tcmalloc/tcmalloc/tcmalloc.cc | 18 |
10 files changed, 309 insertions, 309 deletions
diff --git a/contrib/libs/tcmalloc/patches/userdata.patch b/contrib/libs/tcmalloc/patches/userdata.patch index 83373cebfe..51012c7ef9 100644 --- a/contrib/libs/tcmalloc/patches/userdata.patch +++ b/contrib/libs/tcmalloc/patches/userdata.patch @@ -1,220 +1,220 @@ ---- contrib/libs/tcmalloc/tcmalloc/internal/logging.h (index) -+++ contrib/libs/tcmalloc/tcmalloc/internal/logging.h (working tree) -@@ -67,6 +67,8 @@ struct StackTrace { - // between the previous sample and this one - size_t weight; - -+ void* user_data; -+ - template <typename H> - friend H AbslHashValue(H h, const StackTrace& t) { - // As we use StackTrace as a key-value node in StackTraceTable, we only ---- contrib/libs/tcmalloc/tcmalloc/internal_malloc_extension.h (index) -+++ contrib/libs/tcmalloc/tcmalloc/internal_malloc_extension.h (working tree) -@@ -120,6 +120,12 @@ ABSL_ATTRIBUTE_WEAK void MallocExtension_Internal_SetMaxTotalThreadCacheBytes( - ABSL_ATTRIBUTE_WEAK void - MallocExtension_EnableForkSupport(); - -+ABSL_ATTRIBUTE_WEAK void -+MallocExtension_SetSampleUserDataCallbacks( -+ tcmalloc::MallocExtension::CreateSampleUserDataCallback create, -+ tcmalloc::MallocExtension::CopySampleUserDataCallback copy, -+ tcmalloc::MallocExtension::DestroySampleUserDataCallback destroy); -+ - } - - #endif ---- contrib/libs/tcmalloc/tcmalloc/malloc_extension.cc (index) -+++ contrib/libs/tcmalloc/tcmalloc/malloc_extension.cc (working tree) -@@ -468,6 +468,21 @@ void MallocExtension::EnableForkSupport() { - #endif - } - -+void MallocExtension::SetSampleUserDataCallbacks( -+ CreateSampleUserDataCallback create, -+ CopySampleUserDataCallback copy, -+ DestroySampleUserDataCallback destroy) { -+#if ABSL_INTERNAL_HAVE_WEAK_MALLOCEXTENSION_STUBS -+ if (&MallocExtension_SetSampleUserDataCallbacks != nullptr) { -+ MallocExtension_SetSampleUserDataCallbacks(create, copy, destroy); -+ } -+#else -+ (void)create; -+ (void)copy; -+ (void)destroy; -+#endif -+} -+ - } // namespace tcmalloc - - // Default implementation just returns size. The expectation is that ---- contrib/libs/tcmalloc/tcmalloc/malloc_extension.h (index) -+++ contrib/libs/tcmalloc/tcmalloc/malloc_extension.h (working tree) -@@ -94,6 +94,8 @@ class Profile final { - - int depth; - void* stack[kMaxStackDepth]; -+ -+ void* user_data; - }; - - void Iterate(absl::FunctionRef<void(const Sample&)> f) const; -@@ -472,6 +474,16 @@ class MallocExtension final { - // Enables fork support. - // Allocator will continue to function correctly in the child, after calling fork(). - static void EnableForkSupport(); -+ -+ using CreateSampleUserDataCallback = void*(); -+ using CopySampleUserDataCallback = void*(void*); -+ using DestroySampleUserDataCallback = void(void*); -+ -+ // Sets callbacks for lifetime control of custom user data attached to allocation samples -+ static void SetSampleUserDataCallbacks( -+ CreateSampleUserDataCallback create, -+ CopySampleUserDataCallback copy, -+ DestroySampleUserDataCallback destroy); - }; - - } // namespace tcmalloc ---- contrib/libs/tcmalloc/tcmalloc/peak_heap_tracker.cc (index) -+++ contrib/libs/tcmalloc/tcmalloc/peak_heap_tracker.cc (working tree) -@@ -55,6 +55,7 @@ void PeakHeapTracker::MaybeSaveSample() { - StackTrace *t = peak_sampled_span_stacks_, *next = nullptr; - while (t != nullptr) { - next = reinterpret_cast<StackTrace*>(t->stack[kMaxStackDepth - 1]); -+ Static::DestroySampleUserData(t->user_data); - Static::stacktrace_allocator().Delete(t); - t = next; - } -@@ -63,7 +64,9 @@ void PeakHeapTracker::MaybeSaveSample() { - for (Span* s : Static::sampled_objects_) { - t = Static::stacktrace_allocator().New(); - -- *t = *s->sampled_stack(); -+ StackTrace* sampled_stack = s->sampled_stack(); -+ *t = *sampled_stack; -+ t->user_data = Static::CopySampleUserData(sampled_stack->user_data); - if (t->depth == kMaxStackDepth) { - t->depth = kMaxStackDepth - 1; - } ---- contrib/libs/tcmalloc/tcmalloc/stack_trace_table.cc (index) -+++ contrib/libs/tcmalloc/tcmalloc/stack_trace_table.cc (working tree) -@@ -73,6 +73,7 @@ StackTraceTable::~StackTraceTable() { - Bucket* b = table_[i]; - while (b != nullptr) { - Bucket* next = b->next; -+ Static::DestroySampleUserData(b->trace.user_data); - Static::bucket_allocator().Delete(b); - b = next; - } -@@ -104,6 +105,7 @@ void StackTraceTable::AddTrace(double count, const StackTrace& t) { - b = Static::bucket_allocator().New(); - b->hash = h; - b->trace = t; -+ b->trace.user_data = Static::CopySampleUserData(t.user_data); - b->count = count; - b->total_weight = t.weight * count; - b->next = table_[idx]; -@@ -135,6 +137,8 @@ void StackTraceTable::Iterate( - e.requested_alignment = b->trace.requested_alignment; - e.allocated_size = allocated_size; - -+ e.user_data = b->trace.user_data; -+ - e.depth = b->trace.depth; - static_assert(kMaxStackDepth <= Profile::Sample::kMaxStackDepth, - "Profile stack size smaller than internal stack sizes"); ---- contrib/libs/tcmalloc/tcmalloc/static_vars.cc (index) -+++ contrib/libs/tcmalloc/tcmalloc/static_vars.cc (working tree) -@@ -60,6 +60,12 @@ ABSL_CONST_INIT PageHeapAllocator<StackTraceTable::Bucket> - ABSL_CONST_INIT std::atomic<bool> Static::inited_{false}; - ABSL_CONST_INIT bool Static::cpu_cache_active_ = false; - ABSL_CONST_INIT bool Static::fork_support_enabled_ = false; -+ABSL_CONST_INIT Static::CreateSampleUserDataCallback* -+ Static::create_sample_user_data_callback_ = nullptr; -+ABSL_CONST_INIT Static::CopySampleUserDataCallback* -+ Static::copy_sample_user_data_callback_ = nullptr; -+ABSL_CONST_INIT Static::DestroySampleUserDataCallback* -+ Static::destroy_sample_user_data_callback_ = nullptr; - ABSL_CONST_INIT Static::PageAllocatorStorage Static::page_allocator_; - ABSL_CONST_INIT PageMap Static::pagemap_; - ABSL_CONST_INIT absl::base_internal::SpinLock guarded_page_lock( ---- contrib/libs/tcmalloc/tcmalloc/static_vars.h (index) -+++ contrib/libs/tcmalloc/tcmalloc/static_vars.h (working tree) -@@ -130,6 +130,34 @@ class Static { - static bool ForkSupportEnabled() { return fork_support_enabled_; } - static void EnableForkSupport() { fork_support_enabled_ = true; } - -+ using CreateSampleUserDataCallback = void*(); -+ using CopySampleUserDataCallback = void*(void*); -+ using DestroySampleUserDataCallback = void(void*); -+ -+ static void SetSampleUserDataCallbacks( -+ CreateSampleUserDataCallback create, -+ CopySampleUserDataCallback copy, -+ DestroySampleUserDataCallback destroy) { -+ create_sample_user_data_callback_ = create; -+ copy_sample_user_data_callback_ = copy; -+ destroy_sample_user_data_callback_ = destroy; -+ } -+ -+ static void* CreateSampleUserData() { -+ if (create_sample_user_data_callback_) -+ return create_sample_user_data_callback_(); -+ return nullptr; -+ } -+ static void* CopySampleUserData(void* user_data) { -+ if (copy_sample_user_data_callback_) -+ return copy_sample_user_data_callback_(user_data); -+ return nullptr; -+ } -+ static void DestroySampleUserData(void* user_data) { -+ if (destroy_sample_user_data_callback_) -+ destroy_sample_user_data_callback_(user_data); -+ } -+ - static bool ABSL_ATTRIBUTE_ALWAYS_INLINE IsOnFastPath() { - return - #ifndef TCMALLOC_DEPRECATED_PERTHREAD -@@ -176,6 +204,9 @@ class Static { - ABSL_CONST_INIT static std::atomic<bool> inited_; - static bool cpu_cache_active_; - static bool fork_support_enabled_; -+ static CreateSampleUserDataCallback* create_sample_user_data_callback_; -+ static CopySampleUserDataCallback* copy_sample_user_data_callback_; -+ static DestroySampleUserDataCallback* destroy_sample_user_data_callback_; - ABSL_CONST_INIT static PeakHeapTracker peak_heap_tracker_; - ABSL_CONST_INIT static NumaTopology<kNumaPartitions, kNumBaseClasses> - numa_topology_; ---- contrib/libs/tcmalloc/tcmalloc/tcmalloc.cc (index) -+++ contrib/libs/tcmalloc/tcmalloc/tcmalloc.cc (working tree) -@@ -1151,6 +1151,13 @@ void TCMallocPostFork() { - } - } - -+extern "C" void MallocExtension_SetSampleUserDataCallbacks( -+ MallocExtension::CreateSampleUserDataCallback create, -+ MallocExtension::CopySampleUserDataCallback copy, -+ MallocExtension::DestroySampleUserDataCallback destroy) { -+ Static::SetSampleUserDataCallbacks(create, copy, destroy); -+} -+ - // nallocx slow path. - // Moved to a separate function because size_class_with_alignment is not inlined - // which would cause nallocx to become non-leaf function with stack frame and -@@ -1500,6 +1507,7 @@ static void* SampleifyAllocation(size_t requested_size, size_t weight, - tmp.requested_alignment = requested_alignment; - tmp.allocated_size = allocated_size; - tmp.weight = weight; -+ tmp.user_data = Static::CreateSampleUserData(); - - { - absl::base_internal::SpinLockHolder h(&pageheap_lock); -@@ -1629,6 +1637,7 @@ static void do_free_pages(void* ptr, const PageId p) { - 1); - } - notify_sampled_alloc = true; -+ Static::DestroySampleUserData(st->user_data); - Static::stacktrace_allocator().Delete(st); - } - if (IsSampledMemory(ptr)) { +--- contrib/libs/tcmalloc/tcmalloc/internal/logging.h (index) ++++ contrib/libs/tcmalloc/tcmalloc/internal/logging.h (working tree) +@@ -67,6 +67,8 @@ struct StackTrace { + // between the previous sample and this one + size_t weight; + ++ void* user_data; ++ + template <typename H> + friend H AbslHashValue(H h, const StackTrace& t) { + // As we use StackTrace as a key-value node in StackTraceTable, we only +--- contrib/libs/tcmalloc/tcmalloc/internal_malloc_extension.h (index) ++++ contrib/libs/tcmalloc/tcmalloc/internal_malloc_extension.h (working tree) +@@ -120,6 +120,12 @@ ABSL_ATTRIBUTE_WEAK void MallocExtension_Internal_SetMaxTotalThreadCacheBytes( + ABSL_ATTRIBUTE_WEAK void + MallocExtension_EnableForkSupport(); + ++ABSL_ATTRIBUTE_WEAK void ++MallocExtension_SetSampleUserDataCallbacks( ++ tcmalloc::MallocExtension::CreateSampleUserDataCallback create, ++ tcmalloc::MallocExtension::CopySampleUserDataCallback copy, ++ tcmalloc::MallocExtension::DestroySampleUserDataCallback destroy); ++ + } + + #endif +--- contrib/libs/tcmalloc/tcmalloc/malloc_extension.cc (index) ++++ contrib/libs/tcmalloc/tcmalloc/malloc_extension.cc (working tree) +@@ -468,6 +468,21 @@ void MallocExtension::EnableForkSupport() { + #endif + } + ++void MallocExtension::SetSampleUserDataCallbacks( ++ CreateSampleUserDataCallback create, ++ CopySampleUserDataCallback copy, ++ DestroySampleUserDataCallback destroy) { ++#if ABSL_INTERNAL_HAVE_WEAK_MALLOCEXTENSION_STUBS ++ if (&MallocExtension_SetSampleUserDataCallbacks != nullptr) { ++ MallocExtension_SetSampleUserDataCallbacks(create, copy, destroy); ++ } ++#else ++ (void)create; ++ (void)copy; ++ (void)destroy; ++#endif ++} ++ + } // namespace tcmalloc + + // Default implementation just returns size. The expectation is that +--- contrib/libs/tcmalloc/tcmalloc/malloc_extension.h (index) ++++ contrib/libs/tcmalloc/tcmalloc/malloc_extension.h (working tree) +@@ -94,6 +94,8 @@ class Profile final { + + int depth; + void* stack[kMaxStackDepth]; ++ ++ void* user_data; + }; + + void Iterate(absl::FunctionRef<void(const Sample&)> f) const; +@@ -472,6 +474,16 @@ class MallocExtension final { + // Enables fork support. + // Allocator will continue to function correctly in the child, after calling fork(). + static void EnableForkSupport(); ++ ++ using CreateSampleUserDataCallback = void*(); ++ using CopySampleUserDataCallback = void*(void*); ++ using DestroySampleUserDataCallback = void(void*); ++ ++ // Sets callbacks for lifetime control of custom user data attached to allocation samples ++ static void SetSampleUserDataCallbacks( ++ CreateSampleUserDataCallback create, ++ CopySampleUserDataCallback copy, ++ DestroySampleUserDataCallback destroy); + }; + + } // namespace tcmalloc +--- contrib/libs/tcmalloc/tcmalloc/peak_heap_tracker.cc (index) ++++ contrib/libs/tcmalloc/tcmalloc/peak_heap_tracker.cc (working tree) +@@ -55,6 +55,7 @@ void PeakHeapTracker::MaybeSaveSample() { + StackTrace *t = peak_sampled_span_stacks_, *next = nullptr; + while (t != nullptr) { + next = reinterpret_cast<StackTrace*>(t->stack[kMaxStackDepth - 1]); ++ Static::DestroySampleUserData(t->user_data); + Static::stacktrace_allocator().Delete(t); + t = next; + } +@@ -63,7 +64,9 @@ void PeakHeapTracker::MaybeSaveSample() { + for (Span* s : Static::sampled_objects_) { + t = Static::stacktrace_allocator().New(); + +- *t = *s->sampled_stack(); ++ StackTrace* sampled_stack = s->sampled_stack(); ++ *t = *sampled_stack; ++ t->user_data = Static::CopySampleUserData(sampled_stack->user_data); + if (t->depth == kMaxStackDepth) { + t->depth = kMaxStackDepth - 1; + } +--- contrib/libs/tcmalloc/tcmalloc/stack_trace_table.cc (index) ++++ contrib/libs/tcmalloc/tcmalloc/stack_trace_table.cc (working tree) +@@ -73,6 +73,7 @@ StackTraceTable::~StackTraceTable() { + Bucket* b = table_[i]; + while (b != nullptr) { + Bucket* next = b->next; ++ Static::DestroySampleUserData(b->trace.user_data); + Static::bucket_allocator().Delete(b); + b = next; + } +@@ -104,6 +105,7 @@ void StackTraceTable::AddTrace(double count, const StackTrace& t) { + b = Static::bucket_allocator().New(); + b->hash = h; + b->trace = t; ++ b->trace.user_data = Static::CopySampleUserData(t.user_data); + b->count = count; + b->total_weight = t.weight * count; + b->next = table_[idx]; +@@ -135,6 +137,8 @@ void StackTraceTable::Iterate( + e.requested_alignment = b->trace.requested_alignment; + e.allocated_size = allocated_size; + ++ e.user_data = b->trace.user_data; ++ + e.depth = b->trace.depth; + static_assert(kMaxStackDepth <= Profile::Sample::kMaxStackDepth, + "Profile stack size smaller than internal stack sizes"); +--- contrib/libs/tcmalloc/tcmalloc/static_vars.cc (index) ++++ contrib/libs/tcmalloc/tcmalloc/static_vars.cc (working tree) +@@ -60,6 +60,12 @@ ABSL_CONST_INIT PageHeapAllocator<StackTraceTable::Bucket> + ABSL_CONST_INIT std::atomic<bool> Static::inited_{false}; + ABSL_CONST_INIT bool Static::cpu_cache_active_ = false; + ABSL_CONST_INIT bool Static::fork_support_enabled_ = false; ++ABSL_CONST_INIT Static::CreateSampleUserDataCallback* ++ Static::create_sample_user_data_callback_ = nullptr; ++ABSL_CONST_INIT Static::CopySampleUserDataCallback* ++ Static::copy_sample_user_data_callback_ = nullptr; ++ABSL_CONST_INIT Static::DestroySampleUserDataCallback* ++ Static::destroy_sample_user_data_callback_ = nullptr; + ABSL_CONST_INIT Static::PageAllocatorStorage Static::page_allocator_; + ABSL_CONST_INIT PageMap Static::pagemap_; + ABSL_CONST_INIT absl::base_internal::SpinLock guarded_page_lock( +--- contrib/libs/tcmalloc/tcmalloc/static_vars.h (index) ++++ contrib/libs/tcmalloc/tcmalloc/static_vars.h (working tree) +@@ -130,6 +130,34 @@ class Static { + static bool ForkSupportEnabled() { return fork_support_enabled_; } + static void EnableForkSupport() { fork_support_enabled_ = true; } + ++ using CreateSampleUserDataCallback = void*(); ++ using CopySampleUserDataCallback = void*(void*); ++ using DestroySampleUserDataCallback = void(void*); ++ ++ static void SetSampleUserDataCallbacks( ++ CreateSampleUserDataCallback create, ++ CopySampleUserDataCallback copy, ++ DestroySampleUserDataCallback destroy) { ++ create_sample_user_data_callback_ = create; ++ copy_sample_user_data_callback_ = copy; ++ destroy_sample_user_data_callback_ = destroy; ++ } ++ ++ static void* CreateSampleUserData() { ++ if (create_sample_user_data_callback_) ++ return create_sample_user_data_callback_(); ++ return nullptr; ++ } ++ static void* CopySampleUserData(void* user_data) { ++ if (copy_sample_user_data_callback_) ++ return copy_sample_user_data_callback_(user_data); ++ return nullptr; ++ } ++ static void DestroySampleUserData(void* user_data) { ++ if (destroy_sample_user_data_callback_) ++ destroy_sample_user_data_callback_(user_data); ++ } ++ + static bool ABSL_ATTRIBUTE_ALWAYS_INLINE IsOnFastPath() { + return + #ifndef TCMALLOC_DEPRECATED_PERTHREAD +@@ -176,6 +204,9 @@ class Static { + ABSL_CONST_INIT static std::atomic<bool> inited_; + static bool cpu_cache_active_; + static bool fork_support_enabled_; ++ static CreateSampleUserDataCallback* create_sample_user_data_callback_; ++ static CopySampleUserDataCallback* copy_sample_user_data_callback_; ++ static DestroySampleUserDataCallback* destroy_sample_user_data_callback_; + ABSL_CONST_INIT static PeakHeapTracker peak_heap_tracker_; + ABSL_CONST_INIT static NumaTopology<kNumaPartitions, kNumBaseClasses> + numa_topology_; +--- contrib/libs/tcmalloc/tcmalloc/tcmalloc.cc (index) ++++ contrib/libs/tcmalloc/tcmalloc/tcmalloc.cc (working tree) +@@ -1151,6 +1151,13 @@ void TCMallocPostFork() { + } + } + ++extern "C" void MallocExtension_SetSampleUserDataCallbacks( ++ MallocExtension::CreateSampleUserDataCallback create, ++ MallocExtension::CopySampleUserDataCallback copy, ++ MallocExtension::DestroySampleUserDataCallback destroy) { ++ Static::SetSampleUserDataCallbacks(create, copy, destroy); ++} ++ + // nallocx slow path. + // Moved to a separate function because size_class_with_alignment is not inlined + // which would cause nallocx to become non-leaf function with stack frame and +@@ -1500,6 +1507,7 @@ static void* SampleifyAllocation(size_t requested_size, size_t weight, + tmp.requested_alignment = requested_alignment; + tmp.allocated_size = allocated_size; + tmp.weight = weight; ++ tmp.user_data = Static::CreateSampleUserData(); + + { + absl::base_internal::SpinLockHolder h(&pageheap_lock); +@@ -1629,6 +1637,7 @@ static void do_free_pages(void* ptr, const PageId p) { + 1); + } + notify_sampled_alloc = true; ++ Static::DestroySampleUserData(st->user_data); + Static::stacktrace_allocator().Delete(st); + } + if (IsSampledMemory(ptr)) { diff --git a/contrib/libs/tcmalloc/tcmalloc/internal/logging.h b/contrib/libs/tcmalloc/tcmalloc/internal/logging.h index 4d42aa40a9..2722c2fccc 100644 --- a/contrib/libs/tcmalloc/tcmalloc/internal/logging.h +++ b/contrib/libs/tcmalloc/tcmalloc/internal/logging.h @@ -67,8 +67,8 @@ struct StackTrace { // between the previous sample and this one size_t weight; - void* user_data; - + void* user_data; + template <typename H> friend H AbslHashValue(H h, const StackTrace& t) { // As we use StackTrace as a key-value node in StackTraceTable, we only diff --git a/contrib/libs/tcmalloc/tcmalloc/internal_malloc_extension.h b/contrib/libs/tcmalloc/tcmalloc/internal_malloc_extension.h index 66027418ed..8654588aa9 100644 --- a/contrib/libs/tcmalloc/tcmalloc/internal_malloc_extension.h +++ b/contrib/libs/tcmalloc/tcmalloc/internal_malloc_extension.h @@ -120,12 +120,12 @@ ABSL_ATTRIBUTE_WEAK void MallocExtension_Internal_SetMaxTotalThreadCacheBytes( ABSL_ATTRIBUTE_WEAK void MallocExtension_EnableForkSupport(); -ABSL_ATTRIBUTE_WEAK void -MallocExtension_SetSampleUserDataCallbacks( - tcmalloc::MallocExtension::CreateSampleUserDataCallback create, - tcmalloc::MallocExtension::CopySampleUserDataCallback copy, - tcmalloc::MallocExtension::DestroySampleUserDataCallback destroy); - +ABSL_ATTRIBUTE_WEAK void +MallocExtension_SetSampleUserDataCallbacks( + tcmalloc::MallocExtension::CreateSampleUserDataCallback create, + tcmalloc::MallocExtension::CopySampleUserDataCallback copy, + tcmalloc::MallocExtension::DestroySampleUserDataCallback destroy); + } #endif diff --git a/contrib/libs/tcmalloc/tcmalloc/malloc_extension.cc b/contrib/libs/tcmalloc/tcmalloc/malloc_extension.cc index ad3205fcdc..ae958f5bb7 100644 --- a/contrib/libs/tcmalloc/tcmalloc/malloc_extension.cc +++ b/contrib/libs/tcmalloc/tcmalloc/malloc_extension.cc @@ -468,21 +468,21 @@ void MallocExtension::EnableForkSupport() { #endif } -void MallocExtension::SetSampleUserDataCallbacks( - CreateSampleUserDataCallback create, - CopySampleUserDataCallback copy, - DestroySampleUserDataCallback destroy) { -#if ABSL_INTERNAL_HAVE_WEAK_MALLOCEXTENSION_STUBS - if (&MallocExtension_SetSampleUserDataCallbacks != nullptr) { - MallocExtension_SetSampleUserDataCallbacks(create, copy, destroy); - } -#else - (void)create; - (void)copy; - (void)destroy; -#endif -} - +void MallocExtension::SetSampleUserDataCallbacks( + CreateSampleUserDataCallback create, + CopySampleUserDataCallback copy, + DestroySampleUserDataCallback destroy) { +#if ABSL_INTERNAL_HAVE_WEAK_MALLOCEXTENSION_STUBS + if (&MallocExtension_SetSampleUserDataCallbacks != nullptr) { + MallocExtension_SetSampleUserDataCallbacks(create, copy, destroy); + } +#else + (void)create; + (void)copy; + (void)destroy; +#endif +} + } // namespace tcmalloc // Default implementation just returns size. The expectation is that diff --git a/contrib/libs/tcmalloc/tcmalloc/malloc_extension.h b/contrib/libs/tcmalloc/tcmalloc/malloc_extension.h index fcbd347ca1..77255a8772 100644 --- a/contrib/libs/tcmalloc/tcmalloc/malloc_extension.h +++ b/contrib/libs/tcmalloc/tcmalloc/malloc_extension.h @@ -94,8 +94,8 @@ class Profile final { int depth; void* stack[kMaxStackDepth]; - - void* user_data; + + void* user_data; }; void Iterate(absl::FunctionRef<void(const Sample&)> f) const; @@ -474,16 +474,16 @@ class MallocExtension final { // Enables fork support. // Allocator will continue to function correctly in the child, after calling fork(). static void EnableForkSupport(); - - using CreateSampleUserDataCallback = void*(); - using CopySampleUserDataCallback = void*(void*); - using DestroySampleUserDataCallback = void(void*); - - // Sets callbacks for lifetime control of custom user data attached to allocation samples - static void SetSampleUserDataCallbacks( - CreateSampleUserDataCallback create, - CopySampleUserDataCallback copy, - DestroySampleUserDataCallback destroy); + + using CreateSampleUserDataCallback = void*(); + using CopySampleUserDataCallback = void*(void*); + using DestroySampleUserDataCallback = void(void*); + + // Sets callbacks for lifetime control of custom user data attached to allocation samples + static void SetSampleUserDataCallbacks( + CreateSampleUserDataCallback create, + CopySampleUserDataCallback copy, + DestroySampleUserDataCallback destroy); }; } // namespace tcmalloc diff --git a/contrib/libs/tcmalloc/tcmalloc/peak_heap_tracker.cc b/contrib/libs/tcmalloc/tcmalloc/peak_heap_tracker.cc index 0dcc0df536..7bb756885b 100644 --- a/contrib/libs/tcmalloc/tcmalloc/peak_heap_tracker.cc +++ b/contrib/libs/tcmalloc/tcmalloc/peak_heap_tracker.cc @@ -55,7 +55,7 @@ void PeakHeapTracker::MaybeSaveSample() { StackTrace *t = peak_sampled_span_stacks_, *next = nullptr; while (t != nullptr) { next = reinterpret_cast<StackTrace*>(t->stack[kMaxStackDepth - 1]); - Static::DestroySampleUserData(t->user_data); + Static::DestroySampleUserData(t->user_data); Static::stacktrace_allocator().Delete(t); t = next; } @@ -64,9 +64,9 @@ void PeakHeapTracker::MaybeSaveSample() { for (Span* s : Static::sampled_objects_) { t = Static::stacktrace_allocator().New(); - StackTrace* sampled_stack = s->sampled_stack(); - *t = *sampled_stack; - t->user_data = Static::CopySampleUserData(sampled_stack->user_data); + StackTrace* sampled_stack = s->sampled_stack(); + *t = *sampled_stack; + t->user_data = Static::CopySampleUserData(sampled_stack->user_data); if (t->depth == kMaxStackDepth) { t->depth = kMaxStackDepth - 1; } diff --git a/contrib/libs/tcmalloc/tcmalloc/stack_trace_table.cc b/contrib/libs/tcmalloc/tcmalloc/stack_trace_table.cc index 5b5741b6a8..da3cbc4d8f 100644 --- a/contrib/libs/tcmalloc/tcmalloc/stack_trace_table.cc +++ b/contrib/libs/tcmalloc/tcmalloc/stack_trace_table.cc @@ -73,7 +73,7 @@ StackTraceTable::~StackTraceTable() { Bucket* b = table_[i]; while (b != nullptr) { Bucket* next = b->next; - Static::DestroySampleUserData(b->trace.user_data); + Static::DestroySampleUserData(b->trace.user_data); Static::bucket_allocator().Delete(b); b = next; } @@ -105,7 +105,7 @@ void StackTraceTable::AddTrace(double count, const StackTrace& t) { b = Static::bucket_allocator().New(); b->hash = h; b->trace = t; - b->trace.user_data = Static::CopySampleUserData(t.user_data); + b->trace.user_data = Static::CopySampleUserData(t.user_data); b->count = count; b->total_weight = t.weight * count; b->next = table_[idx]; @@ -137,8 +137,8 @@ void StackTraceTable::Iterate( e.requested_alignment = b->trace.requested_alignment; e.allocated_size = allocated_size; - e.user_data = b->trace.user_data; - + e.user_data = b->trace.user_data; + e.depth = b->trace.depth; static_assert(kMaxStackDepth <= Profile::Sample::kMaxStackDepth, "Profile stack size smaller than internal stack sizes"); diff --git a/contrib/libs/tcmalloc/tcmalloc/static_vars.cc b/contrib/libs/tcmalloc/tcmalloc/static_vars.cc index 08a70de493..c517daa393 100644 --- a/contrib/libs/tcmalloc/tcmalloc/static_vars.cc +++ b/contrib/libs/tcmalloc/tcmalloc/static_vars.cc @@ -60,12 +60,12 @@ ABSL_CONST_INIT PageHeapAllocator<StackTraceTable::Bucket> ABSL_CONST_INIT std::atomic<bool> Static::inited_{false}; ABSL_CONST_INIT bool Static::cpu_cache_active_ = false; ABSL_CONST_INIT bool Static::fork_support_enabled_ = false; -ABSL_CONST_INIT Static::CreateSampleUserDataCallback* - Static::create_sample_user_data_callback_ = nullptr; -ABSL_CONST_INIT Static::CopySampleUserDataCallback* - Static::copy_sample_user_data_callback_ = nullptr; -ABSL_CONST_INIT Static::DestroySampleUserDataCallback* - Static::destroy_sample_user_data_callback_ = nullptr; +ABSL_CONST_INIT Static::CreateSampleUserDataCallback* + Static::create_sample_user_data_callback_ = nullptr; +ABSL_CONST_INIT Static::CopySampleUserDataCallback* + Static::copy_sample_user_data_callback_ = nullptr; +ABSL_CONST_INIT Static::DestroySampleUserDataCallback* + Static::destroy_sample_user_data_callback_ = nullptr; ABSL_CONST_INIT Static::PageAllocatorStorage Static::page_allocator_; ABSL_CONST_INIT PageMap Static::pagemap_; ABSL_CONST_INIT absl::base_internal::SpinLock guarded_page_lock( diff --git a/contrib/libs/tcmalloc/tcmalloc/static_vars.h b/contrib/libs/tcmalloc/tcmalloc/static_vars.h index be68edc189..9985c3a18c 100644 --- a/contrib/libs/tcmalloc/tcmalloc/static_vars.h +++ b/contrib/libs/tcmalloc/tcmalloc/static_vars.h @@ -130,34 +130,34 @@ class Static { static bool ForkSupportEnabled() { return fork_support_enabled_; } static void EnableForkSupport() { fork_support_enabled_ = true; } - using CreateSampleUserDataCallback = void*(); - using CopySampleUserDataCallback = void*(void*); - using DestroySampleUserDataCallback = void(void*); - - static void SetSampleUserDataCallbacks( - CreateSampleUserDataCallback create, - CopySampleUserDataCallback copy, - DestroySampleUserDataCallback destroy) { - create_sample_user_data_callback_ = create; - copy_sample_user_data_callback_ = copy; - destroy_sample_user_data_callback_ = destroy; - } - - static void* CreateSampleUserData() { - if (create_sample_user_data_callback_) - return create_sample_user_data_callback_(); - return nullptr; - } - static void* CopySampleUserData(void* user_data) { - if (copy_sample_user_data_callback_) - return copy_sample_user_data_callback_(user_data); - return nullptr; - } - static void DestroySampleUserData(void* user_data) { - if (destroy_sample_user_data_callback_) - destroy_sample_user_data_callback_(user_data); - } - + using CreateSampleUserDataCallback = void*(); + using CopySampleUserDataCallback = void*(void*); + using DestroySampleUserDataCallback = void(void*); + + static void SetSampleUserDataCallbacks( + CreateSampleUserDataCallback create, + CopySampleUserDataCallback copy, + DestroySampleUserDataCallback destroy) { + create_sample_user_data_callback_ = create; + copy_sample_user_data_callback_ = copy; + destroy_sample_user_data_callback_ = destroy; + } + + static void* CreateSampleUserData() { + if (create_sample_user_data_callback_) + return create_sample_user_data_callback_(); + return nullptr; + } + static void* CopySampleUserData(void* user_data) { + if (copy_sample_user_data_callback_) + return copy_sample_user_data_callback_(user_data); + return nullptr; + } + static void DestroySampleUserData(void* user_data) { + if (destroy_sample_user_data_callback_) + destroy_sample_user_data_callback_(user_data); + } + static bool ABSL_ATTRIBUTE_ALWAYS_INLINE IsOnFastPath() { return #ifndef TCMALLOC_DEPRECATED_PERTHREAD @@ -204,9 +204,9 @@ class Static { ABSL_CONST_INIT static std::atomic<bool> inited_; static bool cpu_cache_active_; static bool fork_support_enabled_; - static CreateSampleUserDataCallback* create_sample_user_data_callback_; - static CopySampleUserDataCallback* copy_sample_user_data_callback_; - static DestroySampleUserDataCallback* destroy_sample_user_data_callback_; + static CreateSampleUserDataCallback* create_sample_user_data_callback_; + static CopySampleUserDataCallback* copy_sample_user_data_callback_; + static DestroySampleUserDataCallback* destroy_sample_user_data_callback_; ABSL_CONST_INIT static PeakHeapTracker peak_heap_tracker_; ABSL_CONST_INIT static NumaTopology<kNumaPartitions, kNumBaseClasses> numa_topology_; diff --git a/contrib/libs/tcmalloc/tcmalloc/tcmalloc.cc b/contrib/libs/tcmalloc/tcmalloc/tcmalloc.cc index 8e62ba91b9..8c3a03f610 100644 --- a/contrib/libs/tcmalloc/tcmalloc/tcmalloc.cc +++ b/contrib/libs/tcmalloc/tcmalloc/tcmalloc.cc @@ -1151,13 +1151,13 @@ void TCMallocPostFork() { } } -extern "C" void MallocExtension_SetSampleUserDataCallbacks( - MallocExtension::CreateSampleUserDataCallback create, - MallocExtension::CopySampleUserDataCallback copy, - MallocExtension::DestroySampleUserDataCallback destroy) { - Static::SetSampleUserDataCallbacks(create, copy, destroy); -} - +extern "C" void MallocExtension_SetSampleUserDataCallbacks( + MallocExtension::CreateSampleUserDataCallback create, + MallocExtension::CopySampleUserDataCallback copy, + MallocExtension::DestroySampleUserDataCallback destroy) { + Static::SetSampleUserDataCallbacks(create, copy, destroy); +} + // nallocx slow path. // Moved to a separate function because size_class_with_alignment is not inlined // which would cause nallocx to become non-leaf function with stack frame and @@ -1507,7 +1507,7 @@ static void* SampleifyAllocation(size_t requested_size, size_t weight, tmp.requested_alignment = requested_alignment; tmp.allocated_size = allocated_size; tmp.weight = weight; - tmp.user_data = Static::CreateSampleUserData(); + tmp.user_data = Static::CreateSampleUserData(); { absl::base_internal::SpinLockHolder h(&pageheap_lock); @@ -1637,7 +1637,7 @@ static void do_free_pages(void* ptr, const PageId p) { 1); } notify_sampled_alloc = true; - Static::DestroySampleUserData(st->user_data); + Static::DestroySampleUserData(st->user_data); Static::stacktrace_allocator().Delete(st); } if (IsSampledMemory(ptr)) { |