Index: cc/trees/layer_tree_host_common.cc |
diff --git a/cc/trees/layer_tree_host_common.cc b/cc/trees/layer_tree_host_common.cc |
index 5bc7c59efd6d292c70dfc75569f89f8173b1eaf9..e3852eea1e05488f6b35e822a48c840d609fd79c 100644 |
--- a/cc/trees/layer_tree_host_common.cc |
+++ b/cc/trees/layer_tree_host_common.cc |
@@ -2485,22 +2485,74 @@ static bool ApproximatelyEqual(const gfx::Transform& a, |
return true; |
} |
-void LayerTreeHostCommon::CalculateDrawProperties( |
- CalcDrawPropsMainInputs* inputs) { |
- UpdateRenderSurfaces(inputs->root_layer, |
- inputs->can_render_to_separate_surface, gfx::Transform(), |
- false); |
- LayerList dummy_layer_list; |
- SubtreeGlobals<Layer> globals; |
- DataForRecursion<Layer> data_for_recursion; |
- ProcessCalcDrawPropsInputs(*inputs, &globals, &data_for_recursion); |
+void VerifyPropertyTreeValues( |
+ LayerTreeHostCommon::CalcDrawPropsMainInputs* inputs) { |
+ LayerIterator<Layer> it, end; |
+ for (it = LayerIterator<Layer>::Begin(inputs->render_surface_layer_list), |
+ end = LayerIterator<Layer>::End(inputs->render_surface_layer_list); |
+ it != end; ++it) { |
+ Layer* current_layer = *it; |
+ if (!it.represents_itself() || !current_layer->DrawsContent()) |
+ continue; |
+ const bool visible_rects_match = |
+ ApproximatelyEqual(current_layer->visible_content_rect(), |
+ current_layer->visible_rect_from_property_trees()); |
+ CHECK(visible_rects_match) |
+ << "expected: " << current_layer->visible_content_rect().ToString() |
+ << " actual: " |
+ << current_layer->visible_rect_from_property_trees().ToString(); |
+ |
+ const bool draw_transforms_match = ApproximatelyEqual( |
+ current_layer->draw_transform(), |
+ DrawTransformFromPropertyTrees(current_layer, |
+ inputs->property_trees->transform_tree)); |
+ CHECK(draw_transforms_match) |
+ << "expected: " << current_layer->draw_transform().ToString() |
+ << " actual: " |
+ << DrawTransformFromPropertyTrees( |
+ current_layer, inputs->property_trees->transform_tree) |
+ .ToString(); |
+ |
+ const bool draw_opacities_match = |
+ current_layer->draw_opacity() == |
+ DrawOpacityFromPropertyTrees(current_layer, |
+ inputs->property_trees->opacity_tree); |
+ CHECK(draw_opacities_match) |
+ << "expected: " << current_layer->draw_opacity() << " actual: " |
+ << DrawOpacityFromPropertyTrees(current_layer, |
+ inputs->property_trees->opacity_tree); |
+ } |
+} |
+ |
+void VerifyPropertyTreeValues( |
+ LayerTreeHostCommon::CalcDrawPropsImplInputs* inputs) { |
+ // TODO(enne): need to synchronize compositor thread changes |
+ // for animation and scrolling to the property trees before these |
+ // can be correct. |
+} |
+ |
+enum PropertyTreeOption { |
+ BUILD_PROPERTY_TREES_IF_NEEDED, |
+ DONT_BUILD_PROPERTY_TREES |
+}; |
+ |
+template <typename LayerType, typename RenderSurfaceLayerListType> |
+void CalculateDrawPropertiesAndVerify(LayerTreeHostCommon::CalcDrawPropsInputs< |
+ LayerType, |
+ RenderSurfaceLayerListType>* inputs, |
+ PropertyTreeOption property_tree_option) { |
+ typename LayerType::LayerListType dummy_layer_list; |
+ SubtreeGlobals<LayerType> globals; |
+ DataForRecursion<LayerType> data_for_recursion; |
+ |
+ ProcessCalcDrawPropsInputs(*inputs, &globals, &data_for_recursion); |
PreCalculateMetaInformationRecursiveData recursive_data; |
PreCalculateMetaInformation(inputs->root_layer, &recursive_data); |
if (!inputs->verify_property_trees) { |
- std::vector<AccumulatedSurfaceState<Layer>> accumulated_surface_state; |
- CalculateDrawPropertiesInternal<Layer>( |
+ std::vector<AccumulatedSurfaceState<LayerType>> accumulated_surface_state; |
+ CalculateDrawPropertiesInternal<LayerType>( |
inputs->root_layer, globals, data_for_recursion, |
inputs->render_surface_layer_list, &dummy_layer_list, |
&accumulated_surface_state, |
@@ -2509,57 +2561,43 @@ void LayerTreeHostCommon::CalculateDrawProperties( |
{ |
TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug.cdp-perf"), |
"LayerTreeHostCommon::CalculateDrawProperties"); |
- std::vector<AccumulatedSurfaceState<Layer>> accumulated_surface_state; |
- CalculateDrawPropertiesInternal<Layer>( |
+ std::vector<AccumulatedSurfaceState<LayerType>> accumulated_surface_state; |
+ CalculateDrawPropertiesInternal<LayerType>( |
inputs->root_layer, globals, data_for_recursion, |
inputs->render_surface_layer_list, &dummy_layer_list, |
&accumulated_surface_state, |
inputs->current_render_surface_layer_list_id); |
} |
- // The translation from layer to property trees is an intermediate state. We |
- // will eventually get these data passed directly to the compositor. |
- { |
- TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug.cdp-perf"), |
- "LayerTreeHostCommon::ComputeVisibleRectsWithPropertyTrees"); |
- ComputeVisibleRectsUsingPropertyTrees( |
- inputs->root_layer, inputs->page_scale_application_layer, |
- inputs->page_scale_factor, inputs->device_scale_factor, |
- gfx::Rect(inputs->device_viewport_size), inputs->device_transform, |
- inputs->property_trees); |
+ // For testing purposes, sometimes property trees need to be built on the |
+ // compositor thread, so this can't just switch on Layer vs LayerImpl, |
+ // even though in practice only the main thread builds property trees. |
+ switch (property_tree_option) { |
+ case BUILD_PROPERTY_TREES_IF_NEEDED: { |
+ // The translation from layer to property trees is an intermediate |
+ // state. We will eventually get these data passed directly to the |
+ // compositor. |
+ TRACE_EVENT0( |
+ TRACE_DISABLED_BY_DEFAULT("cc.debug.cdp-perf"), |
+ "LayerTreeHostCommon::ComputeVisibleRectsWithPropertyTrees"); |
+ BuildPropertyTreesAndComputeVisibleRects( |
+ inputs->root_layer, inputs->page_scale_application_layer, |
+ inputs->page_scale_factor, inputs->device_scale_factor, |
+ gfx::Rect(inputs->device_viewport_size), inputs->device_transform, |
+ inputs->property_trees); |
+ break; |
+ } |
+ case DONT_BUILD_PROPERTY_TREES: { |
+ TRACE_EVENT0( |
+ TRACE_DISABLED_BY_DEFAULT("cc.debug.cdp-perf"), |
+ "LayerTreeHostCommon::ComputeJustVisibleRectsWithPropertyTrees"); |
+ ComputeVisibleRectsUsingPropertyTrees(inputs->root_layer, |
+ inputs->property_trees); |
+ break; |
+ } |
} |
- LayerIterator<Layer> it, end; |
- for (it = LayerIterator<Layer>::Begin(inputs->render_surface_layer_list), |
- end = LayerIterator<Layer>::End(inputs->render_surface_layer_list); |
- it != end; ++it) { |
- Layer* current_layer = *it; |
- if (!it.represents_itself() || !current_layer->DrawsContent()) |
- continue; |
- |
- const bool visible_rects_match = |
- ApproximatelyEqual(current_layer->visible_content_rect(), |
- current_layer->visible_rect_from_property_trees()); |
- CHECK(visible_rects_match) |
- << "expected: " << current_layer->visible_content_rect().ToString() |
- << " actual: " |
- << current_layer->visible_rect_from_property_trees().ToString(); |
- |
- const bool draw_transforms_match = |
- ApproximatelyEqual(current_layer->draw_transform(), |
- current_layer->draw_transform_from_property_trees( |
- inputs->property_trees->transform_tree)); |
- CHECK(draw_transforms_match); |
- |
- const bool draw_opacities_match = |
- current_layer->draw_opacity() == |
- current_layer->DrawOpacityFromPropertyTrees( |
- inputs->property_trees->opacity_tree); |
- CHECK(draw_opacities_match) |
- << "expected: " << current_layer->draw_opacity() << " actual: " |
- << current_layer->DrawOpacityFromPropertyTrees( |
- inputs->property_trees->opacity_tree); |
- } |
+ VerifyPropertyTreeValues(inputs); |
} |
// The dummy layer list should not have been used. |
@@ -2570,29 +2608,21 @@ void LayerTreeHostCommon::CalculateDrawProperties( |
} |
void LayerTreeHostCommon::CalculateDrawProperties( |
- CalcDrawPropsImplInputs* inputs) { |
- LayerImplList dummy_layer_list; |
- SubtreeGlobals<LayerImpl> globals; |
- DataForRecursion<LayerImpl> data_for_recursion; |
- ProcessCalcDrawPropsInputs(*inputs, &globals, &data_for_recursion); |
+ CalcDrawPropsMainInputs* inputs) { |
+ UpdateRenderSurfaces(inputs->root_layer, |
+ inputs->can_render_to_separate_surface, gfx::Transform(), |
+ false); |
+ CalculateDrawPropertiesAndVerify(inputs, BUILD_PROPERTY_TREES_IF_NEEDED); |
+} |
- PreCalculateMetaInformationRecursiveData recursive_data; |
- PreCalculateMetaInformation(inputs->root_layer, &recursive_data); |
- std::vector<AccumulatedSurfaceState<LayerImpl>> accumulated_surface_state; |
- CalculateDrawPropertiesInternal<LayerImpl>( |
- inputs->root_layer, |
- globals, |
- data_for_recursion, |
- inputs->render_surface_layer_list, |
- &dummy_layer_list, |
- &accumulated_surface_state, |
- inputs->current_render_surface_layer_list_id); |
+void LayerTreeHostCommon::CalculateDrawProperties( |
+ CalcDrawPropsImplInputs* inputs) { |
+ CalculateDrawPropertiesAndVerify(inputs, DONT_BUILD_PROPERTY_TREES); |
+} |
- // The dummy layer list should not have been used. |
- DCHECK_EQ(0u, dummy_layer_list.size()); |
- // A root layer render_surface should always exist after |
- // CalculateDrawProperties. |
- DCHECK(inputs->root_layer->render_surface()); |
+void LayerTreeHostCommon::CalculateDrawProperties( |
+ CalcDrawPropsImplInputsForTesting* inputs) { |
+ CalculateDrawPropertiesAndVerify(inputs, BUILD_PROPERTY_TREES_IF_NEEDED); |
} |
PropertyTrees* GetPropertyTrees(Layer* layer, |