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

Unified Diff: content/common/gpu/client/command_buffer_proxy_impl.cc

Issue 1429213002: Converted video frame and image callbacks to use new sync tokens. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed content_unittests Created 5 years, 1 month 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: content/common/gpu/client/command_buffer_proxy_impl.cc
diff --git a/content/common/gpu/client/command_buffer_proxy_impl.cc b/content/common/gpu/client/command_buffer_proxy_impl.cc
index c3c841924355e6beb7f1f3e4685d20e688248ff0..c408152ed62b12b5dd9fdd5687f2433c02e7ccce 100644
--- a/content/common/gpu/client/command_buffer_proxy_impl.cc
+++ b/content/common/gpu/client/command_buffer_proxy_impl.cc
@@ -416,10 +416,18 @@ int32_t CommandBufferProxyImpl::CreateImage(ClientBuffer buffer,
// 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
// sending of the CreateImage IPC below.
- bool requires_sync_point = false;
+ bool requires_sync_token = false;
gfx::GpuMemoryBufferHandle handle =
channel_->ShareGpuMemoryBufferToGpuProcess(gpu_memory_buffer->GetHandle(),
- &requires_sync_point);
+ &requires_sync_token);
+
+ uint64_t image_fence_sync = 0;
+ if (requires_sync_token) {
+ image_fence_sync = GenerateFenceSyncRelease();
+
+ // Make sure fence syncs were flushed before CreateImage() was called.
+ DCHECK((image_fence_sync - 1) <= flushed_fence_sync_release_);
dcheng 2015/11/04 19:22:43 DCHECK_LE
David Yen 2015/11/04 19:47:39 Done.
+ }
DCHECK(gpu::ImageFactory::IsGpuMemoryBufferFormatSupported(
gpu_memory_buffer->GetFormat(), capabilities_));
@@ -427,18 +435,28 @@ int32_t CommandBufferProxyImpl::CreateImage(ClientBuffer buffer,
gfx::Size(width, height), gpu_memory_buffer->GetFormat()));
DCHECK(gpu::ImageFactory::IsImageFormatCompatibleWithGpuMemoryBufferFormat(
internalformat, gpu_memory_buffer->GetFormat()));
- if (!Send(new GpuCommandBufferMsg_CreateImage(route_id_,
- new_id,
- handle,
- gfx::Size(width, height),
- gpu_memory_buffer->GetFormat(),
- internalformat))) {
+
+ GpuCommandBufferMsg_CreateImage_Params params;
+ params.id = new_id;
+ params.gpu_memory_buffer = handle;
+ params.size = gfx::Size(width, height);
+ params.format = gpu_memory_buffer->GetFormat();
+ params.internalformat = internalformat;
+ params.image_release_count = image_fence_sync;
+
+ if (!Send(new GpuCommandBufferMsg_CreateImage(route_id_, params)))
return -1;
- }
- if (requires_sync_point) {
- gpu_memory_buffer_manager->SetDestructionSyncPoint(gpu_memory_buffer,
- InsertSyncPoint());
+ if (image_fence_sync) {
+ gpu::SyncToken sync_token(GetNamespaceID(), GetCommandBufferID(),
+ image_fence_sync);
+
+ // Force a synchronous IPC to validate sync token.
+ channel_->ValidateFlushIDReachedServer(stream_id_, true);
+ sync_token.SetVerifyFlush();
+
+ gpu_memory_buffer_manager->SetDestructionSyncToken(gpu_memory_buffer,
+ sync_token);
}
return new_id;
@@ -530,7 +548,8 @@ bool CommandBufferProxyImpl::IsFenceSyncFlushReceived(uint64_t release) {
return true;
// Has not been validated, validate it now.
- UpdateVerifiedReleases(channel_->ValidateFlushIDReachedServer(stream_id_));
+ UpdateVerifiedReleases(
+ channel_->ValidateFlushIDReachedServer(stream_id_, false));
return release <= verified_fence_sync_release_;
}

Powered by Google App Engine
This is Rietveld 408576698