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

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

Issue 6993043: Fix the mac hangup when force-compositing-mode is enabled (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: comments Created 9 years, 6 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
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 375 matching lines...) Expand 10 before | Expand all | Expand 10 after
386 params.route_id = route_id(); 386 params.route_id = route_id();
387 params.swap_buffers_count = scheduler_->swap_buffers_count(); 387 params.swap_buffers_count = scheduler_->swap_buffers_count();
388 gpu_channel_manager->Send( 388 gpu_channel_manager->Send(
389 new GpuHostMsg_AcceleratedSurfaceBuffersSwapped(params)); 389 new GpuHostMsg_AcceleratedSurfaceBuffersSwapped(params));
390 390
391 scheduler_->SetScheduled(false); 391 scheduler_->SetScheduled(false);
392 } 392 }
393 393
394 void GpuCommandBufferStub::AcceleratedSurfaceBuffersSwapped( 394 void GpuCommandBufferStub::AcceleratedSurfaceBuffersSwapped(
395 uint64 swap_buffers_count) { 395 uint64 swap_buffers_count) {
396 TRACE_EVENT0("gpu", 396 TRACE_EVENT1("gpu",
397 "GpuCommandBufferStub::AcceleratedSurfaceBuffersSwapped"); 397 "GpuCommandBufferStub::AcceleratedSurfaceBuffersSwapped",
398 "frame", swap_buffers_count);
398 399
399 // Multiple swapbuffers may get consolidated together into a single 400 // Multiple swapbuffers may get consolidated together into a single
400 // AcceleratedSurfaceBuffersSwapped call. Since OnSwapBuffers expects to be 401 // AcceleratedSurfaceBuffersSwapped call. Since OnSwapBuffers expects to be
401 // called one time for every swap, make up the difference here. 402 // called one time for every swap, make up the difference here.
402 uint64 delta = swap_buffers_count - 403 uint64 delta = swap_buffers_count -
403 scheduler_->acknowledged_swap_buffers_count(); 404 scheduler_->acknowledged_swap_buffers_count();
404
405 scheduler_->set_acknowledged_swap_buffers_count(swap_buffers_count); 405 scheduler_->set_acknowledged_swap_buffers_count(swap_buffers_count);
406 406
407 for(uint64 i = 0; i < delta; i++) 407 for(uint64 i = 0; i < delta; i++) {
408 OnSwapBuffers(); 408 OnSwapBuffers();
409 409 // Wake up the GpuScheduler to start doing work again.
410 // Wake up the GpuScheduler to start doing work again. 410 scheduler_->SetScheduled(true);
411 scheduler_->SetScheduled(true); 411 }
412 } 412 }
413 #endif // defined(OS_MACOSX) 413 #endif // defined(OS_MACOSX)
414 414
415 void GpuCommandBufferStub::CommandBufferWasDestroyed() {
416 TRACE_EVENT0("gpu", "GpuCommandBufferStub::CommandBufferWasDestroyed");
417 // In case the renderer is currently blocked waiting for a sync reply from
418 // the stub, this method allows us to cleanup and unblock pending messages.
419 while (!scheduler_->IsScheduled())
420 scheduler_->SetScheduled(true);
421 // Handle any deferred messages now that the scheduler is scheduled.
422 HandleDeferredMessages();
423 }
424
415 void GpuCommandBufferStub::ResizeCallback(gfx::Size size) { 425 void GpuCommandBufferStub::ResizeCallback(gfx::Size size) {
416 if (handle_ == gfx::kNullPluginWindow) { 426 if (handle_ == gfx::kNullPluginWindow) {
417 scheduler_->decoder()->ResizeOffscreenFrameBuffer(size); 427 scheduler_->decoder()->ResizeOffscreenFrameBuffer(size);
418 scheduler_->decoder()->UpdateOffscreenFrameBufferSize(); 428 scheduler_->decoder()->UpdateOffscreenFrameBufferSize();
419 } else { 429 } else {
420 #if defined(TOOLKIT_USES_GTK) && !defined(TOUCH_UI) || defined(OS_WIN) 430 #if defined(TOOLKIT_USES_GTK) && !defined(TOUCH_UI) || defined(OS_WIN)
421 GpuChannelManager* gpu_channel_manager = channel_->gpu_channel_manager(); 431 GpuChannelManager* gpu_channel_manager = channel_->gpu_channel_manager();
422 gpu_channel_manager->Send( 432 gpu_channel_manager->Send(
423 new GpuHostMsg_ResizeView(renderer_id_, 433 new GpuHostMsg_ResizeView(renderer_id_,
424 render_view_id_, 434 render_view_id_,
(...skipping 28 matching lines...) Expand all
453 gfx::GLContext::LosesAllContextsOnContextLost()) { 463 gfx::GLContext::LosesAllContextsOnContextLost()) {
454 channel_->LoseAllContexts(); 464 channel_->LoseAllContexts();
455 } else { 465 } else {
456 IPC::Message* msg = new GpuCommandBufferMsg_UpdateState(route_id_, state); 466 IPC::Message* msg = new GpuCommandBufferMsg_UpdateState(route_id_, state);
457 msg->set_unblock(true); 467 msg->set_unblock(true);
458 Send(msg); 468 Send(msg);
459 } 469 }
460 } 470 }
461 471
462 #endif // defined(ENABLE_GPU) 472 #endif // defined(ENABLE_GPU)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698