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

Unified Diff: cc/test/test_gpu_memory_buffer_manager.cc

Issue 1989453003: cc: Add ScopedReadLockGpuMemoryBuffer (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix aura typo Created 4 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/test/test_gpu_memory_buffer_manager.h ('k') | content/browser/renderer_host/delegated_frame_host.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/test/test_gpu_memory_buffer_manager.cc
diff --git a/cc/test/test_gpu_memory_buffer_manager.cc b/cc/test/test_gpu_memory_buffer_manager.cc
index 15dcd20cb692583af398d3830b0e56ee6916ca66..ffed885fab990f82a7a0521bd630858a88e7ff19 100644
--- a/cc/test/test_gpu_memory_buffer_manager.cc
+++ b/cc/test/test_gpu_memory_buffer_manager.cc
@@ -16,16 +16,17 @@
namespace cc {
namespace {
-int g_gpu_memory_buffer_id_counter = 0;
-
class GpuMemoryBufferImpl : public gfx::GpuMemoryBuffer {
public:
- GpuMemoryBufferImpl(const gfx::Size& size,
+ GpuMemoryBufferImpl(TestGpuMemoryBufferManager* manager,
+ int id,
+ const gfx::Size& size,
gfx::BufferFormat format,
std::unique_ptr<base::SharedMemory> shared_memory,
size_t offset,
size_t stride)
- : id_(++g_gpu_memory_buffer_id_counter),
+ : manager_(manager),
+ id_(id),
size_(size),
format_(format),
shared_memory_(std::move(shared_memory)),
@@ -34,6 +35,8 @@ class GpuMemoryBufferImpl : public gfx::GpuMemoryBuffer {
mapped_(false),
is_in_use_by_window_server_(false) {}
+ ~GpuMemoryBufferImpl() override { manager_->OnGpuMemoryBufferDestroyed(id_); }
+
// Overridden from gfx::GpuMemoryBuffer:
bool Map() override {
DCHECK(!mapped_);
@@ -83,6 +86,7 @@ class GpuMemoryBufferImpl : public gfx::GpuMemoryBuffer {
}
private:
+ TestGpuMemoryBufferManager* manager_;
gfx::GpuMemoryBufferId id_;
const gfx::Size size_;
gfx::BufferFormat format_;
@@ -93,12 +97,65 @@ class GpuMemoryBufferImpl : public gfx::GpuMemoryBuffer {
bool is_in_use_by_window_server_;
};
+class GpuMemoryBufferFromClient : public gfx::GpuMemoryBuffer {
+ public:
+ GpuMemoryBufferFromClient(TestGpuMemoryBufferManager* manager,
+ int id,
+ gfx::GpuMemoryBuffer* client_buffer)
+ : manager_(manager), id_(id), client_buffer_(client_buffer) {}
+
+ ~GpuMemoryBufferFromClient() override {
+ manager_->OnGpuMemoryBufferDestroyed(id_);
+ }
+
+ bool Map() override { return client_buffer_->Map(); }
+ void* memory(size_t plane) override { return client_buffer_->memory(plane); }
+ void Unmap() override { client_buffer_->Unmap(); }
+ bool IsInUseByMacOSWindowServer() const override {
+ return client_buffer_->IsInUseByMacOSWindowServer();
+ }
+ gfx::Size GetSize() const override { return client_buffer_->GetSize(); }
+ gfx::BufferFormat GetFormat() const override {
+ return client_buffer_->GetFormat();
+ }
+ int stride(size_t plane) const override {
+ return client_buffer_->stride(plane);
+ }
+ gfx::GpuMemoryBufferId GetId() const override { return id_; }
+ gfx::GpuMemoryBufferHandle GetHandle() const override {
+ return client_buffer_->GetHandle();
+ }
+ ClientBuffer AsClientBuffer() override {
+ return client_buffer_->AsClientBuffer();
+ }
+
+ private:
+ TestGpuMemoryBufferManager* manager_;
+ gfx::GpuMemoryBufferId id_;
+ gfx::GpuMemoryBuffer* client_buffer_;
+};
+
} // namespace
TestGpuMemoryBufferManager::TestGpuMemoryBufferManager() {
}
TestGpuMemoryBufferManager::~TestGpuMemoryBufferManager() {
+ DCHECK(buffers_.empty());
+ DCHECK(clients_.empty());
+ if (parent_gpu_memory_buffer_manager_)
+ parent_gpu_memory_buffer_manager_->clients_.erase(client_id_);
+}
+
+std::unique_ptr<TestGpuMemoryBufferManager>
+TestGpuMemoryBufferManager::CreateClientGpuMemoryBufferManager() {
+ std::unique_ptr<TestGpuMemoryBufferManager> client(
+ new TestGpuMemoryBufferManager);
+ client->client_id_ = ++last_client_id_;
+ client->parent_gpu_memory_buffer_manager_ = this;
+
+ clients_[client->client_id_] = client.get();
+ return client;
}
void TestGpuMemoryBufferManager::SetGpuMemoryBufferIsInUseByMacOSWindowServer(
@@ -108,6 +165,12 @@ void TestGpuMemoryBufferManager::SetGpuMemoryBufferIsInUseByMacOSWindowServer(
->SetIsInUseByMacOSWindowServer(in_use);
}
+void TestGpuMemoryBufferManager::OnGpuMemoryBufferDestroyed(
+ gfx::GpuMemoryBufferId gpu_memory_buffer_id) {
+ DCHECK(buffers_.find(gpu_memory_buffer_id.id) != buffers_.end());
+ buffers_.erase(gpu_memory_buffer_id.id);
+}
+
std::unique_ptr<gfx::GpuMemoryBuffer>
TestGpuMemoryBufferManager::AllocateGpuMemoryBuffer(
const gfx::Size& size,
@@ -118,10 +181,14 @@ TestGpuMemoryBufferManager::AllocateGpuMemoryBuffer(
const size_t buffer_size = gfx::BufferSizeForBufferFormat(size, format);
if (!shared_memory->CreateAnonymous(buffer_size))
return nullptr;
- return base::WrapUnique<gfx::GpuMemoryBuffer>(new GpuMemoryBufferImpl(
- size, format, std::move(shared_memory), 0,
- base::checked_cast<int>(
- gfx::RowSizeForBufferFormat(size.width(), format, 0))));
+
+ last_gpu_memory_buffer_id_ += 1;
+ std::unique_ptr<gfx::GpuMemoryBuffer> result(new GpuMemoryBufferImpl(
+ this, last_gpu_memory_buffer_id_, size, format, std::move(shared_memory),
+ 0, base::checked_cast<int>(
+ gfx::RowSizeForBufferFormat(size.width(), format, 0))));
+ buffers_[last_gpu_memory_buffer_id_] = result.get();
+ return result;
}
std::unique_ptr<gfx::GpuMemoryBuffer>
@@ -132,10 +199,13 @@ TestGpuMemoryBufferManager::CreateGpuMemoryBufferFromHandle(
if (handle.type != gfx::SHARED_MEMORY_BUFFER)
return nullptr;
- return base::WrapUnique<gfx::GpuMemoryBuffer>(new GpuMemoryBufferImpl(
- size, format,
+ last_gpu_memory_buffer_id_ += 1;
+ std::unique_ptr<gfx::GpuMemoryBuffer> result(new GpuMemoryBufferImpl(
+ this, last_gpu_memory_buffer_id_, size, format,
base::WrapUnique(new base::SharedMemory(handle.handle, false)),
handle.offset, handle.stride));
+ buffers_[last_gpu_memory_buffer_id_] = result.get();
+ return result;
}
gfx::GpuMemoryBuffer*
@@ -148,8 +218,20 @@ std::unique_ptr<gfx::GpuMemoryBuffer>
TestGpuMemoryBufferManager::CreateGpuMemoryBufferFromClientId(
int client_id,
const gfx::GpuMemoryBufferId& gpu_memory_buffer_id) {
- NOTIMPLEMENTED();
- return nullptr;
+ // Check that the client and id are valid to ensure that the ResourceProvider
+ // is doing appropriate validation.
+ auto client_it = clients_.find(client_id);
+ DCHECK(client_it != clients_.end());
+ auto buffer_it = client_it->second->buffers_.find(gpu_memory_buffer_id.id);
+ DCHECK(buffer_it != client_it->second->buffers_.end());
+
+ gfx::GpuMemoryBuffer* found = buffer_it->second;
+
+ last_gpu_memory_buffer_id_ += 1;
+ std::unique_ptr<gfx::GpuMemoryBuffer> result(
+ new GpuMemoryBufferFromClient(this, last_gpu_memory_buffer_id_, found));
+ buffers_[last_gpu_memory_buffer_id_] = result.get();
+ return result;
}
void TestGpuMemoryBufferManager::SetDestructionSyncToken(
« no previous file with comments | « cc/test/test_gpu_memory_buffer_manager.h ('k') | content/browser/renderer_host/delegated_frame_host.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698