summaryrefslogtreecommitdiffstats
path: root/content/common
diff options
context:
space:
mode:
authordyen <dyen@chromium.org>2015-10-22 13:17:23 -0700
committerCommit bot <commit-bot@chromium.org>2015-10-22 20:18:15 +0000
commit6f3b439c2c2ac2baa7234f0da1be8bc7f4805233 (patch)
tree05bea5125a83a2444aa2bdc9a1acc76c9bdd11ab /content/common
parent28ea683e75e74977748c4c2fbab8c6c27acd0357 (diff)
downloadchromium_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.cc22
-rw-r--r--content/common/gpu/client/command_buffer_proxy_impl.h5
-rw-r--r--content/common/gpu/gpu_command_buffer_stub.cc29
-rw-r--r--content/common/gpu/gpu_command_buffer_stub.h4
-rw-r--r--content/common/gpu/gpu_messages.h9
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,