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 5079c5eec59e15934ccfb7471a278088c5104c0c..12ffcc0717e3281c1ad2f8e2ee1197541e568c40 100644 |
--- a/cc/layers/picture_layer_impl_unittest.cc |
+++ b/cc/layers/picture_layer_impl_unittest.cc |
@@ -152,25 +152,26 @@ class PictureLayerImplTest : public testing::Test { |
void SetContentsScaleOnBothLayers(float contents_scale, |
float device_scale_factor, |
float page_scale_factor, |
+ float maximum_animation_scale_factor, |
bool animating_transform) { |
float result_scale_x, result_scale_y; |
gfx::Size result_bounds; |
- pending_layer_->CalculateContentsScale( |
- contents_scale, |
- device_scale_factor, |
- page_scale_factor, |
- animating_transform, |
- &result_scale_x, |
- &result_scale_y, |
- &result_bounds); |
- active_layer_->CalculateContentsScale( |
- contents_scale, |
- device_scale_factor, |
- page_scale_factor, |
- animating_transform, |
- &result_scale_x, |
- &result_scale_y, |
- &result_bounds); |
+ pending_layer_->CalculateContentsScale(contents_scale, |
+ device_scale_factor, |
+ page_scale_factor, |
+ maximum_animation_scale_factor, |
+ animating_transform, |
+ &result_scale_x, |
+ &result_scale_y, |
+ &result_bounds); |
+ active_layer_->CalculateContentsScale(contents_scale, |
+ device_scale_factor, |
+ page_scale_factor, |
+ maximum_animation_scale_factor, |
+ animating_transform, |
+ &result_scale_x, |
+ &result_scale_y, |
+ &result_bounds); |
} |
void ResetTilingsAndRasterScales() { |
@@ -209,8 +210,14 @@ class PictureLayerImplTest : public testing::Test { |
float result_scale_x, result_scale_y; |
gfx::Size result_bounds; |
- active_layer_->CalculateContentsScale( |
- 1.f, 1.f, 1.f, false, &result_scale_x, &result_scale_y, &result_bounds); |
+ active_layer_->CalculateContentsScale(1.f, |
+ 1.f, |
+ 1.f, |
+ 1.f, |
+ false, |
+ &result_scale_x, |
+ &result_scale_y, |
+ &result_bounds); |
// Add 1x1 rects at the centers of each tile, then re-record pile contents |
active_layer_->tilings()->tiling_at(0)->CreateAllTilesForTesting(); |
@@ -311,6 +318,7 @@ TEST_F(PictureLayerImplTest, TileManagerRegisterUnregister) { |
active_layer_->CalculateContentsScale(1.f, |
1.f, |
1.f, |
+ 1.f, |
false, |
&dummy_contents_scale_x, |
&dummy_contents_scale_y, |
@@ -320,6 +328,7 @@ TEST_F(PictureLayerImplTest, TileManagerRegisterUnregister) { |
pending_layer_->CalculateContentsScale(1.f, |
1.f, |
1.f, |
+ 1.f, |
false, |
&dummy_contents_scale_x, |
&dummy_contents_scale_y, |
@@ -344,6 +353,7 @@ TEST_F(PictureLayerImplTest, TileManagerRegisterUnregister) { |
active_layer_->CalculateContentsScale(1.f, |
1.f, |
1.f, |
+ 1.f, |
false, |
&dummy_contents_scale_x, |
&dummy_contents_scale_y, |
@@ -353,6 +363,7 @@ TEST_F(PictureLayerImplTest, TileManagerRegisterUnregister) { |
pending_layer_->CalculateContentsScale(1.f, |
1.f, |
1.f, |
+ 1.f, |
false, |
&dummy_contents_scale_x, |
&dummy_contents_scale_y, |
@@ -387,6 +398,7 @@ TEST_F(PictureLayerImplTest, SuppressUpdateTilePriorities) { |
active_layer_->CalculateContentsScale(1.f, |
1.f, |
1.f, |
+ 1.f, |
false, |
&dummy_contents_scale_x, |
&dummy_contents_scale_y, |
@@ -599,8 +611,14 @@ TEST_F(PictureLayerImplTest, ManageTilingsWithNoRecording) { |
SetupTrees(pending_pile, active_pile); |
- pending_layer_->CalculateContentsScale( |
- 1.f, 1.f, 1.f, false, &result_scale_x, &result_scale_y, &result_bounds); |
+ pending_layer_->CalculateContentsScale(1.f, |
+ 1.f, |
+ 1.f, |
+ 1.f, |
+ false, |
+ &result_scale_x, |
+ &result_scale_y, |
+ &result_bounds); |
EXPECT_EQ(0u, pending_layer_->tilings()->num_tilings()); |
} |
@@ -625,7 +643,8 @@ TEST_F(PictureLayerImplTest, ManageTilingsCreatesTilings) { |
pending_layer_->CalculateContentsScale(1.3f, // ideal contents scale |
1.7f, // device scale |
- 3.2f, // page cale |
+ 3.2f, // page scale |
+ 1.f, // maximum animation scale |
false, |
&result_scale_x, |
&result_scale_y, |
@@ -642,7 +661,8 @@ TEST_F(PictureLayerImplTest, ManageTilingsCreatesTilings) { |
// tilings. |
pending_layer_->CalculateContentsScale(1.8f, // ideal contents scale |
1.7f, // device scale |
- 3.2f, // page cale |
+ 3.2f, // page scale |
+ 1.f, // maximum animation scale |
false, |
&result_scale_x, |
&result_scale_y, |
@@ -658,7 +678,8 @@ TEST_F(PictureLayerImplTest, ManageTilingsCreatesTilings) { |
// If we change the page scale factor, then we should get new tilings. |
pending_layer_->CalculateContentsScale(1.8f, // ideal contents scale |
1.7f, // device scale |
- 2.2f, // page cale |
+ 2.2f, // page scale |
+ 1.f, // maximum animation scale |
false, |
&result_scale_x, |
&result_scale_y, |
@@ -674,7 +695,8 @@ TEST_F(PictureLayerImplTest, ManageTilingsCreatesTilings) { |
// If we change the device scale factor, then we should get new tilings. |
pending_layer_->CalculateContentsScale(1.9f, // ideal contents scale |
1.4f, // device scale |
- 2.2f, // page cale |
+ 2.2f, // page scale |
+ 1.f, // maximum animation scale |
false, |
&result_scale_x, |
&result_scale_y, |
@@ -691,7 +713,8 @@ TEST_F(PictureLayerImplTest, ManageTilingsCreatesTilings) { |
// factor somehow, then we don't get new tilings. |
pending_layer_->CalculateContentsScale(1.9f, // ideal contents scale |
2.2f, // device scale |
- 1.4f, // page cale |
+ 1.4f, // page scale |
+ 1.f, // maximum animation scale |
false, |
&result_scale_x, |
&result_scale_y, |
@@ -724,6 +747,7 @@ TEST_F(PictureLayerImplTest, CreateTilingsEvenIfTwinHasNone) { |
float low_res_scale = high_res_scale * low_res_factor; |
float device_scale = 1.7f; |
float page_scale = 3.2f; |
+ float maximum_animation_scale = 1.f; |
float result_scale_x, result_scale_y; |
gfx::Size result_bounds; |
@@ -731,6 +755,7 @@ TEST_F(PictureLayerImplTest, CreateTilingsEvenIfTwinHasNone) { |
pending_layer_->CalculateContentsScale(high_res_scale, |
device_scale, |
page_scale, |
+ maximum_animation_scale, |
false, |
&result_scale_x, |
&result_scale_y, |
@@ -746,6 +771,7 @@ TEST_F(PictureLayerImplTest, CreateTilingsEvenIfTwinHasNone) { |
pending_layer_->CalculateContentsScale(high_res_scale, |
device_scale, |
page_scale, |
+ maximum_animation_scale, |
false, |
&result_scale_x, |
&result_scale_y, |
@@ -757,6 +783,7 @@ TEST_F(PictureLayerImplTest, CreateTilingsEvenIfTwinHasNone) { |
active_layer_->CalculateContentsScale(high_res_scale, |
device_scale, |
page_scale, |
+ maximum_animation_scale, |
false, |
&result_scale_x, |
&result_scale_y, |
@@ -767,6 +794,7 @@ TEST_F(PictureLayerImplTest, CreateTilingsEvenIfTwinHasNone) { |
pending_layer_->CalculateContentsScale(high_res_scale, |
device_scale, |
page_scale, |
+ maximum_animation_scale, |
false, |
&result_scale_x, |
&result_scale_y, |
@@ -791,10 +819,10 @@ TEST_F(PictureLayerImplTest, ZoomOutCrash) { |
SetupTrees(pending_pile, active_pile); |
EXPECT_EQ(0u, active_layer_->tilings()->num_tilings()); |
- SetContentsScaleOnBothLayers(32.0f, 1.0f, 32.0f, false); |
+ SetContentsScaleOnBothLayers(32.0f, 1.0f, 32.0f, 1.0f, false); |
host_impl_.PinchGestureBegin(); |
- SetContentsScaleOnBothLayers(1.0f, 1.0f, 1.0f, false); |
- SetContentsScaleOnBothLayers(1.0f, 1.0f, 1.0f, false); |
+ SetContentsScaleOnBothLayers(1.0f, 1.0f, 1.0f, 1.0f, false); |
+ SetContentsScaleOnBothLayers(1.0f, 1.0f, 1.0f, 1.0f, false); |
EXPECT_EQ(active_layer_->tilings()->NumHighResTilings(), 1); |
} |
@@ -810,7 +838,7 @@ TEST_F(PictureLayerImplTest, PinchGestureTilings) { |
// Set up the high and low res tilings before pinch zoom. |
SetupTrees(pending_pile, active_pile); |
EXPECT_EQ(0u, active_layer_->tilings()->num_tilings()); |
- SetContentsScaleOnBothLayers(1.0f, 1.0f, 1.0f, false); |
+ SetContentsScaleOnBothLayers(1.0f, 1.0f, 1.0f, 1.0f, false); |
float low_res_factor = host_impl_.settings().low_res_contents_scale_factor; |
EXPECT_EQ(2u, active_layer_->tilings()->num_tilings()); |
EXPECT_FLOAT_EQ( |
@@ -825,7 +853,7 @@ TEST_F(PictureLayerImplTest, PinchGestureTilings) { |
// Zoom out by a small amount. We should create a tiling at half |
// the scale (1/kMaxScaleRatioDuringPinch). |
- SetContentsScaleOnBothLayers(0.90f, 1.0f, 0.9f, false); |
+ SetContentsScaleOnBothLayers(0.90f, 1.0f, 0.9f, 1.0f, false); |
EXPECT_EQ(3u, active_layer_->tilings()->num_tilings()); |
EXPECT_FLOAT_EQ( |
1.0f, |
@@ -839,17 +867,18 @@ TEST_F(PictureLayerImplTest, PinchGestureTilings) { |
// Zoom out further, close to our low-res scale factor. We should |
// use that tiling as high-res, and not create a new tiling. |
- SetContentsScaleOnBothLayers(low_res_factor, 1.0f, low_res_factor, false); |
+ SetContentsScaleOnBothLayers( |
+ low_res_factor, 1.0f, low_res_factor, 1.0f, false); |
EXPECT_EQ(3u, active_layer_->tilings()->num_tilings()); |
// Zoom in a lot now. Since we increase by increments of |
// kMaxScaleRatioDuringPinch, this will first use 0.5, then 1.0 |
// and then finally create a new tiling at 2.0. |
- SetContentsScaleOnBothLayers(2.1f, 1.0f, 2.1f, false); |
+ SetContentsScaleOnBothLayers(2.1f, 1.0f, 2.1f, 1.f, false); |
EXPECT_EQ(3u, active_layer_->tilings()->num_tilings()); |
- SetContentsScaleOnBothLayers(2.1f, 1.0f, 2.1f, false); |
+ SetContentsScaleOnBothLayers(2.1f, 1.0f, 2.1f, 1.f, false); |
EXPECT_EQ(3u, active_layer_->tilings()->num_tilings()); |
- SetContentsScaleOnBothLayers(2.1f, 1.0f, 2.1f, false); |
+ SetContentsScaleOnBothLayers(2.1f, 1.0f, 2.1f, 1.f, false); |
EXPECT_EQ(4u, active_layer_->tilings()->num_tilings()); |
EXPECT_FLOAT_EQ( |
2.0f, |
@@ -878,7 +907,7 @@ TEST_F(PictureLayerImplTest, CleanUpTilings) { |
float device_scale = 1.7f; |
float page_scale = 3.2f; |
- SetContentsScaleOnBothLayers(1.f, device_scale, page_scale, false); |
+ SetContentsScaleOnBothLayers(1.f, device_scale, page_scale, 1.f, false); |
ASSERT_EQ(2u, active_layer_->tilings()->num_tilings()); |
// We only have ideal tilings, so they aren't removed. |
@@ -887,7 +916,7 @@ TEST_F(PictureLayerImplTest, CleanUpTilings) { |
ASSERT_EQ(2u, active_layer_->tilings()->num_tilings()); |
// Changing the ideal but not creating new tilings. |
- SetContentsScaleOnBothLayers(1.5f, device_scale, page_scale, false); |
+ SetContentsScaleOnBothLayers(1.5f, device_scale, page_scale, 1.f, false); |
ASSERT_EQ(2u, active_layer_->tilings()->num_tilings()); |
// The tilings are still our target scale, so they aren't removed. |
@@ -897,7 +926,7 @@ TEST_F(PictureLayerImplTest, CleanUpTilings) { |
// Create a 1.2 scale tiling. Now we have 1.0 and 1.2 tilings. Ideal = 1.2. |
page_scale = 1.2f; |
- SetContentsScaleOnBothLayers(1.2f, device_scale, page_scale, false); |
+ SetContentsScaleOnBothLayers(1.2f, device_scale, page_scale, 1.f, false); |
ASSERT_EQ(4u, active_layer_->tilings()->num_tilings()); |
EXPECT_FLOAT_EQ( |
1.f, |
@@ -914,7 +943,7 @@ TEST_F(PictureLayerImplTest, CleanUpTilings) { |
ASSERT_EQ(4u, active_layer_->tilings()->num_tilings()); |
// Now move the ideal scale to 0.5. Our target stays 1.2. |
- SetContentsScaleOnBothLayers(0.5f, device_scale, page_scale, false); |
+ SetContentsScaleOnBothLayers(0.5f, device_scale, page_scale, 1.f, false); |
// The high resolution tiling is between target and ideal, so is not |
// removed. The low res tiling for the old ideal=1.0 scale is removed. |
@@ -923,7 +952,7 @@ TEST_F(PictureLayerImplTest, CleanUpTilings) { |
ASSERT_EQ(3u, active_layer_->tilings()->num_tilings()); |
// Now move the ideal scale to 1.0. Our target stays 1.2. |
- SetContentsScaleOnBothLayers(1.f, device_scale, page_scale, false); |
+ SetContentsScaleOnBothLayers(1.f, device_scale, page_scale, 1.f, false); |
// All the tilings are between are target and the ideal, so they are not |
// removed. |
@@ -935,6 +964,7 @@ TEST_F(PictureLayerImplTest, CleanUpTilings) { |
active_layer_->CalculateContentsScale(1.1f, |
device_scale, |
page_scale, |
+ 1.f, |
false, |
&result_scale_x, |
&result_scale_y, |
@@ -951,6 +981,7 @@ TEST_F(PictureLayerImplTest, CleanUpTilings) { |
pending_layer_->CalculateContentsScale(1.1f, |
device_scale, |
page_scale, |
+ 1.f, |
false, |
&result_scale_x, |
&result_scale_y, |
@@ -990,18 +1021,25 @@ TEST_F(PictureLayerImplTest, DontAddLowResDuringAnimation) { |
float contents_scale = 1.f; |
float device_scale = 1.f; |
float page_scale = 1.f; |
+ float maximum_animation_scale = 1.f; |
bool animating_transform = true; |
// Animating, so don't create low res even if there isn't one already. |
- SetContentsScaleOnBothLayers( |
- contents_scale, device_scale, page_scale, animating_transform); |
+ SetContentsScaleOnBothLayers(contents_scale, |
+ device_scale, |
+ page_scale, |
+ maximum_animation_scale, |
+ animating_transform); |
EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), 1.f); |
EXPECT_BOTH_EQ(num_tilings(), 1u); |
// Stop animating, low res gets created. |
animating_transform = false; |
- SetContentsScaleOnBothLayers( |
- contents_scale, device_scale, page_scale, animating_transform); |
+ SetContentsScaleOnBothLayers(contents_scale, |
+ device_scale, |
+ page_scale, |
+ maximum_animation_scale, |
+ animating_transform); |
EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), 1.f); |
EXPECT_BOTH_EQ(LowResTiling()->contents_scale(), low_res_factor); |
EXPECT_BOTH_EQ(num_tilings(), 2u); |
@@ -1010,16 +1048,22 @@ TEST_F(PictureLayerImplTest, DontAddLowResDuringAnimation) { |
contents_scale = 2.f; |
page_scale = 2.f; |
animating_transform = true; |
- SetContentsScaleOnBothLayers( |
- contents_scale, device_scale, page_scale, animating_transform); |
+ SetContentsScaleOnBothLayers(contents_scale, |
+ device_scale, |
+ page_scale, |
+ maximum_animation_scale, |
+ animating_transform); |
EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), 2.f); |
EXPECT_BOTH_EQ(LowResTiling()->contents_scale(), low_res_factor); |
EXPECT_BOTH_EQ(num_tilings(), 3u); |
// Stop animating, new low res gets created for final page scale. |
animating_transform = false; |
- SetContentsScaleOnBothLayers( |
- contents_scale, device_scale, page_scale, animating_transform); |
+ SetContentsScaleOnBothLayers(contents_scale, |
+ device_scale, |
+ page_scale, |
+ maximum_animation_scale, |
+ animating_transform); |
EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), 2.f); |
EXPECT_BOTH_EQ(LowResTiling()->contents_scale(), 2.f * low_res_factor); |
EXPECT_BOTH_EQ(num_tilings(), 4u); |
@@ -1032,12 +1076,16 @@ TEST_F(PictureLayerImplTest, DontAddLowResForSmallLayers) { |
float low_res_factor = host_impl_.settings().low_res_contents_scale_factor; |
float device_scale = 1.f; |
float page_scale = 1.f; |
+ float maximum_animation_scale = 1.f; |
bool animating_transform = false; |
// Contents exactly fit on one tile at scale 1, no low res. |
float contents_scale = 1.f; |
- SetContentsScaleOnBothLayers( |
- contents_scale, device_scale, page_scale, animating_transform); |
+ SetContentsScaleOnBothLayers(contents_scale, |
+ device_scale, |
+ page_scale, |
+ maximum_animation_scale, |
+ animating_transform); |
EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), contents_scale); |
EXPECT_BOTH_EQ(num_tilings(), 1u); |
@@ -1045,8 +1093,11 @@ TEST_F(PictureLayerImplTest, DontAddLowResForSmallLayers) { |
// Contents that are smaller than one tile, no low res. |
contents_scale = 0.123f; |
- SetContentsScaleOnBothLayers( |
- contents_scale, device_scale, page_scale, animating_transform); |
+ SetContentsScaleOnBothLayers(contents_scale, |
+ device_scale, |
+ page_scale, |
+ maximum_animation_scale, |
+ animating_transform); |
EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), contents_scale); |
EXPECT_BOTH_EQ(num_tilings(), 1u); |
@@ -1055,8 +1106,11 @@ TEST_F(PictureLayerImplTest, DontAddLowResForSmallLayers) { |
// Any content bounds that would create more than one tile will |
// generate a low res tiling. |
contents_scale = 2.5f; |
- SetContentsScaleOnBothLayers( |
- contents_scale, device_scale, page_scale, animating_transform); |
+ SetContentsScaleOnBothLayers(contents_scale, |
+ device_scale, |
+ page_scale, |
+ maximum_animation_scale, |
+ animating_transform); |
EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), contents_scale); |
EXPECT_BOTH_EQ(LowResTiling()->contents_scale(), |
contents_scale * low_res_factor); |
@@ -1067,8 +1121,11 @@ TEST_F(PictureLayerImplTest, DontAddLowResForSmallLayers) { |
// Mask layers dont create low res since they always fit on one tile. |
pending_layer_->SetIsMask(true); |
active_layer_->SetIsMask(true); |
- SetContentsScaleOnBothLayers( |
- contents_scale, device_scale, page_scale, animating_transform); |
+ SetContentsScaleOnBothLayers(contents_scale, |
+ device_scale, |
+ page_scale, |
+ maximum_animation_scale, |
+ animating_transform); |
EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), contents_scale); |
EXPECT_BOTH_EQ(num_tilings(), 1u); |
} |
@@ -1090,7 +1147,8 @@ TEST_F(PictureLayerImplTest, ReleaseResources) { |
pending_layer_->CalculateContentsScale(1.3f, // ideal contents scale |
2.7f, // device scale |
- 3.2f, // page cale |
+ 3.2f, // page scale |
+ 1.f, // maximum animation scale |
false, |
&result_scale_x, |
&result_scale_y, |
@@ -1106,7 +1164,8 @@ TEST_F(PictureLayerImplTest, ReleaseResources) { |
// This should create new tilings. |
pending_layer_->CalculateContentsScale(1.3f, // ideal contents scale |
2.7f, // device scale |
- 3.2f, // page cale |
+ 3.2f, // page scale |
+ 1.f, // maximum animation scale |
false, |
&result_scale_x, |
&result_scale_y, |
@@ -1130,8 +1189,14 @@ TEST_F(PictureLayerImplTest, ClampTilesToToMaxTileSize) { |
SetupTrees(pending_pile, active_pile); |
EXPECT_EQ(0u, pending_layer_->tilings()->num_tilings()); |
- pending_layer_->CalculateContentsScale( |
- 1.f, 1.f, 1.f, false, &result_scale_x, &result_scale_y, &result_bounds); |
+ pending_layer_->CalculateContentsScale(1.f, |
+ 1.f, |
+ 1.f, |
+ 1.f, |
+ false, |
+ &result_scale_x, |
+ &result_scale_y, |
+ &result_bounds); |
ASSERT_EQ(2u, pending_layer_->tilings()->num_tilings()); |
pending_layer_->tilings()->tiling_at(0)->CreateAllTilesForTesting(); |
@@ -1154,8 +1219,14 @@ TEST_F(PictureLayerImplTest, ClampTilesToToMaxTileSize) { |
host_impl_.InitializeRenderer(FakeOutputSurface::Create3d( |
context.Pass()).PassAs<OutputSurface>()); |
- pending_layer_->CalculateContentsScale( |
- 1.f, 1.f, 1.f, false, &result_scale_x, &result_scale_y, &result_bounds); |
+ pending_layer_->CalculateContentsScale(1.f, |
+ 1.f, |
+ 1.f, |
+ 1.f, |
+ false, |
+ &result_scale_x, |
+ &result_scale_y, |
+ &result_bounds); |
ASSERT_EQ(2u, pending_layer_->tilings()->num_tilings()); |
pending_layer_->tilings()->tiling_at(0)->CreateAllTilesForTesting(); |
@@ -1182,8 +1253,14 @@ TEST_F(PictureLayerImplTest, ClampSingleTileToToMaxTileSize) { |
SetupTrees(pending_pile, active_pile); |
EXPECT_EQ(0u, pending_layer_->tilings()->num_tilings()); |
- pending_layer_->CalculateContentsScale( |
- 1.f, 1.f, 1.f, false, &result_scale_x, &result_scale_y, &result_bounds); |
+ pending_layer_->CalculateContentsScale(1.f, |
+ 1.f, |
+ 1.f, |
+ 1.f, |
+ false, |
+ &result_scale_x, |
+ &result_scale_y, |
+ &result_bounds); |
ASSERT_LE(1u, pending_layer_->tilings()->num_tilings()); |
pending_layer_->tilings()->tiling_at(0)->CreateAllTilesForTesting(); |
@@ -1206,8 +1283,14 @@ TEST_F(PictureLayerImplTest, ClampSingleTileToToMaxTileSize) { |
host_impl_.InitializeRenderer(FakeOutputSurface::Create3d( |
context.Pass()).PassAs<OutputSurface>()); |
- pending_layer_->CalculateContentsScale( |
- 1.f, 1.f, 1.f, false, &result_scale_x, &result_scale_y, &result_bounds); |
+ pending_layer_->CalculateContentsScale(1.f, |
+ 1.f, |
+ 1.f, |
+ 1.f, |
+ false, |
+ &result_scale_x, |
+ &result_scale_y, |
+ &result_bounds); |
ASSERT_LE(1u, pending_layer_->tilings()->num_tilings()); |
pending_layer_->tilings()->tiling_at(0)->CreateAllTilesForTesting(); |
@@ -1510,8 +1593,14 @@ TEST_F(PictureLayerImplTest, TilingWithoutGpuRasterization) { |
SetupDefaultTrees(layer_bounds); |
EXPECT_FALSE(pending_layer_->ShouldUseGpuRasterization()); |
EXPECT_EQ(0u, pending_layer_->tilings()->num_tilings()); |
- pending_layer_->CalculateContentsScale( |
- 1.f, 1.f, 1.f, false, &result_scale_x, &result_scale_y, &result_bounds); |
+ pending_layer_->CalculateContentsScale(1.f, |
+ 1.f, |
+ 1.f, |
+ 1.f, |
+ false, |
+ &result_scale_x, |
+ &result_scale_y, |
+ &result_bounds); |
// Should have a low-res and a high-res tiling. |
ASSERT_EQ(2u, pending_layer_->tilings()->num_tilings()); |
} |
@@ -1519,7 +1608,7 @@ TEST_F(PictureLayerImplTest, TilingWithoutGpuRasterization) { |
TEST_F(PictureLayerImplTest, NoTilingIfDoesNotDrawContent) { |
// Set up layers with tilings. |
SetupDefaultTrees(gfx::Size(10, 10)); |
- SetContentsScaleOnBothLayers(1.f, 1.f, 1.f, false); |
+ SetContentsScaleOnBothLayers(1.f, 1.f, 1.f, 1.f, false); |
pending_layer_->PushPropertiesTo(active_layer_); |
EXPECT_TRUE(pending_layer_->DrawsContent()); |
EXPECT_TRUE(pending_layer_->CanHaveTilings()); |
@@ -1540,7 +1629,7 @@ TEST_F(PictureLayerImplTest, FirstTilingDuringPinch) { |
SetupDefaultTrees(gfx::Size(10, 10)); |
host_impl_.PinchGestureBegin(); |
float high_res_scale = 2.3f; |
- SetContentsScaleOnBothLayers(high_res_scale, 1.f, 1.f, false); |
+ SetContentsScaleOnBothLayers(high_res_scale, 1.f, 1.f, 1.f, false); |
ASSERT_GE(pending_layer_->num_tilings(), 0u); |
EXPECT_FLOAT_EQ(high_res_scale, |
@@ -1553,7 +1642,7 @@ TEST_F(PictureLayerImplTest, FirstTilingTooSmall) { |
float high_res_scale = 0.0001f; |
EXPECT_GT(pending_layer_->MinimumContentsScale(), high_res_scale); |
- SetContentsScaleOnBothLayers(high_res_scale, 1.f, 1.f, false); |
+ SetContentsScaleOnBothLayers(high_res_scale, 1.f, 1.f, 1.f, false); |
ASSERT_GE(pending_layer_->num_tilings(), 0u); |
EXPECT_FLOAT_EQ(pending_layer_->MinimumContentsScale(), |
@@ -1564,7 +1653,7 @@ TEST_F(PictureLayerImplTest, PinchingTooSmall) { |
SetupDefaultTrees(gfx::Size(10, 10)); |
float contents_scale = 0.15f; |
- SetContentsScaleOnBothLayers(contents_scale, 1.f, 1.f, false); |
+ SetContentsScaleOnBothLayers(contents_scale, 1.f, 1.f, 1.f, false); |
ASSERT_GE(pending_layer_->num_tilings(), 0u); |
EXPECT_FLOAT_EQ(contents_scale, |
@@ -1576,8 +1665,7 @@ TEST_F(PictureLayerImplTest, PinchingTooSmall) { |
EXPECT_LT(page_scale * contents_scale, |
pending_layer_->MinimumContentsScale()); |
- |
- SetContentsScaleOnBothLayers(contents_scale, 1.f, page_scale, false); |
+ SetContentsScaleOnBothLayers(contents_scale, 1.f, page_scale, 1.f, false); |
ASSERT_GE(pending_layer_->num_tilings(), 0u); |
EXPECT_FLOAT_EQ(pending_layer_->MinimumContentsScale(), |
pending_layer_->HighResTiling()->contents_scale()); |
@@ -1645,16 +1733,28 @@ TEST_F(HybridRasterizationPictureLayerImplTest, Tiling) { |
SetupDefaultTrees(layer_bounds); |
EXPECT_FALSE(pending_layer_->ShouldUseGpuRasterization()); |
EXPECT_EQ(0u, pending_layer_->tilings()->num_tilings()); |
- pending_layer_->CalculateContentsScale( |
- 1.f, 1.f, 1.f, false, &result_scale_x, &result_scale_y, &result_bounds); |
+ pending_layer_->CalculateContentsScale(1.f, |
+ 1.f, |
+ 1.f, |
+ 1.f, |
+ false, |
+ &result_scale_x, |
+ &result_scale_y, |
+ &result_bounds); |
// Should have a low-res and a high-res tiling. |
ASSERT_EQ(2u, pending_layer_->tilings()->num_tilings()); |
pending_layer_->SetHasGpuRasterizationHint(true); |
EXPECT_TRUE(pending_layer_->ShouldUseGpuRasterization()); |
EXPECT_EQ(0u, pending_layer_->tilings()->num_tilings()); |
- pending_layer_->CalculateContentsScale( |
- 1.f, 1.f, 1.f, false, &result_scale_x, &result_scale_y, &result_bounds); |
+ pending_layer_->CalculateContentsScale(1.f, |
+ 1.f, |
+ 1.f, |
+ 1.f, |
+ false, |
+ &result_scale_x, |
+ &result_scale_y, |
+ &result_bounds); |
// Should only have the high-res tiling. |
ASSERT_EQ(1u, pending_layer_->tilings()->num_tilings()); |
} |
@@ -1669,26 +1769,84 @@ TEST_F(HybridRasterizationPictureLayerImplTest, |
float contents_scale = 1.f; |
float device_scale = 1.f; |
float page_scale = 1.f; |
+ float maximum_animation_scale = 1.f; |
bool animating_transform = false; |
- SetContentsScaleOnBothLayers( |
- contents_scale, device_scale, page_scale, animating_transform); |
+ SetContentsScaleOnBothLayers(contents_scale, |
+ device_scale, |
+ page_scale, |
+ maximum_animation_scale, |
+ animating_transform); |
EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), 1.f); |
- // Changing contents scale shouldn't affect tiling resolution during the |
- // animation, since we're CPU-rasterizing. |
+ // Since we're CPU-rasterizing, starting an animation should cause tiling |
+ // resolution to get multiplied by the maximum animation scale factor. |
animating_transform = true; |
+ maximum_animation_scale = 3.f; |
contents_scale = 2.f; |
- SetContentsScaleOnBothLayers( |
- contents_scale, device_scale, page_scale, animating_transform); |
- EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), 1.f); |
+ SetContentsScaleOnBothLayers(contents_scale, |
+ device_scale, |
+ page_scale, |
+ maximum_animation_scale, |
+ animating_transform); |
+ EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), 6.f); |
+ |
+ // Further changes to scale during the animation should not cause a new |
+ // high-res tiling to get created. |
+ contents_scale = 3.f; |
+ |
+ SetContentsScaleOnBothLayers(contents_scale, |
+ device_scale, |
+ page_scale, |
+ maximum_animation_scale, |
+ animating_transform); |
+ EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), 6.f); |
// Once we stop animating, a new high-res tiling should be created. |
animating_transform = false; |
- SetContentsScaleOnBothLayers( |
- contents_scale, device_scale, page_scale, animating_transform); |
+ |
+ SetContentsScaleOnBothLayers(contents_scale, |
+ device_scale, |
+ page_scale, |
+ maximum_animation_scale, |
+ animating_transform); |
+ EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), 3.f); |
+ |
+ // When animating with an unknown maximum animation scale factor, a new |
+ // high-res tiling should be created at the animation's initial scale. |
+ animating_transform = true; |
+ contents_scale = 2.f; |
+ maximum_animation_scale = 0.f; |
+ |
+ SetContentsScaleOnBothLayers(contents_scale, |
+ device_scale, |
+ page_scale, |
+ maximum_animation_scale, |
+ animating_transform); |
+ EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), 2.f); |
+ |
+ // Further changes to scale during the animation should not cause a new |
+ // high-res tiling to get created. |
+ contents_scale = 3.f; |
+ |
+ SetContentsScaleOnBothLayers(contents_scale, |
+ device_scale, |
+ page_scale, |
+ maximum_animation_scale, |
+ animating_transform); |
EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), 2.f); |
+ |
+ // Once we stop animating, a new high-res tiling should be created. |
+ animating_transform = false; |
+ contents_scale = 4.f; |
+ |
+ SetContentsScaleOnBothLayers(contents_scale, |
+ device_scale, |
+ page_scale, |
+ maximum_animation_scale, |
+ animating_transform); |
+ EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), 4.f); |
} |
TEST_F(HybridRasterizationPictureLayerImplTest, |
@@ -1701,33 +1859,48 @@ TEST_F(HybridRasterizationPictureLayerImplTest, |
float contents_scale = 1.f; |
float device_scale = 1.f; |
float page_scale = 1.f; |
+ float maximum_animation_scale = 1.f; |
bool animating_transform = false; |
- SetContentsScaleOnBothLayers( |
- contents_scale, device_scale, page_scale, animating_transform); |
+ SetContentsScaleOnBothLayers(contents_scale, |
+ device_scale, |
+ page_scale, |
+ maximum_animation_scale, |
+ animating_transform); |
EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), 1.f); |
// Changing contents scale during an animation should cause tiling resolution |
- // to change, since we're GPU-rasterizing. |
+ // to change, since we're GPU-rasterizing. The maximum animation scale should |
+ // not have any effect. |
animating_transform = true; |
contents_scale = 2.f; |
+ maximum_animation_scale = 4.f; |
- SetContentsScaleOnBothLayers( |
- contents_scale, device_scale, page_scale, animating_transform); |
+ SetContentsScaleOnBothLayers(contents_scale, |
+ device_scale, |
+ page_scale, |
+ maximum_animation_scale, |
+ animating_transform); |
EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), 2.f); |
// Since we're re-rasterizing during the animation, scales smaller than 1 |
// should be respected. |
contents_scale = 0.5f; |
- SetContentsScaleOnBothLayers( |
- contents_scale, device_scale, page_scale, animating_transform); |
+ SetContentsScaleOnBothLayers(contents_scale, |
+ device_scale, |
+ page_scale, |
+ maximum_animation_scale, |
+ animating_transform); |
EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), 0.5f); |
// Tiling resolution should also update once we stop animating. |
contents_scale = 4.f; |
animating_transform = false; |
- SetContentsScaleOnBothLayers( |
- contents_scale, device_scale, page_scale, animating_transform); |
+ SetContentsScaleOnBothLayers(contents_scale, |
+ device_scale, |
+ page_scale, |
+ maximum_animation_scale, |
+ animating_transform); |
EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), 4.f); |
} |
@@ -1748,8 +1921,14 @@ TEST_F(GpuRasterizationPictureLayerImplTest, Tiling) { |
pending_layer_->SetHasGpuRasterizationHint(true); |
EXPECT_TRUE(pending_layer_->ShouldUseGpuRasterization()); |
EXPECT_EQ(0u, pending_layer_->tilings()->num_tilings()); |
- pending_layer_->CalculateContentsScale( |
- 1.f, 1.f, 1.f, false, &result_scale_x, &result_scale_y, &result_bounds); |
+ pending_layer_->CalculateContentsScale(1.f, |
+ 1.f, |
+ 1.f, |
+ 1.f, |
+ false, |
+ &result_scale_x, |
+ &result_scale_y, |
+ &result_bounds); |
// Should only have the high-res tiling. |
ASSERT_EQ(1u, pending_layer_->tilings()->num_tilings()); |
@@ -1757,8 +1936,14 @@ TEST_F(GpuRasterizationPictureLayerImplTest, Tiling) { |
EXPECT_TRUE(pending_layer_->ShouldUseGpuRasterization()); |
// Should still have the high-res tiling. |
EXPECT_EQ(1u, pending_layer_->tilings()->num_tilings()); |
- pending_layer_->CalculateContentsScale( |
- 1.f, 1.f, 1.f, false, &result_scale_x, &result_scale_y, &result_bounds); |
+ pending_layer_->CalculateContentsScale(1.f, |
+ 1.f, |
+ 1.f, |
+ 1.f, |
+ false, |
+ &result_scale_x, |
+ &result_scale_y, |
+ &result_bounds); |
// Should still only have the high-res tiling. |
ASSERT_EQ(1u, pending_layer_->tilings()->num_tilings()); |
} |