Index: cc/trees/layer_tree_host_impl.cc |
diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc |
index 9063caf66d67f57c2dad462ec1ec9320663c8369..13a8597a737bfb19ef4c69e148563357741747cb 100644 |
--- a/cc/trees/layer_tree_host_impl.cc |
+++ b/cc/trees/layer_tree_host_impl.cc |
@@ -697,11 +697,14 @@ static void AppendQuadsToFillScreen( |
} |
} |
-bool LayerTreeHostImpl::CalculateRenderPasses(FrameData* frame) { |
+DrawSwapReadbackResult::DrawResult LayerTreeHostImpl::CalculateRenderPasses( |
+ FrameData* frame) { |
DCHECK(frame->render_passes.empty()); |
- if (!CanDraw() || !active_tree_->root_layer()) |
- return false; |
+ if (!CanDraw()) |
+ return DrawSwapReadbackResult::DRAW_ABORTED_CANT_DRAW; |
+ if (!active_tree_->root_layer()) |
+ return DrawSwapReadbackResult::DRAW_ABORTED_NO_TREE; |
TrackDamageForAllSurfaces(active_tree_->root_layer(), |
*frame->render_surface_layer_list); |
@@ -725,7 +728,7 @@ bool LayerTreeHostImpl::CalculateRenderPasses(FrameData* frame) { |
DCHECK_EQ(0u, active_tree_->LayersWithCopyOutputRequest().size()); |
DCHECK(!output_surface_->capabilities() |
.draw_and_swap_full_viewport_every_frame); |
- return true; |
+ return DrawSwapReadbackResult::DID_DRAW; |
} |
TRACE_EVENT1("cc", |
@@ -779,7 +782,8 @@ bool LayerTreeHostImpl::CalculateRenderPasses(FrameData* frame) { |
// still draw the frame. However when the layer being checkerboarded is moving |
// due to an impl-animation, we drop the frame to avoid flashing due to the |
// texture suddenly appearing in the future. |
- bool draw_frame = true; |
+ DrawSwapReadbackResult::DrawResult draw_result = |
+ DrawSwapReadbackResult::DID_DRAW; |
// When we have a copy request for a layer, we need to draw no matter |
// what, as the layer may disappear after this frame. |
bool have_copy_request = false; |
@@ -865,8 +869,10 @@ bool LayerTreeHostImpl::CalculateRenderPasses(FrameData* frame) { |
bool layer_has_animating_transform = |
it->screen_space_transform_is_animating() || |
it->draw_transform_is_animating(); |
- if (layer_has_animating_transform) |
- draw_frame = false; |
+ if (layer_has_animating_transform) { |
+ draw_result = |
+ DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS; |
+ } |
} |
if (append_quads_data.had_incomplete_tile) |
@@ -877,7 +883,7 @@ bool LayerTreeHostImpl::CalculateRenderPasses(FrameData* frame) { |
if (have_copy_request || |
output_surface_->capabilities().draw_and_swap_full_viewport_every_frame) |
- draw_frame = true; |
+ draw_result = DrawSwapReadbackResult::DID_DRAW; |
#ifndef NDEBUG |
for (size_t i = 0; i < frame->render_passes.size(); ++i) { |
@@ -901,7 +907,7 @@ bool LayerTreeHostImpl::CalculateRenderPasses(FrameData* frame) { |
occlusion_tracker); |
} |
- if (draw_frame) |
+ if (draw_result == DrawSwapReadbackResult::DID_DRAW) |
occlusion_tracker.overdraw_metrics()->RecordMetrics(this); |
else |
DCHECK(!have_copy_request); |
@@ -926,7 +932,7 @@ bool LayerTreeHostImpl::CalculateRenderPasses(FrameData* frame) { |
if (output_surface_->ForcedDrawToSoftwareDevice()) |
DCHECK_EQ(1u, frame->render_passes.size()); |
- return draw_frame; |
+ return draw_result; |
} |
void LayerTreeHostImpl::MainThreadHasStoppedFlinging() { |
@@ -1078,8 +1084,9 @@ void LayerTreeHostImpl::RemoveRenderPasses(RenderPassCuller culler, |
} |
} |
-bool LayerTreeHostImpl::PrepareToDraw(FrameData* frame, |
- const gfx::Rect& damage_rect) { |
+DrawSwapReadbackResult::DrawResult LayerTreeHostImpl::PrepareToDraw( |
+ FrameData* frame, |
+ const gfx::Rect& damage_rect) { |
TRACE_EVENT1("cc", |
"LayerTreeHostImpl::PrepareToDraw", |
"SourceFrameNumber", |
@@ -1109,15 +1116,16 @@ bool LayerTreeHostImpl::PrepareToDraw(FrameData* frame, |
AddDamageNextUpdate(device_viewport_damage_rect); |
} |
- if (!CalculateRenderPasses(frame)) { |
+ DrawSwapReadbackResult::DrawResult draw_result = CalculateRenderPasses(frame); |
+ if (draw_result != DrawSwapReadbackResult::DID_DRAW) { |
DCHECK(!output_surface_->capabilities() |
.draw_and_swap_full_viewport_every_frame); |
- return false; |
+ return draw_result; |
} |
- // If we return true, then we expect DrawLayers() to be called before this |
+ // If we return DID_DRAW, then we expect DrawLayers() to be called before this |
// function is called again. |
- return true; |
+ return draw_result; |
} |
void LayerTreeHostImpl::EvictTexturesForTesting() { |