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

Side by Side Diff: gpu/command_buffer/service/transfer_buffer_manager.cc

Issue 2535213002: [WIP] Add SharedMemoryTracker to dump base::SharedMemory usage
Patch Set: Implement buckets Created 3 years, 11 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "gpu/command_buffer/service/transfer_buffer_manager.h" 5 #include "gpu/command_buffer/service/transfer_buffer_manager.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include <limits> 9 #include <limits>
10 #include <memory> 10 #include <memory>
11 11
12 #include "base/logging.h" 12 #include "base/logging.h"
13 #include "base/memory/shared_memory_tracker.h"
13 #include "base/process/process_handle.h" 14 #include "base/process/process_handle.h"
14 #include "base/strings/stringprintf.h" 15 #include "base/strings/stringprintf.h"
15 #include "base/threading/thread_task_runner_handle.h" 16 #include "base/threading/thread_task_runner_handle.h"
16 #include "base/trace_event/memory_allocator_dump.h" 17 #include "base/trace_event/memory_allocator_dump.h"
17 #include "base/trace_event/memory_dump_manager.h" 18 #include "base/trace_event/memory_dump_manager.h"
18 #include "base/trace_event/process_memory_dump.h" 19 #include "base/trace_event/process_memory_dump.h"
19 #include "base/trace_event/trace_event.h" 20 #include "base/trace_event/trace_event.h"
20 #include "gpu/command_buffer/common/cmd_buffer_common.h" 21 #include "gpu/command_buffer/common/cmd_buffer_common.h"
21 #include "gpu/command_buffer/common/gles2_cmd_utils.h" 22 #include "gpu/command_buffer/common/gles2_cmd_utils.h"
22 #include "gpu/command_buffer/service/memory_tracking.h" 23 #include "gpu/command_buffer/service/memory_tracking.h"
23 24
24 using ::base::SharedMemory; 25 using ::base::SharedMemory;
25 26
26 namespace gpu { 27 namespace gpu {
27 28
28 TransferBufferManagerInterface::~TransferBufferManagerInterface() { 29 TransferBufferManagerInterface::~TransferBufferManagerInterface() {
29 } 30 }
30 31
31 TransferBufferManager::TransferBufferManager( 32 TransferBufferManager::TransferBufferManager(
32 gles2::MemoryTracker* memory_tracker) 33 gles2::MemoryTracker* memory_tracker)
33 : shared_memory_bytes_allocated_(0), memory_tracker_(memory_tracker) {} 34 : shared_memory_bytes_allocated_(0), memory_tracker_(memory_tracker) {}
34 35
35 TransferBufferManager::~TransferBufferManager() { 36 TransferBufferManager::~TransferBufferManager() {
36 while (!registered_buffers_.empty()) { 37 while (!registered_buffers_.empty()) {
37 BufferMap::iterator it = registered_buffers_.begin(); 38 BufferMap::iterator it = registered_buffers_.begin();
38 if (it->second->backing()->is_shared()) { 39 if (it->second->backing()->shared_memory()) {
39 DCHECK(shared_memory_bytes_allocated_ >= it->second->size()); 40 DCHECK(shared_memory_bytes_allocated_ >= it->second->size());
40 shared_memory_bytes_allocated_ -= it->second->size(); 41 shared_memory_bytes_allocated_ -= it->second->size();
41 } 42 }
42 registered_buffers_.erase(it); 43 registered_buffers_.erase(it);
43 } 44 }
44 DCHECK(!shared_memory_bytes_allocated_); 45 DCHECK(!shared_memory_bytes_allocated_);
45 46
46 base::trace_event::MemoryDumpManager::GetInstance()->UnregisterDumpProvider( 47 base::trace_event::MemoryDumpManager::GetInstance()->UnregisterDumpProvider(
47 this); 48 this);
48 } 49 }
(...skipping 23 matching lines...) Expand all
72 return false; 73 return false;
73 } 74 }
74 75
75 // Register the shared memory with the ID. 76 // Register the shared memory with the ID.
76 scoped_refptr<Buffer> buffer(new gpu::Buffer(std::move(buffer_backing))); 77 scoped_refptr<Buffer> buffer(new gpu::Buffer(std::move(buffer_backing)));
77 78
78 // Check buffer alignment is sane. 79 // Check buffer alignment is sane.
79 DCHECK(!(reinterpret_cast<uintptr_t>(buffer->memory()) & 80 DCHECK(!(reinterpret_cast<uintptr_t>(buffer->memory()) &
80 (kCommandBufferEntrySize - 1))); 81 (kCommandBufferEntrySize - 1)));
81 82
82 if (buffer->backing()->is_shared()) 83 if (buffer->backing()->shared_memory())
83 shared_memory_bytes_allocated_ += buffer->size(); 84 shared_memory_bytes_allocated_ += buffer->size();
84 registered_buffers_[id] = buffer; 85 registered_buffers_[id] = buffer;
85 86
86 return true; 87 return true;
87 } 88 }
88 89
89 void TransferBufferManager::DestroyTransferBuffer(int32_t id) { 90 void TransferBufferManager::DestroyTransferBuffer(int32_t id) {
90 BufferMap::iterator it = registered_buffers_.find(id); 91 BufferMap::iterator it = registered_buffers_.find(id);
91 if (it == registered_buffers_.end()) { 92 if (it == registered_buffers_.end()) {
92 DVLOG(0) << "Transfer buffer ID was not registered."; 93 DVLOG(0) << "Transfer buffer ID was not registered.";
93 return; 94 return;
94 } 95 }
95 96
96 if (it->second->backing()->is_shared()) { 97 if (it->second->backing()->shared_memory()) {
97 DCHECK(shared_memory_bytes_allocated_ >= it->second->size()); 98 DCHECK(shared_memory_bytes_allocated_ >= it->second->size());
98 shared_memory_bytes_allocated_ -= it->second->size(); 99 shared_memory_bytes_allocated_ -= it->second->size();
99 } 100 }
100 registered_buffers_.erase(it); 101 registered_buffers_.erase(it);
101 } 102 }
102 103
103 scoped_refptr<Buffer> TransferBufferManager::GetTransferBuffer(int32_t id) { 104 scoped_refptr<Buffer> TransferBufferManager::GetTransferBuffer(int32_t id) {
104 if (id == 0) 105 if (id == 0)
105 return NULL; 106 return NULL;
106 107
(...skipping 24 matching lines...) Expand all
131 132
132 for (const auto& buffer_entry : registered_buffers_) { 133 for (const auto& buffer_entry : registered_buffers_) {
133 int32_t buffer_id = buffer_entry.first; 134 int32_t buffer_id = buffer_entry.first;
134 const Buffer* buffer = buffer_entry.second.get(); 135 const Buffer* buffer = buffer_entry.second.get();
135 std::string dump_name = 136 std::string dump_name =
136 base::StringPrintf("gpu/transfer_memory/client_%d/buffer_%d", 137 base::StringPrintf("gpu/transfer_memory/client_%d/buffer_%d",
137 memory_tracker_->ClientId(), buffer_id); 138 memory_tracker_->ClientId(), buffer_id);
138 MemoryAllocatorDump* dump = pmd->CreateAllocatorDump(dump_name); 139 MemoryAllocatorDump* dump = pmd->CreateAllocatorDump(dump_name);
139 dump->AddScalar(MemoryAllocatorDump::kNameSize, 140 dump->AddScalar(MemoryAllocatorDump::kNameSize,
140 MemoryAllocatorDump::kUnitsBytes, buffer->size()); 141 MemoryAllocatorDump::kUnitsBytes, buffer->size());
141 if (buffer->backing()->is_shared()) { 142 base::SharedMemory* shared_memory =
143 buffer_entry.second->backing()->shared_memory();
144 if (shared_memory) {
142 auto guid = GetBufferGUIDForTracing(memory_tracker_->ClientTracingId(), 145 auto guid = GetBufferGUIDForTracing(memory_tracker_->ClientTracingId(),
143 buffer_id); 146 buffer_id);
144 pmd->CreateSharedGlobalAllocatorDump(guid); 147 pmd->CreateSharedGlobalAllocatorDump(guid);
145 pmd->AddOwnershipEdge(dump->guid(), guid); 148 pmd->AddOwnershipEdge(dump->guid(), guid);
149 base::SharedMemoryTracker::AddOwnershipEdgeToSharedGlobalDump(pmd, guid,
150 shared_memory->handle(), shared_memory->mapped_size());
146 } 151 }
147 } 152 }
148 153
149 return true; 154 return true;
150 } 155 }
151 156
152 } // namespace gpu 157 } // namespace gpu
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698