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

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: split raf-stall fix 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 366 matching lines...) Expand 10 before | Expand all | Expand 10 after
377 params.route_id = route_id(); 377 params.route_id = route_id();
378 params.swap_buffers_count = scheduler_->swap_buffers_count(); 378 params.swap_buffers_count = scheduler_->swap_buffers_count();
379 gpu_channel_manager->Send( 379 gpu_channel_manager->Send(
380 new GpuHostMsg_AcceleratedSurfaceBuffersSwapped(params)); 380 new GpuHostMsg_AcceleratedSurfaceBuffersSwapped(params));
381 381
382 scheduler_->SetScheduled(false); 382 scheduler_->SetScheduled(false);
383 } 383 }
384 384
385 void GpuCommandBufferStub::AcceleratedSurfaceBuffersSwapped( 385 void GpuCommandBufferStub::AcceleratedSurfaceBuffersSwapped(
386 uint64 swap_buffers_count) { 386 uint64 swap_buffers_count) {
387 TRACE_EVENT0("gpu", 387 TRACE_EVENT1("gpu",
388 "GpuCommandBufferStub::AcceleratedSurfaceBuffersSwapped"); 388 "GpuCommandBufferStub::AcceleratedSurfaceBuffersSwapped",
389 389 "frame", swap_buffers_count);
390 // Multiple swapbuffers may get consolidated together into a single 390 OnSwapBuffers();
391 // AcceleratedSurfaceBuffersSwapped call. Since OnSwapBuffers expects to be
392 // called one time for every swap, make up the difference here.
393 uint64 delta = swap_buffers_count -
394 scheduler_->acknowledged_swap_buffers_count();
395 391
396 scheduler_->set_acknowledged_swap_buffers_count(swap_buffers_count); 392 scheduler_->set_acknowledged_swap_buffers_count(swap_buffers_count);
397
398 for(uint64 i = 0; i < delta; i++)
399 OnSwapBuffers();
400
401 // Wake up the GpuScheduler to start doing work again. 393 // Wake up the GpuScheduler to start doing work again.
402 scheduler_->SetScheduled(true); 394 scheduler_->SetScheduled(true);
403 } 395 }
404 #endif // defined(OS_MACOSX) 396 #endif // defined(OS_MACOSX)
405 397
398 void GpuCommandBufferStub::CommandBufferWasDestroyed() {
399 TRACE_EVENT0("gpu", "GpuCommandBufferStub::CommandBufferWasDestroyed");
400 // In case the renderer is currently blocked waiting for a sync reply from
401 // the stub, this method allows us to cleanup and unblock pending messages.
402 while (!scheduler_->IsScheduled())
403 scheduler_->SetScheduled(true);
404 // Handle any deferred messages now that the scheduler is scheduled.
405 HandleDeferredMessages();
406 }
407
406 void GpuCommandBufferStub::ResizeCallback(gfx::Size size) { 408 void GpuCommandBufferStub::ResizeCallback(gfx::Size size) {
407 if (handle_ == gfx::kNullPluginWindow) { 409 if (handle_ == gfx::kNullPluginWindow) {
408 scheduler_->decoder()->ResizeOffscreenFrameBuffer(size); 410 scheduler_->decoder()->ResizeOffscreenFrameBuffer(size);
409 scheduler_->decoder()->UpdateOffscreenFrameBufferSize(); 411 scheduler_->decoder()->UpdateOffscreenFrameBufferSize();
410 } else { 412 } else {
411 #if defined(TOOLKIT_USES_GTK) && !defined(TOUCH_UI) || defined(OS_WIN) 413 #if defined(TOOLKIT_USES_GTK) && !defined(TOUCH_UI) || defined(OS_WIN)
412 GpuChannelManager* gpu_channel_manager = channel_->gpu_channel_manager(); 414 GpuChannelManager* gpu_channel_manager = channel_->gpu_channel_manager();
413 gpu_channel_manager->Send( 415 gpu_channel_manager->Send(
414 new GpuHostMsg_ResizeView(renderer_id_, 416 new GpuHostMsg_ResizeView(renderer_id_,
415 render_view_id_, 417 render_view_id_,
(...skipping 28 matching lines...) Expand all
444 gfx::GLContext::LosesAllContextsOnContextLost()) { 446 gfx::GLContext::LosesAllContextsOnContextLost()) {
445 channel_->LoseAllContexts(); 447 channel_->LoseAllContexts();
446 } else { 448 } else {
447 IPC::Message* msg = new GpuCommandBufferMsg_UpdateState(route_id_, state); 449 IPC::Message* msg = new GpuCommandBufferMsg_UpdateState(route_id_, state);
448 msg->set_unblock(true); 450 msg->set_unblock(true);
449 Send(msg); 451 Send(msg);
450 } 452 }
451 } 453 }
452 454
453 #endif // defined(ENABLE_GPU) 455 #endif // defined(ENABLE_GPU)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698