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 |