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

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

Issue 2912723002: Revert "Bug fix: TranferBufferManager's SharedMemory memory usage reporting was wrong" (Closed)
Patch Set: (rebase) Created 3 years, 6 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
« no previous file with comments | « gpu/command_buffer/common/buffer.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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>
(...skipping 22 matching lines...) Expand all
33 if (memory_tracker_) { 33 if (memory_tracker_) {
34 base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider( 34 base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider(
35 this, "gpu::TransferBufferManager", 35 this, "gpu::TransferBufferManager",
36 base::ThreadTaskRunnerHandle::Get()); 36 base::ThreadTaskRunnerHandle::Get());
37 } 37 }
38 } 38 }
39 39
40 TransferBufferManager::~TransferBufferManager() { 40 TransferBufferManager::~TransferBufferManager() {
41 while (!registered_buffers_.empty()) { 41 while (!registered_buffers_.empty()) {
42 BufferMap::iterator it = registered_buffers_.begin(); 42 BufferMap::iterator it = registered_buffers_.begin();
43 if (it->second->backing()->is_shared()) { 43 DCHECK(shared_memory_bytes_allocated_ >= it->second->size());
44 DCHECK(shared_memory_bytes_allocated_ >= it->second->size()); 44 shared_memory_bytes_allocated_ -= it->second->size();
45 shared_memory_bytes_allocated_ -= it->second->size();
46 }
47 registered_buffers_.erase(it); 45 registered_buffers_.erase(it);
48 } 46 }
49 DCHECK(!shared_memory_bytes_allocated_); 47 DCHECK(!shared_memory_bytes_allocated_);
50 48
51 base::trace_event::MemoryDumpManager::GetInstance()->UnregisterDumpProvider( 49 base::trace_event::MemoryDumpManager::GetInstance()->UnregisterDumpProvider(
52 this); 50 this);
53 } 51 }
54 52
55 bool TransferBufferManager::RegisterTransferBuffer( 53 bool TransferBufferManager::RegisterTransferBuffer(
56 int32_t id, 54 int32_t id,
57 std::unique_ptr<BufferBacking> buffer_backing) { 55 std::unique_ptr<BufferBacking> buffer_backing) {
58 if (id <= 0) { 56 if (id <= 0) {
59 DVLOG(0) << "Cannot register transfer buffer with non-positive ID."; 57 DVLOG(0) << "Cannot register transfer buffer with non-positive ID.";
60 return false; 58 return false;
61 } 59 }
62 60
63 // Fail if the ID is in use. 61 // Fail if the ID is in use.
64 if (registered_buffers_.find(id) != registered_buffers_.end()) { 62 if (registered_buffers_.find(id) != registered_buffers_.end()) {
65 DVLOG(0) << "Buffer ID already in use."; 63 DVLOG(0) << "Buffer ID already in use.";
66 return false; 64 return false;
67 } 65 }
68 66
69 // Register the shared memory with the ID. 67 // Register the shared memory with the ID.
70 scoped_refptr<Buffer> buffer(new gpu::Buffer(std::move(buffer_backing))); 68 scoped_refptr<Buffer> buffer(new gpu::Buffer(std::move(buffer_backing)));
71 69
72 // Check buffer alignment is sane. 70 // Check buffer alignment is sane.
73 DCHECK(!(reinterpret_cast<uintptr_t>(buffer->memory()) & 71 DCHECK(!(reinterpret_cast<uintptr_t>(buffer->memory()) &
74 (kCommandBufferEntrySize - 1))); 72 (kCommandBufferEntrySize - 1)));
75 73
76 if (buffer->backing()->is_shared()) 74 shared_memory_bytes_allocated_ += buffer->size();
77 shared_memory_bytes_allocated_ += buffer->size(); 75
78 registered_buffers_[id] = buffer; 76 registered_buffers_[id] = buffer;
79 77
80 return true; 78 return true;
81 } 79 }
82 80
83 void TransferBufferManager::DestroyTransferBuffer(int32_t id) { 81 void TransferBufferManager::DestroyTransferBuffer(int32_t id) {
84 BufferMap::iterator it = registered_buffers_.find(id); 82 BufferMap::iterator it = registered_buffers_.find(id);
85 if (it == registered_buffers_.end()) { 83 if (it == registered_buffers_.end()) {
86 DVLOG(0) << "Transfer buffer ID was not registered."; 84 DVLOG(0) << "Transfer buffer ID was not registered.";
87 return; 85 return;
88 } 86 }
89 87
90 if (it->second->backing()->is_shared()) { 88 DCHECK(shared_memory_bytes_allocated_ >= it->second->size());
91 DCHECK(shared_memory_bytes_allocated_ >= it->second->size()); 89 shared_memory_bytes_allocated_ -= it->second->size();
92 shared_memory_bytes_allocated_ -= it->second->size(); 90
93 }
94 registered_buffers_.erase(it); 91 registered_buffers_.erase(it);
95 } 92 }
96 93
97 scoped_refptr<Buffer> TransferBufferManager::GetTransferBuffer(int32_t id) { 94 scoped_refptr<Buffer> TransferBufferManager::GetTransferBuffer(int32_t id) {
98 if (id == 0) 95 if (id == 0)
99 return NULL; 96 return NULL;
100 97
101 BufferMap::iterator it = registered_buffers_.find(id); 98 BufferMap::iterator it = registered_buffers_.find(id);
102 if (it == registered_buffers_.end()) 99 if (it == registered_buffers_.end())
103 return NULL; 100 return NULL;
(...skipping 21 matching lines...) Expand all
125 122
126 for (const auto& buffer_entry : registered_buffers_) { 123 for (const auto& buffer_entry : registered_buffers_) {
127 int32_t buffer_id = buffer_entry.first; 124 int32_t buffer_id = buffer_entry.first;
128 const Buffer* buffer = buffer_entry.second.get(); 125 const Buffer* buffer = buffer_entry.second.get();
129 std::string dump_name = 126 std::string dump_name =
130 base::StringPrintf("gpu/transfer_memory/client_%d/buffer_%d", 127 base::StringPrintf("gpu/transfer_memory/client_%d/buffer_%d",
131 memory_tracker_->ClientId(), buffer_id); 128 memory_tracker_->ClientId(), buffer_id);
132 MemoryAllocatorDump* dump = pmd->CreateAllocatorDump(dump_name); 129 MemoryAllocatorDump* dump = pmd->CreateAllocatorDump(dump_name);
133 dump->AddScalar(MemoryAllocatorDump::kNameSize, 130 dump->AddScalar(MemoryAllocatorDump::kNameSize,
134 MemoryAllocatorDump::kUnitsBytes, buffer->size()); 131 MemoryAllocatorDump::kUnitsBytes, buffer->size());
135 if (buffer->backing()->is_shared()) { 132 auto guid =
136 auto guid = GetBufferGUIDForTracing(memory_tracker_->ClientTracingId(), 133 GetBufferGUIDForTracing(memory_tracker_->ClientTracingId(), buffer_id);
137 buffer_id); 134 pmd->CreateSharedGlobalAllocatorDump(guid);
138 pmd->CreateSharedGlobalAllocatorDump(guid); 135 pmd->AddOwnershipEdge(dump->guid(), guid);
139 pmd->AddOwnershipEdge(dump->guid(), guid);
140 }
141 } 136 }
142 137
143 return true; 138 return true;
144 } 139 }
145 140
146 } // namespace gpu 141 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/command_buffer/common/buffer.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698