diff options
author | dyen <dyen@chromium.org> | 2015-10-22 13:17:23 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-10-22 20:18:15 +0000 |
commit | 6f3b439c2c2ac2baa7234f0da1be8bc7f4805233 (patch) | |
tree | 05bea5125a83a2444aa2bdc9a1acc76c9bdd11ab /content/common | |
parent | 28ea683e75e74977748c4c2fbab8c6c27acd0357 (diff) | |
download | chromium_src-6f3b439c2c2ac2baa7234f0da1be8bc7f4805233.zip chromium_src-6f3b439c2c2ac2baa7234f0da1be8bc7f4805233.tar.gz chromium_src-6f3b439c2c2ac2baa7234f0da1be8bc7f4805233.tar.bz2 |
Added support for sync token signals.
Much like the old sync point singals, this CL implements signals for
the new light weight sync tokens.
BUG=514815
CQ_INCLUDE_TRYBOTS=tryserver.blink:linux_blink_rel
Review URL: https://codereview.chromium.org/1413933006
Cr-Commit-Position: refs/heads/master@{#355629}
Diffstat (limited to 'content/common')
-rw-r--r-- | content/common/gpu/client/command_buffer_proxy_impl.cc | 22 | ||||
-rw-r--r-- | content/common/gpu/client/command_buffer_proxy_impl.h | 5 | ||||
-rw-r--r-- | content/common/gpu/gpu_command_buffer_stub.cc | 29 | ||||
-rw-r--r-- | content/common/gpu/gpu_command_buffer_stub.h | 4 | ||||
-rw-r--r-- | content/common/gpu/gpu_messages.h | 9 |
5 files changed, 55 insertions, 14 deletions
diff --git a/content/common/gpu/client/command_buffer_proxy_impl.cc b/content/common/gpu/client/command_buffer_proxy_impl.cc index b5f9a36b..c1cc362 100644 --- a/content/common/gpu/client/command_buffer_proxy_impl.cc +++ b/content/common/gpu/client/command_buffer_proxy_impl.cc @@ -72,8 +72,8 @@ bool CommandBufferProxyImpl::OnMessageReceived(const IPC::Message& message) { IPC_BEGIN_MESSAGE_MAP(CommandBufferProxyImpl, message) IPC_MESSAGE_HANDLER(GpuCommandBufferMsg_Destroyed, OnDestroyed); IPC_MESSAGE_HANDLER(GpuCommandBufferMsg_ConsoleMsg, OnConsoleMessage); - IPC_MESSAGE_HANDLER(GpuCommandBufferMsg_SignalSyncPointAck, - OnSignalSyncPointAck); + IPC_MESSAGE_HANDLER(GpuCommandBufferMsg_SignalAck, + OnSignalAck); IPC_MESSAGE_HANDLER(GpuCommandBufferMsg_SwapBuffersCompleted, OnSwapBuffersCompleted); IPC_MESSAGE_HANDLER(GpuCommandBufferMsg_UpdateVSyncParameters, @@ -145,7 +145,7 @@ void CommandBufferProxyImpl::RemoveDeletionObserver( deletion_observers_.RemoveObserver(observer); } -void CommandBufferProxyImpl::OnSignalSyncPointAck(uint32 id) { +void CommandBufferProxyImpl::OnSignalAck(uint32 id) { SignalTaskMap::iterator it = signal_tasks_.find(id); DCHECK(it != signal_tasks_.end()); base::Closure callback = it->second; @@ -537,6 +537,22 @@ bool CommandBufferProxyImpl::IsFenceSyncFlushReceived(uint64_t release) { return false; } +void CommandBufferProxyImpl::SignalSyncToken(const gpu::SyncToken& sync_token, + const base::Closure& callback) { + CheckLock(); + if (last_state_.error != gpu::error::kNoError) + return; + + uint32 signal_id = next_signal_id_++; + if (!Send(new GpuCommandBufferMsg_SignalSyncToken(route_id_, + sync_token, + signal_id))) { + return; + } + + signal_tasks_.insert(std::make_pair(signal_id, callback)); +} + bool CommandBufferProxyImpl::CanWaitUnverifiedSyncToken( const gpu::SyncToken* sync_token) { // Can only wait on an unverified sync token if it is from the same channel. diff --git a/content/common/gpu/client/command_buffer_proxy_impl.h b/content/common/gpu/client/command_buffer_proxy_impl.h index 3132646..39bc76b 100644 --- a/content/common/gpu/client/command_buffer_proxy_impl.h +++ b/content/common/gpu/client/command_buffer_proxy_impl.h @@ -32,6 +32,7 @@ class SharedMemory; namespace gpu { struct Mailbox; +struct SyncToken; } namespace media { @@ -127,6 +128,8 @@ class CommandBufferProxyImpl bool IsFenceSyncRelease(uint64_t release) override; bool IsFenceSyncFlushed(uint64_t release) override; bool IsFenceSyncFlushReceived(uint64_t release) override; + void SignalSyncToken(const gpu::SyncToken& sync_token, + const base::Closure& callback) override; bool CanWaitUnverifiedSyncToken(const gpu::SyncToken* sync_token) override; bool ProduceFrontBuffer(const gpu::Mailbox& mailbox); @@ -187,7 +190,7 @@ class CommandBufferProxyImpl void OnDestroyed(gpu::error::ContextLostReason reason, gpu::error::Error error); void OnConsoleMessage(const GPUCommandBufferConsoleMessage& message); - void OnSignalSyncPointAck(uint32 id); + void OnSignalAck(uint32 id); void OnSwapBuffersCompleted(const std::vector<ui::LatencyInfo>& latency_info, gfx::SwapResult result); void OnUpdateVSyncParameters(base::TimeTicks timebase, diff --git a/content/common/gpu/gpu_command_buffer_stub.cc b/content/common/gpu/gpu_command_buffer_stub.cc index 310df77..0ae8486 100644 --- a/content/common/gpu/gpu_command_buffer_stub.cc +++ b/content/common/gpu/gpu_command_buffer_stub.cc @@ -312,6 +312,8 @@ bool GpuCommandBufferStub::OnMessageReceived(const IPC::Message& message) { OnRetireSyncPoint) IPC_MESSAGE_HANDLER(GpuCommandBufferMsg_SignalSyncPoint, OnSignalSyncPoint) + IPC_MESSAGE_HANDLER(GpuCommandBufferMsg_SignalSyncToken, + OnSignalSyncToken) IPC_MESSAGE_HANDLER(GpuCommandBufferMsg_SignalQuery, OnSignalQuery) IPC_MESSAGE_HANDLER(GpuCommandBufferMsg_CreateImage, OnCreateImage); @@ -1003,13 +1005,26 @@ void GpuCommandBufferStub::PullTextureUpdates( void GpuCommandBufferStub::OnSignalSyncPoint(uint32 sync_point, uint32 id) { sync_point_manager_->AddSyncPointCallback( sync_point, - base::Bind(&RunOnThread, task_runner_, - base::Bind(&GpuCommandBufferStub::OnSignalSyncPointAck, - this->AsWeakPtr(), id))); + base::Bind(&GpuCommandBufferStub::OnSignalAck, this->AsWeakPtr(), id)); +} + +void GpuCommandBufferStub::OnSignalSyncToken(const gpu::SyncToken& sync_token, + uint32 id) { + scoped_refptr<gpu::SyncPointClientState> release_state = + sync_point_manager_->GetSyncPointClientState( + sync_token.namespace_id(), sync_token.command_buffer_id()); + + if (release_state) { + sync_point_client_->Wait(release_state.get(), sync_token.release_count(), + base::Bind(&GpuCommandBufferStub::OnSignalAck, + this->AsWeakPtr(), id)); + } else { + OnSignalAck(id); + } } -void GpuCommandBufferStub::OnSignalSyncPointAck(uint32 id) { - Send(new GpuCommandBufferMsg_SignalSyncPointAck(route_id_, id)); +void GpuCommandBufferStub::OnSignalAck(uint32 id) { + Send(new GpuCommandBufferMsg_SignalAck(route_id_, id)); } void GpuCommandBufferStub::OnSignalQuery(uint32 query_id, uint32 id) { @@ -1020,7 +1035,7 @@ void GpuCommandBufferStub::OnSignalQuery(uint32 query_id, uint32 id) { query_manager->GetQuery(query_id); if (query) { query->AddCallback( - base::Bind(&GpuCommandBufferStub::OnSignalSyncPointAck, + base::Bind(&GpuCommandBufferStub::OnSignalAck, this->AsWeakPtr(), id)); return; @@ -1028,7 +1043,7 @@ void GpuCommandBufferStub::OnSignalQuery(uint32 query_id, uint32 id) { } } // Something went wrong, run callback immediately. - OnSignalSyncPointAck(id); + OnSignalAck(id); } void GpuCommandBufferStub::OnFenceSyncRelease(uint64_t release) { diff --git a/content/common/gpu/gpu_command_buffer_stub.h b/content/common/gpu/gpu_command_buffer_stub.h index 93da781..910cd91 100644 --- a/content/common/gpu/gpu_command_buffer_stub.h +++ b/content/common/gpu/gpu_command_buffer_stub.h @@ -34,6 +34,7 @@ namespace gpu { struct Mailbox; +struct SyncToken; class SyncPointClient; class SyncPointManager; class ValueStateMap; @@ -201,7 +202,8 @@ class GpuCommandBufferStub bool OnWaitSyncPoint(uint32 sync_point); void OnWaitSyncPointCompleted(uint32 sync_point); void OnSignalSyncPoint(uint32 sync_point, uint32 id); - void OnSignalSyncPointAck(uint32 id); + void OnSignalSyncToken(const gpu::SyncToken& sync_token, uint32 id); + void OnSignalAck(uint32 id); void OnSignalQuery(uint32 query, uint32 id); void OnFenceSyncRelease(uint64_t release); diff --git a/content/common/gpu/gpu_messages.h b/content/common/gpu/gpu_messages.h index db97208..a6fa99e 100644 --- a/content/common/gpu/gpu_messages.h +++ b/content/common/gpu/gpu_messages.h @@ -22,6 +22,7 @@ #include "gpu/command_buffer/common/constants.h" #include "gpu/command_buffer/common/gpu_memory_allocation.h" #include "gpu/command_buffer/common/mailbox.h" +#include "gpu/command_buffer/common/sync_token.h" #include "gpu/command_buffer/common/value_state.h" #include "gpu/config/gpu_info.h" #include "gpu/ipc/gpu_command_buffer_traits.h" @@ -627,8 +628,8 @@ IPC_MESSAGE_ROUTED2(GpuCommandBufferMsg_SignalSyncPoint, uint32 /* sync_point */, uint32 /* signal_id */) -// Response to GpuCommandBufferMsg_SignalSyncPoint. -IPC_MESSAGE_ROUTED1(GpuCommandBufferMsg_SignalSyncPointAck, +IPC_MESSAGE_ROUTED2(GpuCommandBufferMsg_SignalSyncToken, + gpu::SyncToken /* sync_token */, uint32 /* signal_id */) // Makes this command buffer signal when a query is reached, by sending @@ -638,6 +639,10 @@ IPC_MESSAGE_ROUTED2(GpuCommandBufferMsg_SignalQuery, uint32 /* query */, uint32 /* signal_id */) +// Response to SignalSyncPoint, SignalSyncToken, and SignalQuery. +IPC_MESSAGE_ROUTED1(GpuCommandBufferMsg_SignalAck, + uint32 /* signal_id */) + // Create an image from an existing gpu memory buffer. The id that can be // used to identify the image from a command buffer. IPC_MESSAGE_ROUTED5(GpuCommandBufferMsg_CreateImage, |