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

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

Issue 2535213002: [WIP] Add SharedMemoryTracker to dump base::SharedMemory usage
Patch Set: (rebase) Created 3 years, 7 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"
(...skipping 10 matching lines...) Expand all
33 if (memory_tracker_) { 34 if (memory_tracker_) {
34 base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider( 35 base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider(
35 this, "gpu::TransferBufferManager", 36 this, "gpu::TransferBufferManager",
36 base::ThreadTaskRunnerHandle::Get()); 37 base::ThreadTaskRunnerHandle::Get());
37 } 38 }
38 } 39 }
39 40
40 TransferBufferManager::~TransferBufferManager() { 41 TransferBufferManager::~TransferBufferManager() {
41 while (!registered_buffers_.empty()) { 42 while (!registered_buffers_.empty()) {
42 BufferMap::iterator it = registered_buffers_.begin(); 43 BufferMap::iterator it = registered_buffers_.begin();
43 if (it->second->backing()->is_shared()) { 44 if (it->second->backing()->shared_memory()) {
44 DCHECK(shared_memory_bytes_allocated_ >= it->second->size()); 45 DCHECK(shared_memory_bytes_allocated_ >= it->second->size());
45 shared_memory_bytes_allocated_ -= it->second->size(); 46 shared_memory_bytes_allocated_ -= it->second->size();
46 } 47 }
47 registered_buffers_.erase(it); 48 registered_buffers_.erase(it);
48 } 49 }
49 DCHECK(!shared_memory_bytes_allocated_); 50 DCHECK(!shared_memory_bytes_allocated_);
50 51
51 base::trace_event::MemoryDumpManager::GetInstance()->UnregisterDumpProvider( 52 base::trace_event::MemoryDumpManager::GetInstance()->UnregisterDumpProvider(
52 this); 53 this);
53 } 54 }
(...skipping 12 matching lines...) Expand all
66 return false; 67 return false;
67 } 68 }
68 69
69 // Register the shared memory with the ID. 70 // Register the shared memory with the ID.
70 scoped_refptr<Buffer> buffer(new gpu::Buffer(std::move(buffer_backing))); 71 scoped_refptr<Buffer> buffer(new gpu::Buffer(std::move(buffer_backing)));
71 72
72 // Check buffer alignment is sane. 73 // Check buffer alignment is sane.
73 DCHECK(!(reinterpret_cast<uintptr_t>(buffer->memory()) & 74 DCHECK(!(reinterpret_cast<uintptr_t>(buffer->memory()) &
74 (kCommandBufferEntrySize - 1))); 75 (kCommandBufferEntrySize - 1)));
75 76
76 if (buffer->backing()->is_shared()) 77 if (buffer->backing()->shared_memory())
77 shared_memory_bytes_allocated_ += buffer->size(); 78 shared_memory_bytes_allocated_ += buffer->size();
78 registered_buffers_[id] = buffer; 79 registered_buffers_[id] = buffer;
79 80
80 return true; 81 return true;
81 } 82 }
82 83
83 void TransferBufferManager::DestroyTransferBuffer(int32_t id) { 84 void TransferBufferManager::DestroyTransferBuffer(int32_t id) {
84 BufferMap::iterator it = registered_buffers_.find(id); 85 BufferMap::iterator it = registered_buffers_.find(id);
85 if (it == registered_buffers_.end()) { 86 if (it == registered_buffers_.end()) {
86 DVLOG(0) << "Transfer buffer ID was not registered."; 87 DVLOG(0) << "Transfer buffer ID was not registered.";
87 return; 88 return;
88 } 89 }
89 90
90 if (it->second->backing()->is_shared()) { 91 if (it->second->backing()->shared_memory()) {
91 DCHECK(shared_memory_bytes_allocated_ >= it->second->size()); 92 DCHECK(shared_memory_bytes_allocated_ >= it->second->size());
92 shared_memory_bytes_allocated_ -= it->second->size(); 93 shared_memory_bytes_allocated_ -= it->second->size();
93 } 94 }
94 registered_buffers_.erase(it); 95 registered_buffers_.erase(it);
95 } 96 }
96 97
97 scoped_refptr<Buffer> TransferBufferManager::GetTransferBuffer(int32_t id) { 98 scoped_refptr<Buffer> TransferBufferManager::GetTransferBuffer(int32_t id) {
98 if (id == 0) 99 if (id == 0)
99 return NULL; 100 return NULL;
100 101
(...skipping 24 matching lines...) Expand all
125 126
126 for (const auto& buffer_entry : registered_buffers_) { 127 for (const auto& buffer_entry : registered_buffers_) {
127 int32_t buffer_id = buffer_entry.first; 128 int32_t buffer_id = buffer_entry.first;
128 const Buffer* buffer = buffer_entry.second.get(); 129 const Buffer* buffer = buffer_entry.second.get();
129 std::string dump_name = 130 std::string dump_name =
130 base::StringPrintf("gpu/transfer_memory/client_%d/buffer_%d", 131 base::StringPrintf("gpu/transfer_memory/client_%d/buffer_%d",
131 memory_tracker_->ClientId(), buffer_id); 132 memory_tracker_->ClientId(), buffer_id);
132 MemoryAllocatorDump* dump = pmd->CreateAllocatorDump(dump_name); 133 MemoryAllocatorDump* dump = pmd->CreateAllocatorDump(dump_name);
133 dump->AddScalar(MemoryAllocatorDump::kNameSize, 134 dump->AddScalar(MemoryAllocatorDump::kNameSize,
134 MemoryAllocatorDump::kUnitsBytes, buffer->size()); 135 MemoryAllocatorDump::kUnitsBytes, buffer->size());
135 if (buffer->backing()->is_shared()) { 136 base::SharedMemory* shared_memory =
136 auto guid = GetBufferGUIDForTracing(memory_tracker_->ClientTracingId(), 137 buffer_entry.second->backing()->shared_memory();
137 buffer_id); 138 if (shared_memory) {
138 pmd->CreateSharedGlobalAllocatorDump(guid); 139 base::SharedMemoryTracker::AddOwnershipEdges(pmd, dump->guid(),
139 pmd->AddOwnershipEdge(dump->guid(), guid); 140 *shared_memory);
140 } 141 }
141 } 142 }
142 143
143 return true; 144 return true;
144 } 145 }
145 146
146 } // namespace gpu 147 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/buffer_manager.cc ('k') | gpu/ipc/client/gpu_memory_buffer_impl_shared_memory.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698