Index: content/common/discardable_shared_memory_heap.cc |
diff --git a/content/common/discardable_shared_memory_heap.cc b/content/common/discardable_shared_memory_heap.cc |
index 958fa82554efecf5d9c4dee25bb6206cf7e891c9..8996979a730afc1e252de45557bf3acf0574e038 100644 |
--- a/content/common/discardable_shared_memory_heap.cc |
+++ b/content/common/discardable_shared_memory_heap.cc |
@@ -60,6 +60,27 @@ bool DiscardableSharedMemoryHeap::ScopedMemorySegment::IsResident() const { |
return heap_->IsMemoryResident(shared_memory_.get()); |
} |
+bool DiscardableSharedMemoryHeap::ScopedMemorySegment::ContainsSpan( |
+ Span* span) const { |
+ return shared_memory_ == span->shared_memory(); |
+} |
+ |
+base::trace_event::MemoryAllocatorDump* |
+DiscardableSharedMemoryHeap::ScopedMemorySegment::CreateMemoryAllocatorDump( |
+ Span* span, |
+ const char* name, |
+ base::trace_event::ProcessMemoryDump* pmd) const { |
+ DCHECK_EQ(shared_memory_, span->shared_memory()); |
+ base::trace_event::MemoryAllocatorDump* dump = pmd->CreateAllocatorDump(name); |
+ dump->AddScalar(base::trace_event::MemoryAllocatorDump::kNameSize, |
+ base::trace_event::MemoryAllocatorDump::kUnitsBytes, |
+ static_cast<uint64_t>(span->length())); |
+ |
+ pmd->AddSuballocation(dump->guid(), |
+ base::StringPrintf("discardable/segment_%d", id_)); |
+ return dump; |
+} |
+ |
void DiscardableSharedMemoryHeap::ScopedMemorySegment::OnMemoryDump( |
base::trace_event::ProcessMemoryDump* pmd) const { |
heap_->OnMemoryDump(shared_memory_.get(), size_, id_, pmd); |
@@ -398,4 +419,26 @@ DiscardableSharedMemoryHeap::GetSegmentGUIDForTracing(uint64 tracing_process_id, |
"discardable-x-process/%" PRIx64 "/%d", tracing_process_id, segment_id)); |
} |
+base::trace_event::MemoryAllocatorDump* |
+DiscardableSharedMemoryHeap::CreateMemoryAllocatorDump( |
+ Span* span, |
+ const char* name, |
+ base::trace_event::ProcessMemoryDump* pmd) const { |
+ if (!span->shared_memory()) { |
+ base::trace_event::MemoryAllocatorDump* dump = |
+ pmd->CreateAllocatorDump(name); |
+ dump->AddScalar(base::trace_event::MemoryAllocatorDump::kNameSize, |
+ base::trace_event::MemoryAllocatorDump::kUnitsBytes, 0u); |
+ return dump; |
+ } |
+ |
+ ScopedVector<ScopedMemorySegment>::const_iterator it = |
+ std::find_if(memory_segments_.begin(), memory_segments_.end(), |
+ [span](const ScopedMemorySegment* segment) { |
+ return segment->ContainsSpan(span); |
+ }); |
+ DCHECK(it != memory_segments_.end()); |
+ return (*it)->CreateMemoryAllocatorDump(span, name, pmd); |
+} |
+ |
} // namespace content |