Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(67)

Side by Side Diff: content/common/gpu/gpu_command_buffer_stub.cc

Issue 7762013: Added GPU process "echo" IPC message. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « content/common/gpu/gpu_command_buffer_stub.h ('k') | content/common/gpu/gpu_messages.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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)
OLDNEW
« no previous file with comments | « content/common/gpu/gpu_command_buffer_stub.h ('k') | content/common/gpu/gpu_messages.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698