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

Unified Diff: gpu/ipc/client/command_buffer_proxy_impl.cc

Issue 2041043002: CommandBufferProxyImpl holds on to GpuMemoryBuffers while they are in use. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Use default move constructor and move operator=. Created 4 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
« no previous file with comments | « gpu/ipc/client/command_buffer_proxy_impl.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: gpu/ipc/client/command_buffer_proxy_impl.cc
diff --git a/gpu/ipc/client/command_buffer_proxy_impl.cc b/gpu/ipc/client/command_buffer_proxy_impl.cc
index 447697d0f9d1e12998bbd8279443b23967474230..3fdfcbf56ddcb396006d081ca6f42f026109f5b9 100644
--- a/gpu/ipc/client/command_buffer_proxy_impl.cc
+++ b/gpu/ipc/client/command_buffer_proxy_impl.cc
@@ -459,8 +459,8 @@ int32_t CommandBufferProxyImpl::CreateImage(ClientBuffer buffer,
gpu_memory_buffer_manager->GpuMemoryBufferFromClientBuffer(buffer);
DCHECK(gpu_memory_buffer);
- DCHECK(image_gmb_ids_map_.find(new_id) == image_gmb_ids_map_.end());
- image_gmb_ids_map_[new_id] = gpu_memory_buffer->GetId().id;
+ DCHECK(image_gmb_map_.find(new_id) == image_gmb_map_.end());
+ image_gmb_map_[new_id].gpu_memory_buffer_id = gpu_memory_buffer->GetId().id;
// This handle is owned by the GPU process and must be passed to it or it
// will leak. In otherwords, do not early out on error between here and the
@@ -515,9 +515,9 @@ void CommandBufferProxyImpl::DestroyImage(int32_t id) {
if (last_state_.error != gpu::error::kNoError)
return;
- auto it = image_gmb_ids_map_.find(id);
- if (it != image_gmb_ids_map_.end())
- image_gmb_ids_map_.erase(it);
+ auto it = image_gmb_map_.find(id);
+ if (it != image_gmb_map_.end())
+ image_gmb_map_.erase(it);
Send(new GpuCommandBufferMsg_DestroyImage(route_id_, id));
}
@@ -535,14 +535,18 @@ int32_t CommandBufferProxyImpl::CreateGpuMemoryBufferImage(
if (!buffer)
return -1;
- return CreateImage(buffer->AsClientBuffer(), width, height, internal_format);
+ int32_t result =
+ CreateImage(buffer->AsClientBuffer(), width, height, internal_format);
+ if (result != -1)
+ image_gmb_map_[result].owned_gpu_memory_buffer = std::move(buffer);
+ return result;
}
int32_t CommandBufferProxyImpl::GetImageGpuMemoryBufferId(unsigned image_id) {
CheckLock();
- auto it = image_gmb_ids_map_.find(image_id);
- if (it != image_gmb_ids_map_.end())
- return it->second;
+ auto it = image_gmb_map_.find(image_id);
+ if (it != image_gmb_map_.end())
+ return it->second.gpu_memory_buffer_id;
return -1;
}
@@ -872,4 +876,10 @@ void CommandBufferProxyImpl::DisconnectChannel() {
gpu_control_client_->OnGpuControlLostContext();
}
+CommandBufferProxyImpl::ImageInfo::ImageInfo() {}
+CommandBufferProxyImpl::ImageInfo::~ImageInfo() {}
+CommandBufferProxyImpl::ImageInfo::ImageInfo(ImageInfo&& other) = default;
+CommandBufferProxyImpl::ImageInfo& CommandBufferProxyImpl::ImageInfo::operator=(
+ ImageInfo&& other) = default;
+
} // namespace gpu
« no previous file with comments | « gpu/ipc/client/command_buffer_proxy_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698