| 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 7587212837fdca100c8ab632038e33b45ebce2b4..cefeefd2b24eb0cf40dab05ea6854bd0e47f4e3f 100644
|
| --- a/gpu/ipc/client/command_buffer_proxy_impl.cc
|
| +++ b/gpu/ipc/client/command_buffer_proxy_impl.cc
|
| @@ -617,15 +617,39 @@ void CommandBufferProxyImpl::SignalQuery(uint32_t query,
|
| signal_tasks_.insert(std::make_pair(signal_id, callback));
|
| }
|
|
|
| -bool CommandBufferProxyImpl::ProduceFrontBuffer(const gpu::Mailbox& mailbox) {
|
| - CheckLock();
|
| +bool CommandBufferProxyImpl::TakeFrontBuffer(const gpu::Mailbox& mailbox,
|
| + gpu::SyncToken* sync_token) {
|
| + scoped_ptr<base::AutoLock> lock;
|
| + if (lock_)
|
| + lock.reset(new base::AutoLock(*lock_));
|
| if (last_state_.error != gpu::error::kNoError)
|
| return false;
|
|
|
| - Send(new GpuCommandBufferMsg_ProduceFrontBuffer(route_id_, mailbox));
|
| + Send(new GpuCommandBufferMsg_TakeFrontBuffer(route_id_, mailbox));
|
| +
|
| + uint64_t fence = GenerateFenceSyncRelease();
|
| + *sync_token = gpu::SyncToken(GetNamespaceID(), GetExtraCommandBufferData(),
|
| + GetCommandBufferID(), fence);
|
| +
|
| + // Force a synchronous IPC to validate sync token.
|
| + EnsureWorkVisible();
|
| + sync_token->SetVerifyFlush();
|
| return true;
|
| }
|
|
|
| +void CommandBufferProxyImpl::ReturnFrontBuffer(const gpu::Mailbox& mailbox,
|
| + const gpu::SyncToken& sync_token,
|
| + bool is_lost) {
|
| + scoped_ptr<base::AutoLock> lock;
|
| + if (lock_)
|
| + lock.reset(new base::AutoLock(*lock_));
|
| + if (last_state_.error != gpu::error::kNoError)
|
| + return;
|
| +
|
| + Send(new GpuCommandBufferMsg_ReturnFrontBuffer(route_id_, mailbox, sync_token,
|
| + is_lost));
|
| +}
|
| +
|
| gpu::error::Error CommandBufferProxyImpl::GetLastError() {
|
| return last_state_.error;
|
| }
|
|
|