| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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 #include "content/renderer/gpu/render_widget_compositor.h" | 5 #include "content/renderer/gpu/render_widget_compositor.h" |
| 6 | 6 |
| 7 #include <limits> | 7 #include <limits> |
| 8 #include <string> | 8 #include <string> |
| 9 | 9 |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| (...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 313 #endif | 313 #endif |
| 314 | 314 |
| 315 compositor->Initialize(settings); | 315 compositor->Initialize(settings); |
| 316 | 316 |
| 317 return compositor.Pass(); | 317 return compositor.Pass(); |
| 318 } | 318 } |
| 319 | 319 |
| 320 RenderWidgetCompositor::RenderWidgetCompositor(RenderWidget* widget, | 320 RenderWidgetCompositor::RenderWidgetCompositor(RenderWidget* widget, |
| 321 bool threaded) | 321 bool threaded) |
| 322 : threaded_(threaded), | 322 : threaded_(threaded), |
| 323 suppress_schedule_composite_(false), |
| 323 widget_(widget) { | 324 widget_(widget) { |
| 324 } | 325 } |
| 325 | 326 |
| 326 RenderWidgetCompositor::~RenderWidgetCompositor() {} | 327 RenderWidgetCompositor::~RenderWidgetCompositor() {} |
| 327 | 328 |
| 328 const base::WeakPtr<cc::InputHandler>& | 329 const base::WeakPtr<cc::InputHandler>& |
| 329 RenderWidgetCompositor::GetInputHandler() { | 330 RenderWidgetCompositor::GetInputHandler() { |
| 330 return layer_tree_host_->GetInputHandler(); | 331 return layer_tree_host_->GetInputHandler(); |
| 331 } | 332 } |
| 332 | 333 |
| 333 void RenderWidgetCompositor::SetSuppressScheduleComposite(bool suppress) { | 334 void RenderWidgetCompositor::SetSuppressScheduleComposite(bool suppress) { |
| 334 layer_tree_host_->SetDeferCommits(suppress); | 335 if (suppress_schedule_composite_ == suppress) |
| 336 return; |
| 337 |
| 338 if (suppress) |
| 339 TRACE_EVENT_ASYNC_BEGIN0("gpu", |
| 340 "RenderWidgetCompositor::SetSuppressScheduleComposite", this); |
| 341 else |
| 342 TRACE_EVENT_ASYNC_END0("gpu", |
| 343 "RenderWidgetCompositor::SetSuppressScheduleComposite", this); |
| 344 suppress_schedule_composite_ = suppress; |
| 335 } | 345 } |
| 336 | 346 |
| 337 bool RenderWidgetCompositor::BeginMainFrameRequested() const { | 347 bool RenderWidgetCompositor::BeginMainFrameRequested() const { |
| 338 return layer_tree_host_->BeginMainFrameRequested(); | 348 return layer_tree_host_->BeginMainFrameRequested(); |
| 339 } | 349 } |
| 340 | 350 |
| 351 void RenderWidgetCompositor::UpdateAnimations(base::TimeTicks time) { |
| 352 layer_tree_host_->UpdateClientAnimations(time); |
| 353 } |
| 354 |
| 341 void RenderWidgetCompositor::SetNeedsDisplayOnAllLayers() { | 355 void RenderWidgetCompositor::SetNeedsDisplayOnAllLayers() { |
| 342 layer_tree_host_->SetNeedsDisplayOnAllLayers(); | 356 layer_tree_host_->SetNeedsDisplayOnAllLayers(); |
| 343 } | 357 } |
| 344 | 358 |
| 345 void RenderWidgetCompositor::SetRasterizeOnlyVisibleContent() { | 359 void RenderWidgetCompositor::SetRasterizeOnlyVisibleContent() { |
| 346 cc::LayerTreeDebugState current = layer_tree_host_->debug_state(); | 360 cc::LayerTreeDebugState current = layer_tree_host_->debug_state(); |
| 347 current.rasterize_only_visible_content = true; | 361 current.rasterize_only_visible_content = true; |
| 348 layer_tree_host_->SetDebugState(current); | 362 layer_tree_host_->SetDebugState(current); |
| 349 } | 363 } |
| 350 | 364 |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 423 layer_tree_host_ = cc::LayerTreeHost::CreateThreaded( | 437 layer_tree_host_ = cc::LayerTreeHost::CreateThreaded( |
| 424 this, shared_bitmap_manager, settings, compositor_message_loop_proxy); | 438 this, shared_bitmap_manager, settings, compositor_message_loop_proxy); |
| 425 } else { | 439 } else { |
| 426 layer_tree_host_ = cc::LayerTreeHost::CreateSingleThreaded( | 440 layer_tree_host_ = cc::LayerTreeHost::CreateSingleThreaded( |
| 427 this, this, shared_bitmap_manager, settings); | 441 this, this, shared_bitmap_manager, settings); |
| 428 } | 442 } |
| 429 DCHECK(layer_tree_host_); | 443 DCHECK(layer_tree_host_); |
| 430 } | 444 } |
| 431 | 445 |
| 432 void RenderWidgetCompositor::setSurfaceReady() { | 446 void RenderWidgetCompositor::setSurfaceReady() { |
| 433 // In tests without a RenderThreadImpl, don't set ready as this kicks | 447 layer_tree_host_->SetLayerTreeHostClientReady(); |
| 434 // off creating output surfaces that the test can't create. | |
| 435 if (RenderThreadImpl::current()) | |
| 436 layer_tree_host_->SetLayerTreeHostClientReady(); | |
| 437 } | 448 } |
| 438 | 449 |
| 439 void RenderWidgetCompositor::setRootLayer(const blink::WebLayer& layer) { | 450 void RenderWidgetCompositor::setRootLayer(const blink::WebLayer& layer) { |
| 440 layer_tree_host_->SetRootLayer( | 451 layer_tree_host_->SetRootLayer( |
| 441 static_cast<const WebLayerImpl*>(&layer)->layer()); | 452 static_cast<const WebLayerImpl*>(&layer)->layer()); |
| 442 } | 453 } |
| 443 | 454 |
| 444 void RenderWidgetCompositor::clearRootLayer() { | 455 void RenderWidgetCompositor::clearRootLayer() { |
| 445 layer_tree_host_->SetRootLayer(scoped_refptr<cc::Layer>()); | 456 layer_tree_host_->SetRootLayer(scoped_refptr<cc::Layer>()); |
| 446 } | 457 } |
| (...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 665 void RenderWidgetCompositor::DidCommitAndDrawFrame() { | 676 void RenderWidgetCompositor::DidCommitAndDrawFrame() { |
| 666 widget_->didCommitAndDrawCompositorFrame(); | 677 widget_->didCommitAndDrawCompositorFrame(); |
| 667 } | 678 } |
| 668 | 679 |
| 669 void RenderWidgetCompositor::DidCompleteSwapBuffers() { | 680 void RenderWidgetCompositor::DidCompleteSwapBuffers() { |
| 670 widget_->didCompleteSwapBuffers(); | 681 widget_->didCompleteSwapBuffers(); |
| 671 if (!threaded_) | 682 if (!threaded_) |
| 672 widget_->OnSwapBuffersComplete(); | 683 widget_->OnSwapBuffersComplete(); |
| 673 } | 684 } |
| 674 | 685 |
| 686 void RenderWidgetCompositor::ScheduleComposite() { |
| 687 if (!suppress_schedule_composite_) |
| 688 widget_->scheduleComposite(); |
| 689 } |
| 690 |
| 691 void RenderWidgetCompositor::ScheduleAnimation() { |
| 692 widget_->scheduleAnimation(); |
| 693 } |
| 694 |
| 675 void RenderWidgetCompositor::DidPostSwapBuffers() { | 695 void RenderWidgetCompositor::DidPostSwapBuffers() { |
| 676 widget_->OnSwapBuffersPosted(); | 696 widget_->OnSwapBuffersPosted(); |
| 677 } | 697 } |
| 678 | 698 |
| 679 void RenderWidgetCompositor::DidAbortSwapBuffers() { | 699 void RenderWidgetCompositor::DidAbortSwapBuffers() { |
| 680 widget_->OnSwapBuffersAborted(); | 700 widget_->OnSwapBuffersAborted(); |
| 681 } | 701 } |
| 682 | 702 |
| 683 void RenderWidgetCompositor::RateLimitSharedMainThreadContext() { | 703 void RenderWidgetCompositor::RateLimitSharedMainThreadContext() { |
| 684 cc::ContextProvider* provider = | 704 cc::ContextProvider* provider = |
| 685 RenderThreadImpl::current()->SharedMainThreadContextProvider().get(); | 705 RenderThreadImpl::current()->SharedMainThreadContextProvider().get(); |
| 686 provider->ContextGL()->RateLimitOffscreenContextCHROMIUM(); | 706 provider->ContextGL()->RateLimitOffscreenContextCHROMIUM(); |
| 687 } | 707 } |
| 688 | 708 |
| 689 } // namespace content | 709 } // namespace content |
| OLD | NEW |