| 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;
|
| + size_t locked_objects_blocks = 0;
|
| 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
|
|
|