Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(578)

Unified Diff: cc/layers/picture_layer_impl_unittest.cc

Issue 2565643002: [5/5] Add translated rasterization for PictureLayerImpl (Closed)
Patch Set: forgot to update cc_perftests too Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/layers/picture_layer_impl_perftest.cc ('k') | cc/test/fake_picture_layer_impl.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « cc/layers/picture_layer_impl_perftest.cc ('k') | cc/test/fake_picture_layer_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698