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

Unified Diff: base/trace_event/memory_profiler_allocation_context.cc

Issue 1419633004: [Tracing] Introduce HeapDumpWriter helper class (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address primiano comments Created 5 years, 2 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: base/trace_event/memory_profiler_allocation_context.cc
diff --git a/base/trace_event/memory_profiler_allocation_context.cc b/base/trace_event/memory_profiler_allocation_context.cc
index 1f3ea06c857f501630539a446e666acd53f426ff..5fdfd73f5db4f6e7ce358973a2c3b9e5a220ce72 100644
--- a/base/trace_event/memory_profiler_allocation_context.cc
+++ b/base/trace_event/memory_profiler_allocation_context.cc
@@ -5,7 +5,9 @@
#include "base/trace_event/memory_profiler_allocation_context.h"
#include <algorithm>
+#include <cstring>
+#include "base/hash.h"
#include "base/threading/thread_local_storage.h"
namespace base {
@@ -20,22 +22,10 @@ ThreadLocalStorage::StaticSlot g_tls_alloc_ctx_tracker = TLS_INITIALIZER;
AllocationStack::AllocationStack() {}
AllocationStack::~AllocationStack() {}
-// This function is added to the TLS slot to clean up the instance when the
-// thread exits.
-void DestructAllocationContextTracker(void* alloc_ctx_tracker) {
- delete static_cast<AllocationContextTracker*>(alloc_ctx_tracker);
-}
-
-AllocationContextTracker* AllocationContextTracker::GetThreadLocalTracker() {
- auto tracker =
- static_cast<AllocationContextTracker*>(g_tls_alloc_ctx_tracker.Get());
-
- if (!tracker) {
- tracker = new AllocationContextTracker();
- g_tls_alloc_ctx_tracker.Set(tracker);
- }
-
- return tracker;
+bool operator==(const Backtrace& lhs, const Backtrace& rhs) {
+ // Pointer equality of the stack frames is assumed, so instead of doing a deep
+ // string comparison on all of the frames, a |memcmp| suffices.
+ return std::memcmp(lhs.frames, rhs.frames, sizeof(lhs.frames)) == 0;
}
StackFrameDeduplicator::FrameNode::FrameNode(StackFrame frame,
@@ -46,7 +36,7 @@ StackFrameDeduplicator::FrameNode::~FrameNode() {}
StackFrameDeduplicator::StackFrameDeduplicator() {}
StackFrameDeduplicator::~StackFrameDeduplicator() {}
-int StackFrameDeduplicator::Insert(const AllocationContext::Backtrace& bt) {
+int StackFrameDeduplicator::Insert(const Backtrace& bt) {
int frame_index = -1;
std::map<StackFrame, int>* nodes = &roots_;
@@ -81,6 +71,24 @@ int StackFrameDeduplicator::Insert(const AllocationContext::Backtrace& bt) {
return frame_index;
}
+// This function is added to the TLS slot to clean up the instance when the
+// thread exits.
+void DestructAllocationContextTracker(void* alloc_ctx_tracker) {
Primiano Tucci (use gerrit) 2015/10/27 11:56:20 This should be moved perhaps in the anonymous name
Ruud van Asseldonk 2015/10/27 11:59:31 Can do when refactoring, other CLs touch this piec
+ delete static_cast<AllocationContextTracker*>(alloc_ctx_tracker);
+}
+
+AllocationContextTracker* AllocationContextTracker::GetThreadLocalTracker() {
+ auto tracker =
+ static_cast<AllocationContextTracker*>(g_tls_alloc_ctx_tracker.Get());
+
+ if (!tracker) {
+ tracker = new AllocationContextTracker();
+ g_tls_alloc_ctx_tracker.Set(tracker);
+ }
+
+ return tracker;
+}
+
AllocationContextTracker::AllocationContextTracker() {}
AllocationContextTracker::~AllocationContextTracker() {}
@@ -173,3 +181,13 @@ AllocationContext AllocationContextTracker::GetContextSnapshot() {
} // namespace trace_event
} // namespace base
+
+namespace BASE_HASH_NAMESPACE {
+using base::trace_event::Backtrace;
+
+uint32_t hash<Backtrace>::operator()(const Backtrace& backtrace) const {
+ return base::SuperFastHash(reinterpret_cast<const char*>(backtrace.frames),
+ sizeof(backtrace.frames));
+}
+
+} // BASE_HASH_NAMESPACE

Powered by Google App Engine
This is Rietveld 408576698