Chromium Code Reviews| 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 |