| Index: cc/trees/layer_tree_host_unittest_picture.cc
|
| diff --git a/cc/trees/layer_tree_host_unittest_picture.cc b/cc/trees/layer_tree_host_unittest_picture.cc
|
| index fca03807e7b0589670678f304641993e2399d1f5..bb13a32b06e8f9435189e513b23655e71fd108a6 100644
|
| --- a/cc/trees/layer_tree_host_unittest_picture.cc
|
| +++ b/cc/trees/layer_tree_host_unittest_picture.cc
|
| @@ -576,5 +576,105 @@ class LayerTreeHostPictureTestRSLLMembershipWithScale
|
| // compositor thread.
|
| MULTI_THREAD_TEST_F(LayerTreeHostPictureTestRSLLMembershipWithScale);
|
|
|
| +class LayerTreeHostPictureTestForceRecalculateScales
|
| + : public LayerTreeHostPictureTest {
|
| + void SetupTree() override {
|
| + gfx::Size size(100, 100);
|
| + scoped_refptr<Layer> root = Layer::Create();
|
| + root->SetBounds(size);
|
| +
|
| + will_change_layer_ = FakePictureLayer::Create(&client_);
|
| + will_change_layer_->SetHasWillChangeTransformHint(true);
|
| + will_change_layer_->SetBounds(size);
|
| + root->AddChild(will_change_layer_);
|
| +
|
| + normal_layer_ = FakePictureLayer::Create(&client_);
|
| + normal_layer_->SetBounds(size);
|
| + root->AddChild(normal_layer_);
|
| +
|
| + layer_tree()->SetRootLayer(root);
|
| + layer_tree()->SetViewportSize(size);
|
| +
|
| + client_.set_fill_with_nonsolid_color(true);
|
| + client_.set_bounds(size);
|
| + }
|
| +
|
| + void InitializeSettings(LayerTreeSettings* settings) override {
|
| + settings->layer_transforms_should_scale_layer_contents = true;
|
| + }
|
| +
|
| + void BeginTest() override { PostSetNeedsCommitToMainThread(); }
|
| +
|
| + void DrawLayersOnThread(LayerTreeHostImpl* impl) override {
|
| + FakePictureLayerImpl* will_change_layer =
|
| + static_cast<FakePictureLayerImpl*>(
|
| + impl->active_tree()->LayerById(will_change_layer_->id()));
|
| + FakePictureLayerImpl* normal_layer = static_cast<FakePictureLayerImpl*>(
|
| + impl->active_tree()->LayerById(normal_layer_->id()));
|
| +
|
| + switch (impl->sync_tree()->source_frame_number()) {
|
| + case 0:
|
| + // On first commit, both layers are at the default scale.
|
| + ASSERT_EQ(1u, will_change_layer->tilings()->num_tilings());
|
| + EXPECT_EQ(1.f,
|
| + will_change_layer->tilings()->tiling_at(0)->contents_scale());
|
| + ASSERT_EQ(1u, normal_layer->tilings()->num_tilings());
|
| + EXPECT_EQ(1.f, normal_layer->tilings()->tiling_at(0)->contents_scale());
|
| +
|
| + MainThreadTaskRunner()->PostTask(
|
| + FROM_HERE,
|
| + base::Bind(
|
| + &LayerTreeHostPictureTestForceRecalculateScales::ScaleRootUp,
|
| + base::Unretained(this)));
|
| + break;
|
| + case 1:
|
| + // On 2nd commit after scaling up to 2, the normal layer will adjust its
|
| + // scale and the will change layer should not (as it is will change.
|
| + ASSERT_EQ(1u, will_change_layer->tilings()->num_tilings());
|
| + EXPECT_EQ(1.f,
|
| + will_change_layer->tilings()->tiling_at(0)->contents_scale());
|
| + ASSERT_EQ(1u, normal_layer->tilings()->num_tilings());
|
| + EXPECT_EQ(2.f, normal_layer->tilings()->tiling_at(0)->contents_scale());
|
| +
|
| + MainThreadTaskRunner()->PostTask(
|
| + FROM_HERE,
|
| + base::Bind(&LayerTreeHostPictureTestForceRecalculateScales::
|
| + ScaleRootUpAndRecalculateScales,
|
| + base::Unretained(this)));
|
| + break;
|
| + case 2:
|
| + // On 3rd commit, both layers should adjust scales due to forced
|
| + // recalculating.
|
| + ASSERT_EQ(1u, will_change_layer->tilings()->num_tilings());
|
| + EXPECT_EQ(4.f,
|
| + will_change_layer->tilings()->tiling_at(0)->contents_scale());
|
| + ASSERT_EQ(1u, normal_layer->tilings()->num_tilings());
|
| + EXPECT_EQ(4.f, normal_layer->tilings()->tiling_at(0)->contents_scale());
|
| + EndTest();
|
| + break;
|
| + }
|
| + }
|
| +
|
| + void ScaleRootUp() {
|
| + gfx::Transform transform;
|
| + transform.Scale(2, 2);
|
| + layer_tree_host()->GetLayerTree()->root_layer()->SetTransform(transform);
|
| + }
|
| +
|
| + void ScaleRootUpAndRecalculateScales() {
|
| + gfx::Transform transform;
|
| + transform.Scale(4, 4);
|
| + layer_tree_host()->GetLayerTree()->root_layer()->SetTransform(transform);
|
| + layer_tree_host()->SetNeedsRecalculateRasterScales();
|
| + }
|
| +
|
| + void AfterTest() override {}
|
| +
|
| + scoped_refptr<FakePictureLayer> will_change_layer_;
|
| + scoped_refptr<FakePictureLayer> normal_layer_;
|
| +};
|
| +
|
| +SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostPictureTestForceRecalculateScales);
|
| +
|
| } // namespace
|
| } // namespace cc
|
|
|