OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/common/gpu/client/command_buffer_proxy.h" | 5 #include "content/common/gpu/client/command_buffer_proxy.h" |
6 | 6 |
7 #include "base/callback.h" | 7 #include "base/callback.h" |
8 #include "base/debug/trace_event.h" | 8 #include "base/debug/trace_event.h" |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "base/process_util.h" | 10 #include "base/process_util.h" |
(...skipping 10 matching lines...) Expand all Loading... |
21 #include "gpu/command_buffer/common/command_buffer_shared.h" | 21 #include "gpu/command_buffer/common/command_buffer_shared.h" |
22 #include "ui/gfx/size.h" | 22 #include "ui/gfx/size.h" |
23 | 23 |
24 using gpu::Buffer; | 24 using gpu::Buffer; |
25 | 25 |
26 CommandBufferProxy::CommandBufferProxy( | 26 CommandBufferProxy::CommandBufferProxy( |
27 GpuChannelHost* channel, | 27 GpuChannelHost* channel, |
28 int route_id) | 28 int route_id) |
29 : channel_(channel), | 29 : channel_(channel), |
30 route_id_(route_id), | 30 route_id_(route_id), |
31 flush_count_(0) { | 31 flush_count_(0), |
| 32 last_put_offset_(-1) { |
32 } | 33 } |
33 | 34 |
34 CommandBufferProxy::~CommandBufferProxy() { | 35 CommandBufferProxy::~CommandBufferProxy() { |
35 // Delete all the locally cached shared memory objects, closing the handle | 36 // Delete all the locally cached shared memory objects, closing the handle |
36 // in this process. | 37 // in this process. |
37 for (TransferBufferMap::iterator it = transfer_buffers_.begin(); | 38 for (TransferBufferMap::iterator it = transfer_buffers_.begin(); |
38 it != transfer_buffers_.end(); | 39 it != transfer_buffers_.end(); |
39 ++it) { | 40 ++it) { |
40 delete it->second.shared_memory; | 41 delete it->second.shared_memory; |
41 it->second.shared_memory = NULL; | 42 it->second.shared_memory = NULL; |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
165 gpu::CommandBuffer::State CommandBufferProxy::GetLastState() { | 166 gpu::CommandBuffer::State CommandBufferProxy::GetLastState() { |
166 return last_state_; | 167 return last_state_; |
167 } | 168 } |
168 | 169 |
169 void CommandBufferProxy::Flush(int32 put_offset) { | 170 void CommandBufferProxy::Flush(int32 put_offset) { |
170 if (last_state_.error != gpu::error::kNoError) | 171 if (last_state_.error != gpu::error::kNoError) |
171 return; | 172 return; |
172 | 173 |
173 TRACE_EVENT1("gpu", "CommandBufferProxy::Flush", "put_offset", put_offset); | 174 TRACE_EVENT1("gpu", "CommandBufferProxy::Flush", "put_offset", put_offset); |
174 | 175 |
| 176 if (last_put_offset_ == put_offset) |
| 177 return; |
| 178 |
| 179 last_put_offset_ = put_offset; |
| 180 |
175 Send(new GpuCommandBufferMsg_AsyncFlush(route_id_, | 181 Send(new GpuCommandBufferMsg_AsyncFlush(route_id_, |
176 put_offset, | 182 put_offset, |
177 ++flush_count_)); | 183 ++flush_count_)); |
178 } | 184 } |
179 | 185 |
180 gpu::CommandBuffer::State CommandBufferProxy::FlushSync(int32 put_offset, | 186 gpu::CommandBuffer::State CommandBufferProxy::FlushSync(int32 put_offset, |
181 int32 last_known_get) { | 187 int32 last_known_get) { |
182 TRACE_EVENT1("gpu", "CommandBufferProxy::FlushSync", "put_offset", | 188 TRACE_EVENT1("gpu", "CommandBufferProxy::FlushSync", "put_offset", |
183 put_offset); | 189 put_offset); |
184 Flush(put_offset); | 190 Flush(put_offset); |
(...skipping 10 matching lines...) Expand all Loading... |
195 } | 201 } |
196 | 202 |
197 return last_state_; | 203 return last_state_; |
198 } | 204 } |
199 | 205 |
200 void CommandBufferProxy::SetGetBuffer(int32 shm_id) { | 206 void CommandBufferProxy::SetGetBuffer(int32 shm_id) { |
201 if (last_state_.error != gpu::error::kNoError) | 207 if (last_state_.error != gpu::error::kNoError) |
202 return; | 208 return; |
203 | 209 |
204 Send(new GpuCommandBufferMsg_SetGetBuffer(route_id_, shm_id)); | 210 Send(new GpuCommandBufferMsg_SetGetBuffer(route_id_, shm_id)); |
| 211 last_put_offset_ = -1; |
205 } | 212 } |
206 | 213 |
207 void CommandBufferProxy::SetGetOffset(int32 get_offset) { | 214 void CommandBufferProxy::SetGetOffset(int32 get_offset) { |
208 // Not implemented in proxy. | 215 // Not implemented in proxy. |
209 NOTREACHED(); | 216 NOTREACHED(); |
210 } | 217 } |
211 | 218 |
212 int32 CommandBufferProxy::CreateTransferBuffer(size_t size, int32 id_request) { | 219 int32 CommandBufferProxy::CreateTransferBuffer(size_t size, int32 id_request) { |
213 if (last_state_.error != gpu::error::kNoError) | 220 if (last_state_.error != gpu::error::kNoError) |
214 return -1; | 221 return -1; |
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
447 | 454 |
448 void CommandBufferProxy::SetOnConsoleMessageCallback( | 455 void CommandBufferProxy::SetOnConsoleMessageCallback( |
449 const GpuConsoleMessageCallback& callback) { | 456 const GpuConsoleMessageCallback& callback) { |
450 console_message_callback_ = callback; | 457 console_message_callback_ = callback; |
451 } | 458 } |
452 | 459 |
453 void CommandBufferProxy::TryUpdateState() { | 460 void CommandBufferProxy::TryUpdateState() { |
454 if (last_state_.error == gpu::error::kNoError) | 461 if (last_state_.error == gpu::error::kNoError) |
455 shared_state_->Read(&last_state_); | 462 shared_state_->Read(&last_state_); |
456 } | 463 } |
OLD | NEW |