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

Unified Diff: cc/resources/resource_provider.cc

Issue 1157943004: cc: [WIP] Use worker context and OrderingBarrierCHROMIUM for one-copy. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: piman's comments. Created 5 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 side-by-side diff with in-line comments
Download patch
Index: cc/resources/resource_provider.cc
diff --git a/cc/resources/resource_provider.cc b/cc/resources/resource_provider.cc
index f081f6236f87a36410537af4a9c0e570f1191510..7b8bf375c3cb8287b0ada20520558c177a83d719 100644
--- a/cc/resources/resource_provider.cc
+++ b/cc/resources/resource_provider.cc
@@ -994,6 +994,59 @@ ResourceProvider::ScopedWriteLockGpuMemoryBuffer::GetGpuMemoryBuffer() {
return gpu_memory_buffer_;
}
+ResourceProvider::ScopedWriteLockGpuMemoryBufferForThread::
+ ScopedWriteLockGpuMemoryBufferForThread(ResourceProvider* resource_provider,
+ ResourceId resource_id)
+ : resource_provider_(resource_provider),
+ resource_(resource_provider_->GetResource(resource_id)),
+ gpu_memory_buffer_manager_(resource_provider->gpu_memory_buffer_manager_),
+ gpu_memory_buffer_(nullptr),
+ size_(resource_->size),
+ format_(resource_->format) {
+ DCHECK_EQ(RESOURCE_TYPE_GL_TEXTURE, resource_->type);
+ resource_provider_->LazyCreate(resource_);
+ worker_context_ =
+ resource_provider_->output_surface()->worker_context_provider();
+ image_id_ = 0;
piman 2015/07/01 22:11:05 I think you want to initialize with resource_->ima
sohanjg 2015/07/02 14:40:28 Done.
+ allocated_ = false;
+ dirty_image_ = false;
+ read_lock_fences_enabled_ = false;
piman 2015/07/01 22:11:05 Same here for all 3, you may need to get the value
sohanjg 2015/07/02 14:40:28 Done.
+ internal_format_ = GLInternalFormat(resource_->format);
+ std::swap(gpu_memory_buffer_, resource_->gpu_memory_buffer);
+}
+
+ResourceProvider::ScopedWriteLockGpuMemoryBufferForThread::
+ ~ScopedWriteLockGpuMemoryBufferForThread() {
+ if (!gpu_memory_buffer_)
+ return;
+
+ if (!resource_->image_id) {
piman 2015/07/01 22:11:05 you don't need / want this test any more if you in
sohanjg 2015/07/02 14:40:28 Done.
+ resource_->image_id = image_id_;
+ }
+
+ std::swap(resource_->gpu_memory_buffer, gpu_memory_buffer_);
+ resource_->allocated = allocated_;
+ resource_->dirty_image = dirty_image_;
+ resource_->bound_image_id = bound_image_id_;
+
+ resource_->read_lock_fences_enabled = read_lock_fences_enabled_;
+}
+
+gfx::GpuMemoryBuffer* ResourceProvider::
+ ScopedWriteLockGpuMemoryBufferForThread::GetGpuMemoryBuffer() {
+ if (gpu_memory_buffer_)
+ return gpu_memory_buffer_;
+ gfx::GpuMemoryBuffer::Usage usage =
+ resource_provider_->use_persistent_map_for_gpu_memory_buffers()
piman 2015/07/01 22:11:05 If this is called on the worker thread, it's not s
sohanjg 2015/07/02 14:40:28 Done.
+ ? gfx::GpuMemoryBuffer::PERSISTENT_MAP
+ : gfx::GpuMemoryBuffer::MAP;
+ scoped_ptr<gfx::GpuMemoryBuffer> gpu_memory_buffer =
+ gpu_memory_buffer_manager_->AllocateGpuMemoryBuffer(
+ size_, ToGpuMemoryBufferFormat(format_), usage);
+ gpu_memory_buffer_ = gpu_memory_buffer.release();
+ return gpu_memory_buffer_;
+}
+
ResourceProvider::ScopedWriteLockGr::ScopedWriteLockGr(
ResourceProvider* resource_provider,
ResourceId resource_id)
@@ -1879,8 +1932,8 @@ void ResourceProvider::CopyResource(ResourceId source_id,
dest_resource->allocated = true;
gl->CopySubTextureCHROMIUM(dest_resource->target, source_resource->gl_id,
dest_resource->gl_id, rect.x(), rect.y(), rect.x(),
- rect.y(), rect.width(), rect.height(),
- false, false, false);
+ rect.y(), rect.width(), rect.height(), false,
+ false, false);
if (source_resource->gl_read_lock_query_id) {
// End query and create a read lock fence that will prevent access to
// source resource until CopySubTextureCHROMIUM command has completed.

Powered by Google App Engine
This is Rietveld 408576698