| 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 |