OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 #if defined(ENABLE_GPU) | 5 #if defined(ENABLE_GPU) |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/debug/trace_event.h" | 8 #include "base/debug/trace_event.h" |
9 #include "base/process_util.h" | 9 #include "base/process_util.h" |
10 #include "base/shared_memory.h" | 10 #include "base/shared_memory.h" |
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
190 requested_attribs_, | 190 requested_attribs_, |
191 channel_->share_group())) { | 191 channel_->share_group())) { |
192 #endif | 192 #endif |
193 command_buffer_->SetPutOffsetChangeCallback( | 193 command_buffer_->SetPutOffsetChangeCallback( |
194 NewCallback(scheduler_.get(), | 194 NewCallback(scheduler_.get(), |
195 &gpu::GpuScheduler::PutChanged)); | 195 &gpu::GpuScheduler::PutChanged)); |
196 command_buffer_->SetParseErrorCallback( | 196 command_buffer_->SetParseErrorCallback( |
197 NewCallback(this, &GpuCommandBufferStub::OnParseError)); | 197 NewCallback(this, &GpuCommandBufferStub::OnParseError)); |
198 scheduler_->SetScheduledCallback( | 198 scheduler_->SetScheduledCallback( |
199 NewCallback(channel_, &GpuChannel::OnScheduled)); | 199 NewCallback(channel_, &GpuChannel::OnScheduled)); |
| 200 |
| 201 #if defined(OS_MACOSX) |
200 scheduler_->SetSwapBuffersCallback( | 202 scheduler_->SetSwapBuffersCallback( |
201 NewCallback(this, &GpuCommandBufferStub::OnSwapBuffers)); | 203 NewCallback(this, &GpuCommandBufferStub::OnSwapBuffers)); |
| 204 #endif |
| 205 |
202 // On TOUCH_UI, the ImageTransportSurface handles co-ordinating the | 206 // On TOUCH_UI, the ImageTransportSurface handles co-ordinating the |
203 // resize with the browser process. The ImageTransportSurface sets it's | 207 // resize with the browser process. The ImageTransportSurface sets it's |
204 // own resize callback, so we shouldn't do it here. | 208 // own resize callback, so we shouldn't do it here. |
205 #if !defined(TOUCH_UI) | 209 #if !defined(TOUCH_UI) |
206 if (handle_ != gfx::kNullPluginWindow) { | 210 if (handle_ != gfx::kNullPluginWindow) { |
207 scheduler_->SetResizeCallback( | 211 scheduler_->SetResizeCallback( |
208 NewCallback(this, &GpuCommandBufferStub::OnResize)); | 212 NewCallback(this, &GpuCommandBufferStub::OnResize)); |
209 } | 213 } |
210 #endif | 214 #endif |
211 if (watchdog_) | 215 if (watchdog_) |
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
400 &transfer_buffer); | 404 &transfer_buffer); |
401 size = buffer.size; | 405 size = buffer.size; |
402 } | 406 } |
403 | 407 |
404 GpuCommandBufferMsg_GetTransferBuffer::WriteReplyParams(reply_message, | 408 GpuCommandBufferMsg_GetTransferBuffer::WriteReplyParams(reply_message, |
405 transfer_buffer, | 409 transfer_buffer, |
406 size); | 410 size); |
407 Send(reply_message); | 411 Send(reply_message); |
408 } | 412 } |
409 | 413 |
| 414 #if defined(OS_MACOSX) |
410 void GpuCommandBufferStub::OnSwapBuffers() { | 415 void GpuCommandBufferStub::OnSwapBuffers() { |
411 TRACE_EVENT0("gpu", "GpuCommandBufferStub::OnSwapBuffers"); | 416 TRACE_EVENT0("gpu", "GpuCommandBufferStub::OnSwapBuffers"); |
412 ReportState(); | |
413 | |
414 #if defined(OS_MACOSX) | |
415 if (handle_) { | 417 if (handle_) { |
416 // To swap on OSX, we have to send a message to the browser to get the | 418 // To swap on OSX, we have to send a message to the browser to get the |
417 // context put onscreen. | 419 // context put onscreen. |
418 GpuChannelManager* gpu_channel_manager = channel_->gpu_channel_manager(); | 420 GpuChannelManager* gpu_channel_manager = channel_->gpu_channel_manager(); |
419 GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params params; | 421 GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params params; |
420 params.renderer_id = renderer_id_; | 422 params.renderer_id = renderer_id_; |
421 params.render_view_id = render_view_id_; | 423 params.render_view_id = render_view_id_; |
422 params.window = handle_; | 424 params.window = handle_; |
423 params.surface_id = scheduler_->GetSurfaceId(); | 425 params.surface_id = scheduler_->GetSurfaceId(); |
424 params.route_id = route_id(); | 426 params.route_id = route_id(); |
425 params.swap_buffers_count = scheduler_->swap_buffers_count(); | 427 params.swap_buffers_count = scheduler_->swap_buffers_count(); |
426 gpu_channel_manager->Send( | 428 gpu_channel_manager->Send( |
427 new GpuHostMsg_AcceleratedSurfaceBuffersSwapped(params)); | 429 new GpuHostMsg_AcceleratedSurfaceBuffersSwapped(params)); |
428 scheduler_->SetScheduled(false); | 430 scheduler_->SetScheduled(false); |
429 } | 431 } |
430 #else | 432 } |
431 // Notify the upstream commandbuffer that the swapbuffers has completed. | |
432 Send(new GpuCommandBufferMsg_SwapBuffers(route_id_)); | |
433 #endif | 433 #endif |
434 } | |
435 | 434 |
436 void GpuCommandBufferStub::OnCommandProcessed() { | 435 void GpuCommandBufferStub::OnCommandProcessed() { |
437 if (watchdog_) | 436 if (watchdog_) |
438 watchdog_->CheckArmed(); | 437 watchdog_->CheckArmed(); |
439 } | 438 } |
440 | 439 |
441 #if defined(OS_MACOSX) | 440 #if defined(OS_MACOSX) |
442 void GpuCommandBufferStub::AcceleratedSurfaceBuffersSwapped( | 441 void GpuCommandBufferStub::AcceleratedSurfaceBuffersSwapped( |
443 uint64 swap_buffers_count) { | 442 uint64 swap_buffers_count) { |
444 TRACE_EVENT1("gpu", | 443 TRACE_EVENT1("gpu", |
445 "GpuCommandBufferStub::AcceleratedSurfaceBuffersSwapped", | 444 "GpuCommandBufferStub::AcceleratedSurfaceBuffersSwapped", |
446 "frame", swap_buffers_count); | 445 "frame", swap_buffers_count); |
447 DCHECK(handle_ != gfx::kNullPluginWindow); | 446 DCHECK(handle_ != gfx::kNullPluginWindow); |
448 | 447 |
449 // Multiple swapbuffers may get consolidated together into a single | 448 // Multiple swapbuffers may get consolidated together into a single |
450 // AcceleratedSurfaceBuffersSwapped call. Upstream code listening to the | 449 // AcceleratedSurfaceBuffersSwapped call. Upstream code listening to the |
451 // GpuCommandBufferMsg_SwapBuffers expects to be called one time for every | 450 // GpuCommandBufferMsg_SwapBuffers expects to be called one time for every |
452 // swap. So, send one SwapBuffers message for every outstanding swap. | 451 // swap. So, send one SwapBuffers message for every outstanding swap. |
453 uint64 delta = swap_buffers_count - | 452 uint64 delta = swap_buffers_count - |
454 scheduler_->acknowledged_swap_buffers_count(); | 453 scheduler_->acknowledged_swap_buffers_count(); |
455 scheduler_->set_acknowledged_swap_buffers_count(swap_buffers_count); | 454 scheduler_->set_acknowledged_swap_buffers_count(swap_buffers_count); |
456 | 455 |
457 for(uint64 i = 0; i < delta; i++) { | 456 for(uint64 i = 0; i < delta; i++) { |
458 // Notify the upstream commandbuffer that the swapbuffers has completed. | 457 // Wake up the GpuScheduler to start doing work again. When the scheduler |
459 Send(new GpuCommandBufferMsg_SwapBuffers(route_id_)); | 458 // wakes up, it will send any deferred echo acknowledgements, triggering |
460 | 459 // associated swapbuffer callbacks. |
461 // Wake up the GpuScheduler to start doing work again. | |
462 scheduler_->SetScheduled(true); | 460 scheduler_->SetScheduled(true); |
463 } | 461 } |
464 } | 462 } |
465 #endif // defined(OS_MACOSX) | 463 #endif // defined(OS_MACOSX) |
466 | 464 |
467 void GpuCommandBufferStub::OnResize(gfx::Size size) { | 465 void GpuCommandBufferStub::OnResize(gfx::Size size) { |
468 if (handle_ == gfx::kNullPluginWindow) | 466 if (handle_ == gfx::kNullPluginWindow) |
469 return; | 467 return; |
470 | 468 |
471 #if defined(OS_MACOSX) | 469 #if defined(OS_MACOSX) |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
550 channel_->AddRoute(decoder_route_id, decoder); | 548 channel_->AddRoute(decoder_route_id, decoder); |
551 decoder->Initialize(configs, reply_message); | 549 decoder->Initialize(configs, reply_message); |
552 } | 550 } |
553 | 551 |
554 void GpuCommandBufferStub::OnDestroyVideoDecoder(int decoder_route_id) { | 552 void GpuCommandBufferStub::OnDestroyVideoDecoder(int decoder_route_id) { |
555 channel_->RemoveRoute(decoder_route_id); | 553 channel_->RemoveRoute(decoder_route_id); |
556 video_decoders_.Remove(decoder_route_id); | 554 video_decoders_.Remove(decoder_route_id); |
557 } | 555 } |
558 | 556 |
559 #endif // defined(ENABLE_GPU) | 557 #endif // defined(ENABLE_GPU) |
OLD | NEW |