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 ccf2729c557f660e3b675def1393449be60564dd..b641c0697442579e09a4b2801beca411f05540e3 100644 |
--- a/content/common/discardable_shared_memory_heap.cc |
+++ b/content/common/discardable_shared_memory_heap.cc |
@@ -28,8 +28,10 @@ DiscardableSharedMemoryHeap::Span::Span( |
base::DiscardableSharedMemory* shared_memory, |
size_t start, |
size_t length) |
- : shared_memory_(shared_memory), start_(start), length_(length) { |
-} |
+ : shared_memory_(shared_memory), |
+ start_(start), |
+ length_(length), |
+ is_locked_(false) {} |
DiscardableSharedMemoryHeap::Span::~Span() { |
} |
@@ -278,6 +280,7 @@ DiscardableSharedMemoryHeap::Carve(Span* span, size_t blocks) { |
if (extra) { |
scoped_ptr<Span> leftover( |
new Span(serving->shared_memory_, serving->start_ + blocks, extra)); |
+ leftover->set_is_locked(false); |
DCHECK_IMPLIES(extra > 1, spans_.find(leftover->start_) == spans_.end()); |
RegisterSpan(leftover.get()); |
@@ -366,18 +369,23 @@ void DiscardableSharedMemoryHeap::OnMemoryDump( |
int32_t segment_id, |
base::trace_event::ProcessMemoryDump* pmd) { |
size_t allocated_objects_count = 0; |
- size_t allocated_objects_size_in_bytes = 0; |
+ size_t allocated_objects_blocks = 0; |
reveman
2015/10/13 18:24:33
nit: /_objects_blocks/objects_size_in_blocks/
|
+ size_t locked_objects_blocks = 0; |
reveman
2015/10/13 18:24:33
nit: ditto
|
size_t offset = |
reinterpret_cast<size_t>(shared_memory->memory()) / block_size_; |
size_t end = offset + size / block_size_; |
while (offset < end) { |
Span* span = spans_[offset]; |
if (!IsInFreeList(span)) { |
+ allocated_objects_blocks += span->length_; |
+ locked_objects_blocks += span->is_locked_ ? span->length_ : 0; |
allocated_objects_count++; |
- allocated_objects_size_in_bytes += span->length_ * block_size_; |
} |
offset += span->length_; |
} |
+ size_t allocated_objects_size_in_bytes = |
+ allocated_objects_blocks * block_size_; |
+ size_t locked_objects_size_in_bytes = locked_objects_blocks * block_size_; |
std::string segment_dump_name = |
base::StringPrintf("discardable/segment_%d", segment_id); |
@@ -385,16 +393,19 @@ void DiscardableSharedMemoryHeap::OnMemoryDump( |
pmd->CreateAllocatorDump(segment_dump_name); |
segment_dump->AddScalar(base::trace_event::MemoryAllocatorDump::kNameSize, |
base::trace_event::MemoryAllocatorDump::kUnitsBytes, |
- static_cast<uint64_t>(size)); |
+ size); |
base::trace_event::MemoryAllocatorDump* obj_dump = |
pmd->CreateAllocatorDump(segment_dump_name + "/allocated_objects"); |
obj_dump->AddScalar(base::trace_event::MemoryAllocatorDump::kNameObjectCount, |
base::trace_event::MemoryAllocatorDump::kUnitsObjects, |
- static_cast<uint64_t>(allocated_objects_count)); |
+ allocated_objects_count); |
obj_dump->AddScalar(base::trace_event::MemoryAllocatorDump::kNameSize, |
base::trace_event::MemoryAllocatorDump::kUnitsBytes, |
- static_cast<uint64_t>(allocated_objects_size_in_bytes)); |
+ allocated_objects_size_in_bytes); |
+ obj_dump->AddScalar("locked_size", |
+ base::trace_event::MemoryAllocatorDump::kUnitsBytes, |
+ locked_objects_size_in_bytes); |
// Emit an ownership edge towards a global allocator dump node. This allows |
// to avoid double-counting segments when both browser and child process emit |