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

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: More fixes 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 302 matching lines...) Expand 10 before | Expand all | Expand 10 after
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),
324 widget_(widget) { 323 widget_(widget) {
325 } 324 }
326 325
327 RenderWidgetCompositor::~RenderWidgetCompositor() {} 326 RenderWidgetCompositor::~RenderWidgetCompositor() {}
328 327
329 const base::WeakPtr<cc::InputHandler>& 328 const base::WeakPtr<cc::InputHandler>&
330 RenderWidgetCompositor::GetInputHandler() { 329 RenderWidgetCompositor::GetInputHandler() {
331 return layer_tree_host_->GetInputHandler(); 330 return layer_tree_host_->GetInputHandler();
332 } 331 }
333 332
334 void RenderWidgetCompositor::SetSuppressScheduleComposite(bool suppress) { 333 void RenderWidgetCompositor::SetSuppressScheduleComposite(bool suppress) {
335 if (suppress_schedule_composite_ == suppress) 334 layer_tree_host_->SetDeferCommits(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;
345 } 335 }
346 336
347 bool RenderWidgetCompositor::BeginMainFrameRequested() const { 337 bool RenderWidgetCompositor::BeginMainFrameRequested() const {
348 return layer_tree_host_->BeginMainFrameRequested(); 338 return layer_tree_host_->BeginMainFrameRequested();
349 } 339 }
350 340
351 void RenderWidgetCompositor::UpdateAnimations(base::TimeTicks time) {
352 layer_tree_host_->UpdateClientAnimations(time);
353 }
354
355 void RenderWidgetCompositor::SetNeedsDisplayOnAllLayers() { 341 void RenderWidgetCompositor::SetNeedsDisplayOnAllLayers() {
356 layer_tree_host_->SetNeedsDisplayOnAllLayers(); 342 layer_tree_host_->SetNeedsDisplayOnAllLayers();
357 } 343 }
358 344
359 void RenderWidgetCompositor::SetRasterizeOnlyVisibleContent() { 345 void RenderWidgetCompositor::SetRasterizeOnlyVisibleContent() {
360 cc::LayerTreeDebugState current = layer_tree_host_->debug_state(); 346 cc::LayerTreeDebugState current = layer_tree_host_->debug_state();
361 current.rasterize_only_visible_content = true; 347 current.rasterize_only_visible_content = true;
362 layer_tree_host_->SetDebugState(current); 348 layer_tree_host_->SetDebugState(current);
363 } 349 }
364 350
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
437 layer_tree_host_ = cc::LayerTreeHost::CreateThreaded( 423 layer_tree_host_ = cc::LayerTreeHost::CreateThreaded(
438 this, shared_bitmap_manager, settings, compositor_message_loop_proxy); 424 this, shared_bitmap_manager, settings, compositor_message_loop_proxy);
439 } else { 425 } else {
440 layer_tree_host_ = cc::LayerTreeHost::CreateSingleThreaded( 426 layer_tree_host_ = cc::LayerTreeHost::CreateSingleThreaded(
441 this, this, shared_bitmap_manager, settings); 427 this, this, shared_bitmap_manager, settings);
442 } 428 }
443 DCHECK(layer_tree_host_); 429 DCHECK(layer_tree_host_);
444 } 430 }
445 431
446 void RenderWidgetCompositor::setSurfaceReady() { 432 void RenderWidgetCompositor::setSurfaceReady() {
447 layer_tree_host_->SetLayerTreeHostClientReady(); 433 // In tests without a RenderThreadImpl, don't set ready as this kicks
434 // off creating output surfaces that the test can't create.
435 if (RenderThreadImpl::current())
436 layer_tree_host_->SetLayerTreeHostClientReady();
448 } 437 }
449 438
450 void RenderWidgetCompositor::setRootLayer(const blink::WebLayer& layer) { 439 void RenderWidgetCompositor::setRootLayer(const blink::WebLayer& layer) {
451 layer_tree_host_->SetRootLayer( 440 layer_tree_host_->SetRootLayer(
452 static_cast<const WebLayerImpl*>(&layer)->layer()); 441 static_cast<const WebLayerImpl*>(&layer)->layer());
453 } 442 }
454 443
455 void RenderWidgetCompositor::clearRootLayer() { 444 void RenderWidgetCompositor::clearRootLayer() {
456 layer_tree_host_->SetRootLayer(scoped_refptr<cc::Layer>()); 445 layer_tree_host_->SetRootLayer(scoped_refptr<cc::Layer>());
457 } 446 }
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
578 } 567 }
579 } 568 }
580 569
581 void RenderWidgetCompositor::compositeAndReadbackAsync( 570 void RenderWidgetCompositor::compositeAndReadbackAsync(
582 blink::WebCompositeAndReadbackAsyncCallback* callback) { 571 blink::WebCompositeAndReadbackAsyncCallback* callback) {
583 DCHECK(layer_tree_host_->root_layer()); 572 DCHECK(layer_tree_host_->root_layer());
584 scoped_ptr<cc::CopyOutputRequest> request = 573 scoped_ptr<cc::CopyOutputRequest> request =
585 cc::CopyOutputRequest::CreateBitmapRequest( 574 cc::CopyOutputRequest::CreateBitmapRequest(
586 base::Bind(&CompositeAndReadbackAsyncCallback, callback)); 575 base::Bind(&CompositeAndReadbackAsyncCallback, callback));
587 layer_tree_host_->root_layer()->RequestCopyOfOutput(request.Pass()); 576 layer_tree_host_->root_layer()->RequestCopyOfOutput(request.Pass());
588 if (!threaded_) { 577
589 widget_->webwidget()->animate(0.0); 578 // Synchronous non-scheduled compositors need an immediate composite
590 widget_->webwidget()->layout(); 579 // so that the readback comes back.
580 if (!layer_tree_host_->settings().single_thread_proxy_scheduler)
591 layer_tree_host_->Composite(gfx::FrameTime::Now()); 581 layer_tree_host_->Composite(gfx::FrameTime::Now());
592 }
593 } 582 }
594 583
595 void RenderWidgetCompositor::finishAllRendering() { 584 void RenderWidgetCompositor::finishAllRendering() {
596 layer_tree_host_->FinishAllRendering(); 585 layer_tree_host_->FinishAllRendering();
597 } 586 }
598 587
599 void RenderWidgetCompositor::setDeferCommits(bool defer_commits) { 588 void RenderWidgetCompositor::setDeferCommits(bool defer_commits) {
600 layer_tree_host_->SetDeferCommits(defer_commits); 589 layer_tree_host_->SetDeferCommits(defer_commits);
601 } 590 }
602 591
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
676 void RenderWidgetCompositor::DidCommitAndDrawFrame() { 665 void RenderWidgetCompositor::DidCommitAndDrawFrame() {
677 widget_->didCommitAndDrawCompositorFrame(); 666 widget_->didCommitAndDrawCompositorFrame();
678 } 667 }
679 668
680 void RenderWidgetCompositor::DidCompleteSwapBuffers() { 669 void RenderWidgetCompositor::DidCompleteSwapBuffers() {
681 widget_->didCompleteSwapBuffers(); 670 widget_->didCompleteSwapBuffers();
682 if (!threaded_) 671 if (!threaded_)
683 widget_->OnSwapBuffersComplete(); 672 widget_->OnSwapBuffersComplete();
684 } 673 }
685 674
686 void RenderWidgetCompositor::ScheduleComposite() {
687 if (!suppress_schedule_composite_)
688 widget_->scheduleComposite();
689 }
690
691 void RenderWidgetCompositor::ScheduleAnimation() { 675 void RenderWidgetCompositor::ScheduleAnimation() {
692 widget_->scheduleAnimation(); 676 widget_->scheduleAnimation();
enne (OOO) 2014/07/02 21:19:43 Unfortunately, I had to bring this back to get Web
693 } 677 }
694 678
695 void RenderWidgetCompositor::DidPostSwapBuffers() { 679 void RenderWidgetCompositor::DidPostSwapBuffers() {
696 widget_->OnSwapBuffersPosted(); 680 widget_->OnSwapBuffersPosted();
697 } 681 }
698 682
699 void RenderWidgetCompositor::DidAbortSwapBuffers() { 683 void RenderWidgetCompositor::DidAbortSwapBuffers() {
700 widget_->OnSwapBuffersAborted(); 684 widget_->OnSwapBuffersAborted();
701 } 685 }
702 686
703 void RenderWidgetCompositor::RateLimitSharedMainThreadContext() { 687 void RenderWidgetCompositor::RateLimitSharedMainThreadContext() {
704 cc::ContextProvider* provider = 688 cc::ContextProvider* provider =
705 RenderThreadImpl::current()->SharedMainThreadContextProvider().get(); 689 RenderThreadImpl::current()->SharedMainThreadContextProvider().get();
706 provider->ContextGL()->RateLimitOffscreenContextCHROMIUM(); 690 provider->ContextGL()->RateLimitOffscreenContextCHROMIUM();
707 } 691 }
708 692
709 } // namespace content 693 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698