Commit 6c889772 authored by hajimehoshi's avatar hajimehoshi Committed by Commit bot

Bug fix: TranferBufferManager's SharedMemory memory usage reporting was wrong

TranferBufferManager takes buffers whose backing store might or might
not be SharedMemory, but accumulates shared memory usage no matter what
the buffer is. This CL fixes this to make TranferBufferManager count
shared memory usage only when the buffer's backing store is
SharedMemory.

BUG=604726
TEST=gpu_unittests --gtest_filter=TransferBufferManagerTest.*
CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_optional_gpu_tests_rel;master.tryserver.chromium.mac:mac_optional_gpu_tests_rel;master.tryserver.chromium.win:win_optional_gpu_tests_rel

Review-Url: https://codereview.chromium.org/2575803002
Cr-Commit-Position: refs/heads/master@{#439419}
parent eca181ca
......@@ -13,6 +13,11 @@
#include "base/strings/stringprintf.h"
namespace gpu {
bool BufferBacking::is_shared() const {
return false;
}
SharedMemoryBufferBacking::SharedMemoryBufferBacking(
std::unique_ptr<base::SharedMemory> shared_memory,
size_t size)
......@@ -20,6 +25,10 @@ SharedMemoryBufferBacking::SharedMemoryBufferBacking(
SharedMemoryBufferBacking::~SharedMemoryBufferBacking() {}
bool SharedMemoryBufferBacking::is_shared() const {
return true;
}
void* SharedMemoryBufferBacking::GetMemory() const {
return shared_memory_->memory();
}
......
......@@ -25,6 +25,7 @@ namespace gpu {
class GPU_EXPORT BufferBacking {
public:
virtual ~BufferBacking() {}
virtual bool is_shared() const;
virtual void* GetMemory() const = 0;
virtual size_t GetSize() const = 0;
};
......@@ -34,6 +35,7 @@ class GPU_EXPORT SharedMemoryBufferBacking : public BufferBacking {
SharedMemoryBufferBacking(std::unique_ptr<base::SharedMemory> shared_memory,
size_t size);
~SharedMemoryBufferBacking() override;
bool is_shared() const override;
void* GetMemory() const override;
size_t GetSize() const override;
base::SharedMemory* shared_memory() { return shared_memory_.get(); }
......
......@@ -35,8 +35,10 @@ TransferBufferManager::TransferBufferManager(
TransferBufferManager::~TransferBufferManager() {
while (!registered_buffers_.empty()) {
BufferMap::iterator it = registered_buffers_.begin();
DCHECK(shared_memory_bytes_allocated_ >= it->second->size());
shared_memory_bytes_allocated_ -= it->second->size();
if (it->second->backing()->is_shared()) {
DCHECK(shared_memory_bytes_allocated_ >= it->second->size());
shared_memory_bytes_allocated_ -= it->second->size();
}
registered_buffers_.erase(it);
}
DCHECK(!shared_memory_bytes_allocated_);
......@@ -77,8 +79,8 @@ bool TransferBufferManager::RegisterTransferBuffer(
DCHECK(!(reinterpret_cast<uintptr_t>(buffer->memory()) &
(kCommandBufferEntrySize - 1)));
shared_memory_bytes_allocated_ += buffer->size();
if (buffer->backing()->is_shared())
shared_memory_bytes_allocated_ += buffer->size();
registered_buffers_[id] = buffer;
return true;
......@@ -91,9 +93,10 @@ void TransferBufferManager::DestroyTransferBuffer(int32_t id) {
return;
}
DCHECK(shared_memory_bytes_allocated_ >= it->second->size());
shared_memory_bytes_allocated_ -= it->second->size();
if (it->second->backing()->is_shared()) {
DCHECK(shared_memory_bytes_allocated_ >= it->second->size());
shared_memory_bytes_allocated_ -= it->second->size();
}
registered_buffers_.erase(it);
}
......@@ -135,10 +138,12 @@ bool TransferBufferManager::OnMemoryDump(
MemoryAllocatorDump* dump = pmd->CreateAllocatorDump(dump_name);
dump->AddScalar(MemoryAllocatorDump::kNameSize,
MemoryAllocatorDump::kUnitsBytes, buffer->size());
auto guid =
GetBufferGUIDForTracing(memory_tracker_->ClientTracingId(), buffer_id);
pmd->CreateSharedGlobalAllocatorDump(guid);
pmd->AddOwnershipEdge(dump->guid(), guid);
if (buffer->backing()->is_shared()) {
auto guid = GetBufferGUIDForTracing(memory_tracker_->ClientTracingId(),
buffer_id);
pmd->CreateSharedGlobalAllocatorDump(guid);
pmd->AddOwnershipEdge(dump->guid(), guid);
}
}
return true;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment