| Index: cc/layers/picture_layer_impl_unittest.cc
|
| diff --git a/cc/layers/picture_layer_impl_unittest.cc b/cc/layers/picture_layer_impl_unittest.cc
|
| index 6e326454a1208c04342fd16edda5121b153c899a..d9c825906cc7cb8fd3c94608eeaceb315fbc528f 100644
|
| --- a/cc/layers/picture_layer_impl_unittest.cc
|
| +++ b/cc/layers/picture_layer_impl_unittest.cc
|
| @@ -417,7 +417,8 @@ TEST_F(PictureLayerImplTest, ClonePartialInvalidation) {
|
| Region());
|
| ActivateTree();
|
| // Add a unique tiling on the active tree.
|
| - PictureLayerTiling* tiling = active_layer()->AddTiling(3.f);
|
| + PictureLayerTiling* tiling =
|
| + active_layer()->AddTiling(gfx::AxisTransform2d(3.f, gfx::Vector2dF()));
|
| tiling->set_resolution(HIGH_RESOLUTION);
|
| tiling->CreateAllTilesForTesting();
|
|
|
| @@ -3937,11 +3938,21 @@ TEST_F(OcclusionTrackingPictureLayerImplTest, OcclusionForDifferentScales) {
|
|
|
| pending_layer()->tilings()->RemoveAllTilings();
|
| float low_res_factor = host_impl()->settings().low_res_contents_scale_factor;
|
| - pending_layer()->AddTiling(low_res_factor)->set_resolution(LOW_RESOLUTION);
|
| - pending_layer()->AddTiling(0.3f)->set_resolution(HIGH_RESOLUTION);
|
| - pending_layer()->AddTiling(0.7f)->set_resolution(HIGH_RESOLUTION);
|
| - pending_layer()->AddTiling(1.0f)->set_resolution(HIGH_RESOLUTION);
|
| - pending_layer()->AddTiling(2.0f)->set_resolution(HIGH_RESOLUTION);
|
| + pending_layer()
|
| + ->AddTiling(gfx::AxisTransform2d(low_res_factor, gfx::Vector2dF()))
|
| + ->set_resolution(LOW_RESOLUTION);
|
| + pending_layer()
|
| + ->AddTiling(gfx::AxisTransform2d(0.3f, gfx::Vector2dF()))
|
| + ->set_resolution(HIGH_RESOLUTION);
|
| + pending_layer()
|
| + ->AddTiling(gfx::AxisTransform2d(0.7f, gfx::Vector2dF()))
|
| + ->set_resolution(HIGH_RESOLUTION);
|
| + pending_layer()
|
| + ->AddTiling(gfx::AxisTransform2d(1.0f, gfx::Vector2dF()))
|
| + ->set_resolution(HIGH_RESOLUTION);
|
| + pending_layer()
|
| + ->AddTiling(gfx::AxisTransform2d(2.0f, gfx::Vector2dF()))
|
| + ->set_resolution(HIGH_RESOLUTION);
|
|
|
| RebuildPropertyTreesOnPendingTree();
|
| host_impl()->AdvanceToNextFrame(base::TimeDelta::FromMilliseconds(1));
|
| @@ -5008,5 +5019,135 @@ TEST_F(PictureLayerImplTest, CompositedImageRasterScaleChanges) {
|
| }
|
| }
|
|
|
| +TEST_F(PictureLayerImplTest, ChangeRasterTranslationNukePendingLayerTiles) {
|
| + gfx::Size layer_bounds(200, 200);
|
| + gfx::Size tile_size(256, 256);
|
| + SetupDefaultTreesWithFixedTileSize(layer_bounds, tile_size, Region());
|
| + pending_layer()->SetUseTransformedRasterization(true);
|
| +
|
| + // Start with scale & translation of * 2.25 + (0.25, 0.5).
|
| + SetupDrawProperties(pending_layer(), 2.25f, 1.5f, 1.f, 2.25f, 2.25f, false);
|
| + gfx::Transform translate1;
|
| + translate1.Translate(0.25f, 0.5f);
|
| + pending_layer()->draw_properties().screen_space_transform.ConcatTransform(
|
| + translate1);
|
| + pending_layer()->draw_properties().target_space_transform =
|
| + pending_layer()->draw_properties().screen_space_transform;
|
| + pending_layer()->UpdateTiles();
|
| + ASSERT_EQ(1u, pending_layer()->tilings()->num_tilings());
|
| + {
|
| + PictureLayerTiling* tiling = pending_layer()->tilings()->tiling_at(0);
|
| + EXPECT_EQ(gfx::AxisTransform2d(2.25f, gfx::Vector2dF(0.25f, 0.5f)),
|
| + tiling->raster_transform());
|
| + EXPECT_EQ(4u, tiling->AllTilesForTesting().size());
|
| + for (auto* tile : tiling->AllTilesForTesting())
|
| + EXPECT_EQ(tile->raster_transform(), tiling->raster_transform());
|
| + }
|
| +
|
| + // Change to scale & translation of * 2.25 + (0.75, 0.25).
|
| + // Verifies there is a hysteresis that simple layer movement doesn't update
|
| + // raster translation.
|
| + SetupDrawProperties(pending_layer(), 2.25f, 1.5f, 1.f, 2.25f, 2.25f, false);
|
| + gfx::Transform translate2;
|
| + translate2.Translate(0.75f, 0.25f);
|
| + pending_layer()->draw_properties().screen_space_transform.ConcatTransform(
|
| + translate2);
|
| + pending_layer()->draw_properties().target_space_transform =
|
| + pending_layer()->draw_properties().screen_space_transform;
|
| + pending_layer()->UpdateTiles();
|
| + ASSERT_EQ(1u, pending_layer()->tilings()->num_tilings());
|
| + {
|
| + PictureLayerTiling* tiling = pending_layer()->tilings()->tiling_at(0);
|
| + EXPECT_EQ(gfx::AxisTransform2d(2.25f, gfx::Vector2dF(0.25f, 0.5f)),
|
| + tiling->raster_transform());
|
| + EXPECT_EQ(4u, tiling->AllTilesForTesting().size());
|
| + for (auto* tile : tiling->AllTilesForTesting())
|
| + EXPECT_EQ(tile->raster_transform(), tiling->raster_transform());
|
| + }
|
| +
|
| + // Now change the device scale factor but keep the same total scale.
|
| + // Our policy recomputes raster translation only if raster scale is
|
| + // recomputed. Even if the recomputed scale remains the same, we still
|
| + // updates to new translation value. Old tiles with the same scale but
|
| + // different translation would become non-ideal and deleted on pending
|
| + // layers (in fact, delete ahead due to slot conflict with the new tiling).
|
| + SetupDrawProperties(pending_layer(), 2.25f, 1.0f, 1.f, 2.25f, 2.25f, false);
|
| + pending_layer()->draw_properties().screen_space_transform.ConcatTransform(
|
| + translate2);
|
| + pending_layer()->draw_properties().target_space_transform =
|
| + pending_layer()->draw_properties().screen_space_transform;
|
| + pending_layer()->UpdateTiles();
|
| + ASSERT_EQ(1u, pending_layer()->tilings()->num_tilings());
|
| + {
|
| + PictureLayerTiling* tiling = pending_layer()->tilings()->tiling_at(0);
|
| + EXPECT_EQ(gfx::AxisTransform2d(2.25f, gfx::Vector2dF(0.75f, 0.25f)),
|
| + tiling->raster_transform());
|
| + EXPECT_EQ(4u, tiling->AllTilesForTesting().size());
|
| + for (auto* tile : tiling->AllTilesForTesting())
|
| + EXPECT_EQ(tile->raster_transform(), tiling->raster_transform());
|
| + }
|
| +}
|
| +
|
| +TEST_F(PictureLayerImplTest, ChangeRasterTranslationNukeActiveLayerTiles) {
|
| + gfx::Size layer_bounds(200, 200);
|
| + gfx::Size tile_size(256, 256);
|
| + SetupDefaultTreesWithFixedTileSize(layer_bounds, tile_size, Region());
|
| + active_layer()->SetUseTransformedRasterization(true);
|
| + pending_layer()->SetUseTransformedRasterization(true);
|
| +
|
| + // Start with scale & translation of * 2.25 + (0.25, 0.5) on the active layer.
|
| + SetupDrawProperties(active_layer(), 2.25f, 1.5f, 1.f, 2.25f, 2.25f, false);
|
| + gfx::Transform translate1;
|
| + translate1.Translate(0.25f, 0.5f);
|
| + active_layer()->draw_properties().screen_space_transform.ConcatTransform(
|
| + translate1);
|
| + active_layer()->draw_properties().target_space_transform =
|
| + active_layer()->draw_properties().screen_space_transform;
|
| + active_layer()->UpdateTiles();
|
| + ASSERT_EQ(3u, active_layer()->tilings()->num_tilings());
|
| + {
|
| + PictureLayerTiling* tiling =
|
| + active_layer()->tilings()->FindTilingWithScaleKey(2.25f);
|
| + EXPECT_EQ(gfx::AxisTransform2d(2.25f, gfx::Vector2dF(0.25f, 0.5f)),
|
| + tiling->raster_transform());
|
| + EXPECT_EQ(4u, tiling->AllTilesForTesting().size());
|
| + for (auto* tile : tiling->AllTilesForTesting())
|
| + EXPECT_EQ(tile->raster_transform(), tiling->raster_transform());
|
| + }
|
| +
|
| + // Create a pending layer with the same scale but different translation.
|
| + SetupDrawProperties(pending_layer(), 2.25f, 1.5f, 1.f, 2.25f, 2.25f, false);
|
| + gfx::Transform translate2;
|
| + translate2.Translate(0.75f, 0.25f);
|
| + pending_layer()->draw_properties().screen_space_transform.ConcatTransform(
|
| + translate2);
|
| + pending_layer()->draw_properties().target_space_transform =
|
| + pending_layer()->draw_properties().screen_space_transform;
|
| + pending_layer()->UpdateTiles();
|
| + ASSERT_EQ(1u, pending_layer()->tilings()->num_tilings());
|
| + {
|
| + PictureLayerTiling* tiling = pending_layer()->tilings()->tiling_at(0);
|
| + EXPECT_EQ(gfx::AxisTransform2d(2.25f, gfx::Vector2dF(0.75f, 0.25f)),
|
| + tiling->raster_transform());
|
| + EXPECT_EQ(4u, tiling->AllTilesForTesting().size());
|
| + for (auto* tile : tiling->AllTilesForTesting())
|
| + EXPECT_EQ(tile->raster_transform(), tiling->raster_transform());
|
| + }
|
| +
|
| + // Now push to the active layer.
|
| + // Verifies the active tiles get evicted due to slot conflict.
|
| + host_impl()->ActivateSyncTree();
|
| + ASSERT_EQ(3u, active_layer()->tilings()->num_tilings());
|
| + {
|
| + PictureLayerTiling* tiling =
|
| + active_layer()->tilings()->FindTilingWithScaleKey(2.25f);
|
| + EXPECT_EQ(gfx::AxisTransform2d(2.25f, gfx::Vector2dF(0.75f, 0.25f)),
|
| + tiling->raster_transform());
|
| + EXPECT_EQ(4u, tiling->AllTilesForTesting().size());
|
| + for (auto* tile : tiling->AllTilesForTesting())
|
| + EXPECT_EQ(tile->raster_transform(), tiling->raster_transform());
|
| + }
|
| +}
|
| +
|
| } // namespace
|
| } // namespace cc
|
|
|