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

Unified Diff: third_party/WebKit/Source/platform/PartitionAllocMemoryDumpProvider.cpp

Issue 2890363003: Enable sharding of AllocationRegister on desktop. (Closed)
Patch Set: comments from primiano, thakis. Created 3 years, 7 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/platform/PartitionAllocMemoryDumpProvider.cpp
diff --git a/third_party/WebKit/Source/platform/PartitionAllocMemoryDumpProvider.cpp b/third_party/WebKit/Source/platform/PartitionAllocMemoryDumpProvider.cpp
index 84e221517da6ffbecb161e0bd18b9928e0929e1d..59269a23ddb36111e0d587e768524599fbfdc7fb 100644
--- a/third_party/WebKit/Source/platform/PartitionAllocMemoryDumpProvider.cpp
+++ b/third_party/WebKit/Source/platform/PartitionAllocMemoryDumpProvider.cpp
@@ -7,7 +7,6 @@
#include <unordered_map>
#include "base/strings/stringprintf.h"
-#include "base/trace_event/heap_profiler_allocation_context.h"
#include "base/trace_event/heap_profiler_allocation_context_tracker.h"
#include "base/trace_event/heap_profiler_allocation_register.h"
#include "base/trace_event/process_memory_dump.h"
@@ -135,25 +134,17 @@ bool PartitionAllocMemoryDumpProvider::OnMemoryDump(
using base::trace_event::MemoryDumpLevelOfDetail;
MemoryDumpLevelOfDetail level_of_detail = args.level_of_detail;
- if (is_heap_profiling_enabled_) {
+ if (allocation_register_.is_enabled()) {
// Overhead should always be reported, regardless of light vs. heavy.
base::trace_event::TraceEventMemoryOverhead overhead;
std::unordered_map<base::trace_event::AllocationContext,
base::trace_event::AllocationMetrics>
metrics_by_context;
- {
- MutexLocker locker(allocation_register_mutex_);
- // Dump only the overhead estimation in non-detailed dumps.
- if (level_of_detail == MemoryDumpLevelOfDetail::DETAILED) {
- for (const auto& alloc_size : *allocation_register_) {
- base::trace_event::AllocationMetrics& metrics =
- metrics_by_context[alloc_size.context];
- metrics.size += alloc_size.size;
- metrics.count++;
- }
- }
- allocation_register_->EstimateTraceMemoryOverhead(&overhead);
+ // Dump only the overhead estimation in non-detailed dumps.
+ if (level_of_detail == MemoryDumpLevelOfDetail::DETAILED) {
+ allocation_register_.UpdateAndReturnsMetrics(metrics_by_context);
}
+ allocation_register_.EstimateTraceMemoryOverhead(&overhead);
memory_dump->DumpHeapUsage(metrics_by_context, overhead, "partition_alloc");
}
@@ -181,25 +172,20 @@ bool PartitionAllocMemoryDumpProvider::OnMemoryDump(
// |m_allocationRegister| should be initialized only when necessary to avoid
// waste of memory.
-PartitionAllocMemoryDumpProvider::PartitionAllocMemoryDumpProvider()
- : allocation_register_(nullptr), is_heap_profiling_enabled_(false) {}
+PartitionAllocMemoryDumpProvider::PartitionAllocMemoryDumpProvider() {}
PartitionAllocMemoryDumpProvider::~PartitionAllocMemoryDumpProvider() {}
void PartitionAllocMemoryDumpProvider::OnHeapProfilingEnabled(bool enabled) {
if (enabled) {
- {
- MutexLocker locker(allocation_register_mutex_);
- if (!allocation_register_)
- allocation_register_.reset(new base::trace_event::AllocationRegister());
- }
+ allocation_register_.SetEnabled();
WTF::PartitionAllocHooks::SetAllocationHook(ReportAllocation);
WTF::PartitionAllocHooks::SetFreeHook(ReportFree);
} else {
WTF::PartitionAllocHooks::SetAllocationHook(nullptr);
WTF::PartitionAllocHooks::SetFreeHook(nullptr);
+ allocation_register_.SetDisabled();
}
- is_heap_profiling_enabled_ = enabled;
}
void PartitionAllocMemoryDumpProvider::insert(void* address,
@@ -212,15 +198,15 @@ void PartitionAllocMemoryDumpProvider::insert(void* address,
return;
context.type_name = type_name;
- MutexLocker locker(allocation_register_mutex_);
- if (allocation_register_)
- allocation_register_->Insert(address, size, context);
+ if (!allocation_register_.is_enabled())
+ return;
+ allocation_register_.Insert(address, size, context);
}
void PartitionAllocMemoryDumpProvider::Remove(void* address) {
- MutexLocker locker(allocation_register_mutex_);
- if (allocation_register_)
- allocation_register_->Remove(address);
+ if (!allocation_register_.is_enabled())
+ return;
+ allocation_register_.Remove(address);
}
} // namespace blink

Powered by Google App Engine
This is Rietveld 408576698