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

Side by Side Diff: content/renderer/gpu/render_widget_compositor.cc

Issue 134623005: Make SingleThreadProxy a SchedulerClient (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 6 years, 5 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) 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 392 matching lines...) Expand 10 before | Expand all | Expand 10 after
403 #endif 403 #endif
404 404
405 compositor->Initialize(settings); 405 compositor->Initialize(settings);
406 406
407 return compositor.Pass(); 407 return compositor.Pass();
408 } 408 }
409 409
410 RenderWidgetCompositor::RenderWidgetCompositor(RenderWidget* widget, 410 RenderWidgetCompositor::RenderWidgetCompositor(RenderWidget* widget,
411 bool threaded) 411 bool threaded)
412 : threaded_(threaded), 412 : threaded_(threaded),
413 suppress_schedule_composite_(false),
414 widget_(widget) { 413 widget_(widget) {
415 } 414 }
416 415
417 RenderWidgetCompositor::~RenderWidgetCompositor() {} 416 RenderWidgetCompositor::~RenderWidgetCompositor() {}
418 417
419 const base::WeakPtr<cc::InputHandler>& 418 const base::WeakPtr<cc::InputHandler>&
420 RenderWidgetCompositor::GetInputHandler() { 419 RenderWidgetCompositor::GetInputHandler() {
421 return layer_tree_host_->GetInputHandler(); 420 return layer_tree_host_->GetInputHandler();
422 } 421 }
423 422
424 void RenderWidgetCompositor::SetSuppressScheduleComposite(bool suppress) { 423 void RenderWidgetCompositor::SetSuppressScheduleComposite(bool suppress) {
enne (OOO) 2014/07/10 20:37:42 This no longer makes any sense in an FCM world, an
jamesr 2014/07/10 21:55:40 Which part doesn't make sense? Suppressing compos
danakj 2014/07/10 21:57:14 This is done by SetDeferCommits in WebViewImpl now
enne (OOO) 2014/07/10 22:03:49 SetSuppressScheduleComposite != SetDeferCommits.
425 if (suppress_schedule_composite_ == suppress) 424 layer_tree_host_->SetDeferCommits(suppress);
426 return;
427
428 if (suppress)
429 TRACE_EVENT_ASYNC_BEGIN0("gpu",
430 "RenderWidgetCompositor::SetSuppressScheduleComposite", this);
431 else
432 TRACE_EVENT_ASYNC_END0("gpu",
433 "RenderWidgetCompositor::SetSuppressScheduleComposite", this);
434 suppress_schedule_composite_ = suppress;
435 } 425 }
436 426
437 bool RenderWidgetCompositor::BeginMainFrameRequested() const { 427 bool RenderWidgetCompositor::BeginMainFrameRequested() const {
438 return layer_tree_host_->BeginMainFrameRequested(); 428 return layer_tree_host_->BeginMainFrameRequested();
439 } 429 }
440 430
441 void RenderWidgetCompositor::UpdateAnimations(base::TimeTicks time) {
442 layer_tree_host_->UpdateClientAnimations(time);
443 }
444
445 void RenderWidgetCompositor::SetNeedsDisplayOnAllLayers() { 431 void RenderWidgetCompositor::SetNeedsDisplayOnAllLayers() {
446 layer_tree_host_->SetNeedsDisplayOnAllLayers(); 432 layer_tree_host_->SetNeedsDisplayOnAllLayers();
447 } 433 }
448 434
449 void RenderWidgetCompositor::SetRasterizeOnlyVisibleContent() { 435 void RenderWidgetCompositor::SetRasterizeOnlyVisibleContent() {
450 cc::LayerTreeDebugState current = layer_tree_host_->debug_state(); 436 cc::LayerTreeDebugState current = layer_tree_host_->debug_state();
451 current.rasterize_only_visible_content = true; 437 current.rasterize_only_visible_content = true;
452 layer_tree_host_->SetDebugState(current); 438 layer_tree_host_->SetDebugState(current);
453 } 439 }
454 440
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
527 layer_tree_host_ = cc::LayerTreeHost::CreateThreaded( 513 layer_tree_host_ = cc::LayerTreeHost::CreateThreaded(
528 this, shared_bitmap_manager, settings, compositor_message_loop_proxy); 514 this, shared_bitmap_manager, settings, compositor_message_loop_proxy);
529 } else { 515 } else {
530 layer_tree_host_ = cc::LayerTreeHost::CreateSingleThreaded( 516 layer_tree_host_ = cc::LayerTreeHost::CreateSingleThreaded(
531 this, this, shared_bitmap_manager, settings); 517 this, this, shared_bitmap_manager, settings);
532 } 518 }
533 DCHECK(layer_tree_host_); 519 DCHECK(layer_tree_host_);
534 } 520 }
535 521
536 void RenderWidgetCompositor::setSurfaceReady() { 522 void RenderWidgetCompositor::setSurfaceReady() {
537 layer_tree_host_->SetLayerTreeHostClientReady(); 523 // In tests without a RenderThreadImpl, don't set ready as this kicks
524 // off creating output surfaces that the test can't create.
525 if (RenderThreadImpl::current())
526 layer_tree_host_->SetLayerTreeHostClientReady();
538 } 527 }
539 528
540 void RenderWidgetCompositor::setRootLayer(const blink::WebLayer& layer) { 529 void RenderWidgetCompositor::setRootLayer(const blink::WebLayer& layer) {
541 layer_tree_host_->SetRootLayer( 530 layer_tree_host_->SetRootLayer(
542 static_cast<const WebLayerImpl*>(&layer)->layer()); 531 static_cast<const WebLayerImpl*>(&layer)->layer());
543 } 532 }
544 533
545 void RenderWidgetCompositor::clearRootLayer() { 534 void RenderWidgetCompositor::clearRootLayer() {
546 layer_tree_host_->SetRootLayer(scoped_refptr<cc::Layer>()); 535 layer_tree_host_->SetRootLayer(scoped_refptr<cc::Layer>());
547 } 536 }
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
680 } 669 }
681 } 670 }
682 671
683 void RenderWidgetCompositor::compositeAndReadbackAsync( 672 void RenderWidgetCompositor::compositeAndReadbackAsync(
684 blink::WebCompositeAndReadbackAsyncCallback* callback) { 673 blink::WebCompositeAndReadbackAsyncCallback* callback) {
685 DCHECK(layer_tree_host_->root_layer()); 674 DCHECK(layer_tree_host_->root_layer());
686 scoped_ptr<cc::CopyOutputRequest> request = 675 scoped_ptr<cc::CopyOutputRequest> request =
687 cc::CopyOutputRequest::CreateBitmapRequest( 676 cc::CopyOutputRequest::CreateBitmapRequest(
688 base::Bind(&CompositeAndReadbackAsyncCallback, callback)); 677 base::Bind(&CompositeAndReadbackAsyncCallback, callback));
689 layer_tree_host_->root_layer()->RequestCopyOfOutput(request.Pass()); 678 layer_tree_host_->root_layer()->RequestCopyOfOutput(request.Pass());
690 if (!threaded_) { 679
691 widget_->webwidget()->animate(0.0); 680 // Synchronous non-scheduled compositors need an immediate composite
692 widget_->webwidget()->layout(); 681 // so that the readback comes back.
682 if (!layer_tree_host_->settings().single_thread_proxy_scheduler)
693 layer_tree_host_->Composite(gfx::FrameTime::Now()); 683 layer_tree_host_->Composite(gfx::FrameTime::Now());
694 }
695 } 684 }
696 685
697 void RenderWidgetCompositor::finishAllRendering() { 686 void RenderWidgetCompositor::finishAllRendering() {
698 layer_tree_host_->FinishAllRendering(); 687 layer_tree_host_->FinishAllRendering();
699 } 688 }
700 689
701 void RenderWidgetCompositor::setDeferCommits(bool defer_commits) { 690 void RenderWidgetCompositor::setDeferCommits(bool defer_commits) {
702 layer_tree_host_->SetDeferCommits(defer_commits); 691 layer_tree_host_->SetDeferCommits(defer_commits);
703 } 692 }
704 693
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
778 void RenderWidgetCompositor::DidCommitAndDrawFrame() { 767 void RenderWidgetCompositor::DidCommitAndDrawFrame() {
779 widget_->didCommitAndDrawCompositorFrame(); 768 widget_->didCommitAndDrawCompositorFrame();
780 } 769 }
781 770
782 void RenderWidgetCompositor::DidCompleteSwapBuffers() { 771 void RenderWidgetCompositor::DidCompleteSwapBuffers() {
783 widget_->didCompleteSwapBuffers(); 772 widget_->didCompleteSwapBuffers();
784 if (!threaded_) 773 if (!threaded_)
785 widget_->OnSwapBuffersComplete(); 774 widget_->OnSwapBuffersComplete();
786 } 775 }
787 776
788 void RenderWidgetCompositor::ScheduleComposite() {
789 if (!suppress_schedule_composite_)
790 widget_->scheduleComposite();
791 }
792
793 void RenderWidgetCompositor::ScheduleAnimation() { 777 void RenderWidgetCompositor::ScheduleAnimation() {
794 widget_->scheduleAnimation(); 778 widget_->scheduleAnimation();
795 } 779 }
796 780
797 void RenderWidgetCompositor::DidPostSwapBuffers() { 781 void RenderWidgetCompositor::DidPostSwapBuffers() {
798 widget_->OnSwapBuffersPosted(); 782 widget_->OnSwapBuffersPosted();
799 } 783 }
800 784
801 void RenderWidgetCompositor::DidAbortSwapBuffers() { 785 void RenderWidgetCompositor::DidAbortSwapBuffers() {
802 widget_->OnSwapBuffersAborted(); 786 widget_->OnSwapBuffersAborted();
803 } 787 }
804 788
805 void RenderWidgetCompositor::RateLimitSharedMainThreadContext() { 789 void RenderWidgetCompositor::RateLimitSharedMainThreadContext() {
806 cc::ContextProvider* provider = 790 cc::ContextProvider* provider =
807 RenderThreadImpl::current()->SharedMainThreadContextProvider().get(); 791 RenderThreadImpl::current()->SharedMainThreadContextProvider().get();
808 provider->ContextGL()->RateLimitOffscreenContextCHROMIUM(); 792 provider->ContextGL()->RateLimitOffscreenContextCHROMIUM();
809 } 793 }
810 794
811 } // namespace content 795 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698