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 bdbe172213f67d122434c37a303c3dcd07c8a83e..9085a71a1e42c9e2febe59149a7b51553973da73 100644 |
--- a/cc/layers/picture_layer_impl_unittest.cc |
+++ b/cc/layers/picture_layer_impl_unittest.cc |
@@ -1727,6 +1727,60 @@ TEST_F(PictureLayerImplTest, SyncTilingAfterReleaseResource) { |
EXPECT_EQ(HIGH_RESOLUTION, high_res->resolution()); |
} |
+TEST_F(PictureLayerImplTest, HighResCreatedWhenBoundsShrink) { |
+ SetupDefaultTrees(gfx::Size(10, 10)); |
+ host_impl_.active_tree()->UpdateDrawProperties(); |
+ EXPECT_FALSE(host_impl_.active_tree()->needs_update_draw_properties()); |
+ |
+ float result_scale_x; |
+ float result_scale_y; |
+ gfx::Size result_bounds; |
+ active_layer_->CalculateContentsScale(0.5f, |
+ 0.5f, |
+ 0.5f, |
+ 0.5f, |
+ false, |
+ &result_scale_x, |
+ &result_scale_y, |
+ &result_bounds); |
+ active_layer_->tilings()->RemoveAllTilings(); |
+ PictureLayerTiling* tiling = active_layer_->tilings()->AddTiling(0.5f); |
+ active_layer_->tilings()->AddTiling(1.5f); |
+ active_layer_->tilings()->AddTiling(0.25f); |
+ tiling->set_resolution(HIGH_RESOLUTION); |
+ |
+ // Sanity checks. |
+ ASSERT_EQ(3u, active_layer_->tilings()->num_tilings()); |
+ ASSERT_EQ(tiling, active_layer_->tilings()->TilingAtScale(0.5f)); |
+ |
+ // Now, set the bounds to be 1x1 (so that minimum contents scale becomes |
+ // 1.0f). Note that we should also ensure that the pending layer needs post |
+ // commit initialization, since this is what would happen during commit. In |
+ // other words we want the pending layer to sync from the active layer. |
+ pending_layer_->SetBounds(gfx::Size(1, 1)); |
+ pending_layer_->SetNeedsPostCommitInitialization(); |
+ pending_layer_->set_twin_layer(NULL); |
+ active_layer_->set_twin_layer(NULL); |
+ EXPECT_TRUE(pending_layer_->needs_post_commit_initialization()); |
+ |
+ // Update the draw properties: sync from active tree should happen here. |
+ host_impl_.pending_tree()->UpdateDrawProperties(); |
+ |
+ // Another sanity check. |
+ ASSERT_EQ(1.f, pending_layer_->MinimumContentsScale()); |
+ |
+ // Now we should've synced 1.5f tiling, since that's the only one that doesn't |
+ // violate minimum contents scale. At the same time, we should've created a |
+ // new high res tiling at scale 1.0f. |
+ EXPECT_EQ(2u, pending_layer_->tilings()->num_tilings()); |
+ ASSERT_TRUE(pending_layer_->tilings()->TilingAtScale(1.0f)); |
+ EXPECT_EQ(HIGH_RESOLUTION, |
+ pending_layer_->tilings()->TilingAtScale(1.0f)->resolution()); |
+ ASSERT_TRUE(pending_layer_->tilings()->TilingAtScale(1.5f)); |
+ EXPECT_EQ(NON_IDEAL_RESOLUTION, |
+ pending_layer_->tilings()->TilingAtScale(1.5f)->resolution()); |
+} |
+ |
TEST_F(PictureLayerImplTest, NoLowResTilingWithGpuRasterization) { |
gfx::Size default_tile_size(host_impl_.settings().default_tile_size); |
gfx::Size layer_bounds(default_tile_size.width() * 4, |