Index: cc/test/layer_tree_host_common_test.cc |
diff --git a/cc/test/layer_tree_host_common_test.cc b/cc/test/layer_tree_host_common_test.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..06c9425bbf963f9a7cfa92f687d2c9354e486403 |
--- /dev/null |
+++ b/cc/test/layer_tree_host_common_test.cc |
@@ -0,0 +1,234 @@ |
+// Copyright 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "cc/test/layer_tree_host_common_test.h" |
+ |
+#include <stddef.h> |
+ |
+#include "cc/layers/layer.h" |
+#include "cc/layers/layer_impl.h" |
+#include "cc/test/fake_layer_tree_host.h" |
+#include "cc/trees/draw_property_utils.h" |
+#include "cc/trees/layer_tree_host_common.h" |
+#include "cc/trees/property_tree_builder.h" |
+ |
+namespace cc { |
+LayerTreeHostCommonTestBase::LayerTreeHostCommonTestBase( |
+ const LayerTreeSettings& settings) |
+ : LayerTestCommon::LayerImplTest(settings) {} |
+ |
+LayerTreeHostCommonTestBase::~LayerTreeHostCommonTestBase() {} |
+ |
+void LayerTreeHostCommonTestBase::SetLayerPropertiesForTesting( |
+ Layer* layer, |
+ const gfx::Transform& transform, |
+ const gfx::Point3F& transform_origin, |
+ const gfx::PointF& position, |
+ const gfx::Size& bounds, |
+ bool flatten_transform, |
+ bool is_3d_sorted) { |
+ SetLayerPropertiesForTestingInternal(layer, transform, position, bounds, |
+ is_3d_sorted); |
+ layer->SetTransformOrigin(transform_origin); |
+ layer->SetShouldFlattenTransform(flatten_transform); |
+} |
+ |
+void LayerTreeHostCommonTestBase::SetLayerPropertiesForTesting( |
+ LayerImpl* layer, |
+ const gfx::Transform& transform, |
+ const gfx::Point3F& transform_origin, |
+ const gfx::PointF& position, |
+ const gfx::Size& bounds, |
+ bool flatten_transform, |
+ bool is_3d_sorted) { |
+ SetLayerPropertiesForTestingInternal(layer, transform, position, bounds, |
+ is_3d_sorted); |
+ layer->test_properties()->transform_origin = transform_origin; |
+ layer->test_properties()->should_flatten_transform = flatten_transform; |
+} |
+ |
+void LayerTreeHostCommonTestBase::SetLayerPropertiesForTesting( |
+ LayerImpl* layer, |
+ const gfx::Transform& transform, |
+ const gfx::Point3F& transform_origin, |
+ const gfx::PointF& position, |
+ const gfx::Size& bounds, |
+ bool flatten_transform, |
+ bool is_3d_sorted, |
+ bool create_render_surface) { |
+ SetLayerPropertiesForTestingInternal(layer, transform, position, bounds, |
+ is_3d_sorted); |
+ layer->test_properties()->transform_origin = transform_origin; |
+ layer->test_properties()->should_flatten_transform = flatten_transform; |
+ if (create_render_surface) { |
+ layer->test_properties()->force_render_surface = true; |
+ } |
+} |
+ |
+void LayerTreeHostCommonTestBase::ExecuteCalculateDrawProperties( |
+ Layer* root_layer, |
+ float device_scale_factor, |
+ float page_scale_factor, |
+ Layer* page_scale_layer) { |
+ PropertyTreeBuilder::PreCalculateMetaInformation(root_layer); |
+ |
+ EXPECT_TRUE(page_scale_layer || (page_scale_factor == 1.f)); |
+ gfx::Transform identity_matrix; |
+ gfx::Size device_viewport_size = |
+ gfx::Size(root_layer->bounds().width() * device_scale_factor, |
+ root_layer->bounds().height() * device_scale_factor); |
+ |
+ // We are probably not testing what is intended if the root_layer bounds are |
+ // empty. |
+ DCHECK(!root_layer->bounds().IsEmpty()); |
+ LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs( |
+ root_layer, device_viewport_size); |
+ inputs.device_scale_factor = device_scale_factor; |
+ inputs.page_scale_factor = page_scale_factor; |
+ inputs.page_scale_layer = page_scale_layer; |
+ LayerTreeHostCommon::CalculateDrawPropertiesForTesting(&inputs); |
+} |
+ |
+void LayerTreeHostCommonTestBase:: |
+ ExecuteCalculateDrawPropertiesWithPropertyTrees(Layer* root_layer) { |
+ DCHECK(root_layer->layer_tree_host()); |
+ PropertyTreeBuilder::PreCalculateMetaInformation(root_layer); |
+ |
+ gfx::Transform identity_transform; |
+ |
+ bool can_render_to_separate_surface = true; |
+ |
+ Layer* page_scale_layer = root_layer->GetLayerTree()->page_scale_layer(); |
+ Layer* inner_viewport_scroll_layer = |
+ root_layer->GetLayerTree()->inner_viewport_scroll_layer(); |
+ Layer* outer_viewport_scroll_layer = |
+ root_layer->GetLayerTree()->outer_viewport_scroll_layer(); |
+ Layer* overscroll_elasticity_layer = |
+ root_layer->GetLayerTree()->overscroll_elasticity_layer(); |
+ gfx::Vector2dF elastic_overscroll = |
+ root_layer->layer_tree_host()->elastic_overscroll(); |
+ float page_scale_factor = 1.f; |
+ float device_scale_factor = 1.f; |
+ gfx::Size device_viewport_size = |
+ gfx::Size(root_layer->bounds().width() * device_scale_factor, |
+ root_layer->bounds().height() * device_scale_factor); |
+ PropertyTrees* property_trees = |
+ root_layer->layer_tree_host()->property_trees(); |
+ update_layer_list_.clear(); |
+ PropertyTreeBuilder::BuildPropertyTrees( |
+ root_layer, page_scale_layer, inner_viewport_scroll_layer, |
+ outer_viewport_scroll_layer, overscroll_elasticity_layer, |
+ elastic_overscroll, page_scale_factor, device_scale_factor, |
+ gfx::Rect(device_viewport_size), identity_transform, property_trees); |
+ draw_property_utils::UpdatePropertyTrees(property_trees, |
+ can_render_to_separate_surface); |
+ draw_property_utils::FindLayersThatNeedUpdates( |
+ root_layer->layer_tree_host(), property_trees->transform_tree, |
+ property_trees->effect_tree, &update_layer_list_); |
+ draw_property_utils::ComputeVisibleRectsForTesting( |
+ property_trees, can_render_to_separate_surface, &update_layer_list_); |
+} |
+ |
+void LayerTreeHostCommonTestBase:: |
+ ExecuteCalculateDrawPropertiesWithPropertyTrees(LayerImpl* root_layer) { |
+ DCHECK(root_layer->layer_tree_impl()); |
+ PropertyTreeBuilder::PreCalculateMetaInformationForTesting(root_layer); |
+ |
+ gfx::Transform identity_transform; |
+ |
+ bool can_render_to_separate_surface = true; |
+ |
+ LayerImpl* page_scale_layer = nullptr; |
+ LayerImpl* inner_viewport_scroll_layer = |
+ root_layer->layer_tree_impl()->InnerViewportScrollLayer(); |
+ LayerImpl* outer_viewport_scroll_layer = |
+ root_layer->layer_tree_impl()->OuterViewportScrollLayer(); |
+ LayerImpl* overscroll_elasticity_layer = |
+ root_layer->layer_tree_impl()->OverscrollElasticityLayer(); |
+ gfx::Vector2dF elastic_overscroll = |
+ root_layer->layer_tree_impl()->elastic_overscroll()->Current( |
+ root_layer->layer_tree_impl()->IsActiveTree()); |
+ float page_scale_factor = 1.f; |
+ float device_scale_factor = 1.f; |
+ gfx::Size device_viewport_size = |
+ gfx::Size(root_layer->bounds().width() * device_scale_factor, |
+ root_layer->bounds().height() * device_scale_factor); |
+ update_layer_list_impl_.reset(new LayerImplList); |
+ root_layer->layer_tree_impl()->BuildLayerListForTesting(); |
+ draw_property_utils::BuildPropertyTreesAndComputeVisibleRects( |
+ root_layer, page_scale_layer, inner_viewport_scroll_layer, |
+ outer_viewport_scroll_layer, overscroll_elasticity_layer, |
+ elastic_overscroll, page_scale_factor, device_scale_factor, |
+ gfx::Rect(device_viewport_size), identity_transform, |
+ can_render_to_separate_surface, |
+ root_layer->layer_tree_impl()->property_trees(), |
+ update_layer_list_impl_.get()); |
+} |
+ |
+void LayerTreeHostCommonTestBase::ExecuteCalculateDrawProperties( |
+ LayerImpl* root_layer, |
+ float device_scale_factor, |
+ float page_scale_factor, |
+ LayerImpl* page_scale_layer) { |
+ if (device_scale_factor != |
+ root_layer->layer_tree_impl()->device_scale_factor()) |
+ root_layer->layer_tree_impl()->property_trees()->needs_rebuild = true; |
+ |
+ root_layer->layer_tree_impl()->SetDeviceScaleFactor(device_scale_factor); |
+ |
+ EXPECT_TRUE(page_scale_layer || (page_scale_factor == 1.f)); |
+ |
+ gfx::Transform identity_matrix; |
+ gfx::Size device_viewport_size = |
+ gfx::Size(root_layer->bounds().width() * device_scale_factor, |
+ root_layer->bounds().height() * device_scale_factor); |
+ |
+ render_surface_layer_list_impl_.reset(new LayerImplList); |
+ |
+ // We are probably not testing what is intended if the root_layer bounds are |
+ // empty. |
+ DCHECK(!root_layer->bounds().IsEmpty()); |
+ LayerTreeHostCommon::CalcDrawPropsImplInputsForTesting inputs( |
+ root_layer, device_viewport_size, render_surface_layer_list_impl_.get()); |
+ inputs.device_scale_factor = device_scale_factor; |
+ inputs.page_scale_factor = page_scale_factor; |
+ inputs.page_scale_layer = page_scale_layer; |
+ inputs.can_adjust_raster_scales = true; |
+ |
+ LayerTreeHostCommon::CalculateDrawPropertiesForTesting(&inputs); |
+} |
+ |
+void LayerTreeHostCommonTestBase:: |
+ ExecuteCalculateDrawPropertiesWithoutSeparateSurfaces( |
+ LayerImpl* root_layer) { |
+ gfx::Transform identity_matrix; |
+ gfx::Size device_viewport_size = |
+ gfx::Size(root_layer->bounds().width(), root_layer->bounds().height()); |
+ render_surface_layer_list_impl_.reset(new LayerImplList); |
+ |
+ DCHECK(!root_layer->bounds().IsEmpty()); |
+ LayerTreeHostCommon::CalcDrawPropsImplInputsForTesting inputs( |
+ root_layer, device_viewport_size, render_surface_layer_list_impl_.get()); |
+ inputs.can_adjust_raster_scales = true; |
+ inputs.can_render_to_separate_surface = false; |
+ |
+ LayerTreeHostCommon::CalculateDrawPropertiesForTesting(&inputs); |
+} |
+ |
+bool LayerTreeHostCommonTestBase::UpdateLayerListContains(int id) const { |
+ for (size_t i = 0; i < update_layer_list_.size(); ++i) { |
+ if (update_layer_list_[i]->id() == id) |
+ return true; |
+ } |
+ return false; |
+} |
+ |
+LayerTreeHostCommonTest::LayerTreeHostCommonTest() |
+ : LayerTreeHostCommonTestBase(LayerTreeHostCommonTestSettings()) {} |
+ |
+LayerTreeHostCommonTest::LayerTreeHostCommonTest( |
+ const LayerTreeSettings& settings) |
+ : LayerTreeHostCommonTestBase(settings) {} |
+ |
+} // namespace cc |