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

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

Issue 1489573003: Added an extra sync token field for extra command buffer identification. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Return False on invalid stream id Created 5 years 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 | « content/common/gpu/client/command_buffer_proxy_impl.h ('k') | content/common/gpu/client/gpu_channel_host.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 47e20d149ee54a844113bcb7e88b61ea754ac15b..cd93be8acda7a1be21c9a1e44a7fe76712ff4fd1 100644
--- a/content/common/gpu/client/command_buffer_proxy_impl.cc
+++ b/content/common/gpu/client/command_buffer_proxy_impl.cc
@@ -449,7 +449,7 @@ int32_t CommandBufferProxyImpl::CreateImage(ClientBuffer buffer,
if (image_fence_sync) {
gpu::SyncToken sync_token(GetNamespaceID(), GetCommandBufferID(),
- image_fence_sync);
+ GetExtraCommandBufferData(), image_fence_sync);
// Force a synchronous IPC to validate sync token.
channel_->ValidateFlushIDReachedServer(stream_id_, true);
@@ -519,6 +519,10 @@ uint64_t CommandBufferProxyImpl::GetCommandBufferID() const {
return command_buffer_id_;
}
+int32_t CommandBufferProxyImpl::GetExtraCommandBufferData() const {
+ return stream_id_;
+}
+
uint64_t CommandBufferProxyImpl::GenerateFenceSyncRelease() {
return next_fence_sync_release_++;
}
@@ -577,8 +581,20 @@ bool CommandBufferProxyImpl::CanWaitUnverifiedSyncToken(
// Can only wait on an unverified sync token if it is from the same channel.
const uint64_t token_channel = sync_token->command_buffer_id() >> 32;
const uint64_t channel = command_buffer_id_ >> 32;
- return (sync_token->namespace_id() == gpu::CommandBufferNamespace::GPU_IO &&
- token_channel == channel);
+ if (sync_token->namespace_id() != gpu::CommandBufferNamespace::GPU_IO ||
+ token_channel != channel) {
+ return false;
+ }
+
+ // If waiting on a different stream, flush pending commands on that stream.
+ const int32_t release_stream_id = sync_token->extra_data_field();
+ if (release_stream_id == 0)
+ return false;
+
+ if (release_stream_id != stream_id_)
+ channel_->FlushPendingStream(release_stream_id);
+
+ return true;
}
uint32 CommandBufferProxyImpl::InsertSyncPoint() {
« no previous file with comments | « content/common/gpu/client/command_buffer_proxy_impl.h ('k') | content/common/gpu/client/gpu_channel_host.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698