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

Unified Diff: cc/trees/single_thread_proxy.cc

Issue 14960006: cc: Don't do CompositeAndReadback when using DelegatingRenderer. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 7 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 side-by-side diff with in-line comments
Download patch
Index: cc/trees/single_thread_proxy.cc
diff --git a/cc/trees/single_thread_proxy.cc b/cc/trees/single_thread_proxy.cc
index 8e7d46671e2a0f1cc7c9ae2dd40388959e6c8fc0..6e3aff1fd21fbe2bddd826fd22ab1b4f77e782b8 100644
--- a/cc/trees/single_thread_proxy.cc
+++ b/cc/trees/single_thread_proxy.cc
@@ -60,6 +60,7 @@ bool SingleThreadProxy::CompositeAndReadback(void* pixels, gfx::Rect rect) {
LayerTreeHostImpl::FrameData frame;
if (!CommitAndComposite(base::TimeTicks::Now(),
device_viewport_damage_rect,
+ true, // for_readback
&frame))
return false;
@@ -337,6 +338,7 @@ void SingleThreadProxy::CompositeImmediately(base::TimeTicks frame_begin_time) {
LayerTreeHostImpl::FrameData frame;
if (CommitAndComposite(frame_begin_time,
device_viewport_damage_rect,
+ false, // for_readback
&frame)) {
layer_tree_host_impl_->SwapBuffers(frame);
DidSwapFrame();
@@ -370,6 +372,7 @@ void SingleThreadProxy::ForceSerializeOnSwapBuffers() {
bool SingleThreadProxy::CommitAndComposite(
base::TimeTicks frame_begin_time,
gfx::Rect device_viewport_damage_rect,
+ bool for_readback,
LayerTreeHostImpl::FrameData* frame) {
DCHECK(Proxy::IsMainThread());
@@ -397,6 +400,7 @@ bool SingleThreadProxy::CommitAndComposite(
bool result = DoComposite(offscreen_context_provider,
frame_begin_time,
device_viewport_damage_rect,
+ for_readback,
frame);
layer_tree_host_->DidBeginFrame();
return result;
@@ -412,6 +416,7 @@ bool SingleThreadProxy::DoComposite(
scoped_refptr<cc::ContextProvider> offscreen_context_provider,
base::TimeTicks frame_begin_time,
gfx::Rect device_viewport_damage_rect,
+ bool for_readback,
LayerTreeHostImpl::FrameData* frame) {
DCHECK(!layer_tree_host_->output_surface_lost());
@@ -423,11 +428,13 @@ bool SingleThreadProxy::DoComposite(
layer_tree_host_impl_->resource_provider()->
set_offscreen_context_provider(offscreen_context_provider);
+ bool can_do_readback = layer_tree_host_impl_->renderer()->CanReadPixels();
+
// We guard PrepareToDraw() with CanDraw() because it always returns a valid
// frame, so can only be used when such a frame is possible. Since
// DrawLayers() depends on the result of PrepareToDraw(), it is guarded on
// CanDraw() as well.
- if (!ShouldComposite()) {
+ if (!ShouldComposite() || (for_readback && !can_do_readback)) {
layer_tree_host_impl_->UpdateBackgroundAnimateTicking(true);
return false;
}

Powered by Google App Engine
This is Rietveld 408576698