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

Unified Diff: cc/resources/resource_provider.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/resources/resource_provider.h ('k') | cc/resources/resource_provider_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/resources/resource_provider.cc
diff --git a/cc/resources/resource_provider.cc b/cc/resources/resource_provider.cc
index ae6edc35efb9b60511ab110c7dcfcd32762b5f67..31fc686c218082a55fdc99d17459c33ab7811d9e 100644
--- a/cc/resources/resource_provider.cc
+++ b/cc/resources/resource_provider.cc
@@ -375,7 +375,9 @@ void ResourceProvider::Resource::WaitSyncToken(gpu::gles2::GLES2Interface* gl) {
}
ResourceProvider::Child::Child()
- : marked_for_deletion(false), needs_sync_tokens(true) {}
+ : gpu_memory_buffer_client_id(-1),
+ marked_for_deletion(false),
+ needs_sync_tokens(true) {}
ResourceProvider::Child::Child(const Child& other) = default;
@@ -721,7 +723,8 @@ void ResourceProvider::DeleteResourceInternal(ResourceMap::iterator it,
resource->pixels = nullptr;
}
if (resource->gpu_memory_buffer) {
- DCHECK(resource->origin == Resource::INTERNAL);
+ DCHECK(resource->origin == Resource::INTERNAL ||
+ resource->origin == Resource::DELEGATED);
resource->gpu_memory_buffer.reset();
}
resources_.erase(it);
@@ -839,7 +842,9 @@ ResourceProvider::Resource* ResourceProvider::GetResource(ResourceId id) {
return &it->second;
}
-const ResourceProvider::Resource* ResourceProvider::LockForRead(ResourceId id) {
+const ResourceProvider::Resource* ResourceProvider::LockForRead(
+ ResourceId id,
+ bool create_gpu_memory_buffer) {
Resource* resource = GetResource(id);
DCHECK(!resource->locked_for_write) << "locked for write: "
<< resource->locked_for_write;
@@ -882,6 +887,20 @@ const ResourceProvider::Resource* ResourceProvider::LockForRead(ResourceId id) {
resource->read_lock_fence = current_read_lock_fence_;
}
+ if (create_gpu_memory_buffer && !resource->gpu_memory_buffer &&
+ resource->child_id) {
+ ChildMap::iterator child_it = children_.find(resource->child_id);
+ DCHECK(child_it != children_.end());
+ Child& child_info = child_it->second;
+ if (child_info.gpu_memory_buffer_client_id != -1 &&
+ resource->gpu_memory_buffer_id.id != -1) {
+ resource->gpu_memory_buffer =
+ gpu_memory_buffer_manager_->CreateGpuMemoryBufferFromClientId(
+ child_info.gpu_memory_buffer_client_id,
+ resource->gpu_memory_buffer_id);
+ }
+ }
+
return resource;
}
@@ -958,7 +977,7 @@ ResourceProvider::ScopedReadLockGL::ScopedReadLockGL(
ResourceId resource_id)
: resource_provider_(resource_provider),
resource_id_(resource_id),
- resource_(resource_provider->LockForRead(resource_id)) {
+ resource_(resource_provider->LockForRead(resource_id, false)) {
DCHECK(resource_);
}
@@ -1020,7 +1039,7 @@ ResourceProvider::ScopedReadLockSoftware::ScopedReadLockSoftware(
ResourceProvider* resource_provider,
ResourceId resource_id)
: resource_provider_(resource_provider), resource_id_(resource_id) {
- const Resource* resource = resource_provider->LockForRead(resource_id);
+ const Resource* resource = resource_provider->LockForRead(resource_id, false);
ResourceProvider::PopulateSkBitmapWithResource(&sk_bitmap_, resource);
}
@@ -1087,6 +1106,28 @@ ResourceProvider::ScopedWriteLockGpuMemoryBuffer::GetGpuMemoryBuffer() {
return gpu_memory_buffer_.get();
}
+ResourceProvider::ScopedReadLockGpuMemoryBuffer::ScopedReadLockGpuMemoryBuffer(
+ ResourceProvider* resource_provider,
+ ResourceId resource_id)
+ : resource_provider_(resource_provider),
+ resource_id_(resource_id),
+ resource_(resource_provider->LockForRead(resource_id, true)) {}
+
+ResourceProvider::ScopedReadLockGpuMemoryBuffer::
+ ~ScopedReadLockGpuMemoryBuffer() {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ resource_provider_->UnlockForRead(resource_id_);
+}
+
+gfx::GpuMemoryBuffer*
+ResourceProvider::ScopedReadLockGpuMemoryBuffer::GetGpuMemoryBuffer() const {
+ return resource_->gpu_memory_buffer.get();
+}
+
+unsigned ResourceProvider::ScopedReadLockGpuMemoryBuffer::GetTextureId() const {
+ return resource_->gl_id;
+}
+
ResourceProvider::ScopedWriteLockGr::ScopedWriteLockGr(
ResourceProvider* resource_provider,
ResourceId resource_id)
@@ -1264,11 +1305,13 @@ void ResourceProvider::Initialize() {
new BufferIdAllocator(gl, id_allocation_chunk_size_));
}
-int ResourceProvider::CreateChild(const ReturnCallback& return_callback) {
+int ResourceProvider::CreateChild(const ReturnCallback& return_callback,
+ int gpu_memory_buffer_client_id) {
DCHECK(thread_checker_.CalledOnValidThread());
Child child_info;
child_info.return_callback = return_callback;
+ child_info.gpu_memory_buffer_client_id = gpu_memory_buffer_client_id;
int child = next_child_++;
children_[child] = child_info;
« no previous file with comments | « cc/resources/resource_provider.h ('k') | cc/resources/resource_provider_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698