Chromium Code Reviews| Index: content/common/gpu/client/command_buffer_proxy.cc |
| diff --git a/content/common/gpu/client/command_buffer_proxy.cc b/content/common/gpu/client/command_buffer_proxy.cc |
| index 1a25c1ab4f4df8c1e30639d6601bee816d209628..baa4b387bec3860eb206b7cc66c76966741e06d7 100644 |
| --- a/content/common/gpu/client/command_buffer_proxy.cc |
| +++ b/content/common/gpu/client/command_buffer_proxy.cc |
| @@ -17,6 +17,7 @@ |
| #include "content/common/plugin_messages.h" |
| #include "content/common/view_messages.h" |
| #include "gpu/command_buffer/common/cmd_buffer_common.h" |
| +#include "gpu/command_buffer/common/command_buffer_shared.h" |
| #include "ui/gfx/size.h" |
| using gpu::Buffer; |
| @@ -43,7 +44,6 @@ CommandBufferProxy::~CommandBufferProxy() { |
| bool CommandBufferProxy::OnMessageReceived(const IPC::Message& message) { |
| bool handled = true; |
| IPC_BEGIN_MESSAGE_MAP(CommandBufferProxy, message) |
| - IPC_MESSAGE_HANDLER(GpuCommandBufferMsg_UpdateState, OnUpdateState); |
| IPC_MESSAGE_HANDLER(GpuCommandBufferMsg_Destroyed, OnDestroyed); |
| IPC_MESSAGE_HANDLER(GpuCommandBufferMsg_NotifyRepaint, |
| OnNotifyRepaint); |
| @@ -111,6 +111,28 @@ bool CommandBufferProxy::Initialize() { |
| return false; |
| } |
| + int32 state_buffer = CreateTransferBuffer(sizeof *shared_state_, -1); |
|
greggman
2012/02/11 04:17:21
Just asking but does this need to be a separate pi
|
| + |
| + if (state_buffer == -1) { |
| + LOG(ERROR) << "Failed to create shared state transfer buffer."; |
| + return false; |
| + } |
| + |
| + gpu::Buffer buffer = GetTransferBuffer(state_buffer); |
| + if (!buffer.ptr) { |
| + LOG(ERROR) << "Failed to get shared state transfer buffer"; |
| + return false; |
| + } |
| + |
| + shared_state_ = reinterpret_cast<gpu::CommandBufferSharedState*>(buffer.ptr); |
| + shared_state_->Initialize(); |
| + |
| + if (!Send(new GpuCommandBufferMsg_SetSharedStateBuffer(route_id_, |
|
apatrick_chromium
2012/02/13 20:50:58
Could this be sent over as another argument to Gpu
|
| + state_buffer))) { |
| + LOG(ERROR) << "Failed to initialize shared command buffer state."; |
| + return false; |
| + } |
| + |
| return true; |
| } |
| @@ -122,6 +144,7 @@ gpu::CommandBuffer::State CommandBufferProxy::GetState() { |
| OnUpdateState(state); |
| } |
| + TryUpdateState(); |
| return last_state_; |
| } |
| @@ -145,6 +168,7 @@ gpu::CommandBuffer::State CommandBufferProxy::FlushSync(int32 put_offset, |
| TRACE_EVENT1("gpu", "CommandBufferProxy::FlushSync", "put_offset", |
| put_offset); |
| Flush(put_offset); |
| + TryUpdateState(); |
| if (last_known_get == last_state_.get_offset) { |
| // Send will flag state with lost context if IPC fails. |
| if (last_state_.error == gpu::error::kNoError) { |
| @@ -153,6 +177,7 @@ gpu::CommandBuffer::State CommandBufferProxy::FlushSync(int32 put_offset, |
| &state))) |
| OnUpdateState(state); |
| } |
| + TryUpdateState(); |
| } |
| return last_state_; |
| @@ -413,3 +438,6 @@ void CommandBufferProxy::SetOnConsoleMessageCallback( |
| console_message_callback_ = callback; |
| } |
| +void CommandBufferProxy::TryUpdateState() { |
| + shared_state_->Read(&last_state_); |
| +} |