Chromium Code Reviews| 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 474f519ab7c557d85a2f5ecf1f985e885360dcc7..142135b39de4d353877418dbddee51d50feb348b 100644 |
| --- a/cc/layers/picture_layer_impl_unittest.cc |
| +++ b/cc/layers/picture_layer_impl_unittest.cc |
| @@ -164,7 +164,8 @@ class PictureLayerImplTest : public testing::Test { |
| maximum_animation_contents_scale; |
| layer->draw_properties().screen_space_transform_is_animating = |
| animating_transform_to_screen; |
| - layer->UpdateTiles(Occlusion()); |
| + bool draw_properties_valid_for_tile_priority = true; |
| + layer->UpdateTiles(Occlusion(), draw_properties_valid_for_tile_priority); |
| } |
| static void VerifyAllTilesExistAndHavePile( |
| const PictureLayerTiling* tiling, |
| @@ -354,7 +355,7 @@ TEST_F(PictureLayerImplTest, ExternalViewportRectForPrioritizingTiles) { |
| resourceless_software_draw); |
| active_layer_->draw_properties().visible_content_rect = viewport; |
| active_layer_->draw_properties().screen_space_transform = transform; |
| - active_layer_->UpdateTiles(Occlusion()); |
| + active_layer_->UpdateTiles(Occlusion(), !resourceless_software_draw); |
| gfx::Rect viewport_rect_for_tile_priority_in_view_space = |
| viewport_rect_for_tile_priority; |
| @@ -392,7 +393,7 @@ TEST_F(PictureLayerImplTest, ExternalViewportRectForPrioritizingTiles) { |
| resourceless_software_draw); |
| active_layer_->draw_properties().visible_content_rect = viewport; |
| active_layer_->draw_properties().screen_space_transform = transform; |
| - active_layer_->UpdateTiles(Occlusion()); |
| + active_layer_->UpdateTiles(Occlusion(), !resourceless_software_draw); |
| gfx::Transform screen_to_view(gfx::Transform::kSkipInitialization); |
| bool success = transform_for_tile_priority.GetInverse(&screen_to_view); |
| @@ -420,8 +421,7 @@ TEST_F(PictureLayerImplTest, ExternalViewportRectForPrioritizingTiles) { |
| } |
| } |
| -TEST_F(PictureLayerImplTest, |
| - ResourcelessSoftwareDrawHasValidViewportForTilePriority) { |
| +TEST_F(PictureLayerImplTest, InvalidViewportForPrioritizingTiles) { |
| base::TimeTicks time_ticks; |
| time_ticks += base::TimeDelta::FromMilliseconds(1); |
| host_impl_.SetCurrentBeginFrameArgs( |
| @@ -442,6 +442,8 @@ TEST_F(PictureLayerImplTest, |
| SetupDrawPropertiesAndUpdateTiles(active_layer_, 1.f, 1.f, 1.f, 1.f, false); |
| // UpdateTiles with valid viewport. Should update tile viewport. |
| + // Note viewport is considered invalid if and only if in resourceless |
| + // software draw. |
| bool resourceless_software_draw = false; |
| gfx::Rect viewport = gfx::Rect(layer_bounds); |
| gfx::Transform transform; |
| @@ -453,7 +455,7 @@ TEST_F(PictureLayerImplTest, |
| resourceless_software_draw); |
| active_layer_->draw_properties().visible_content_rect = viewport; |
| active_layer_->draw_properties().screen_space_transform = transform; |
| - active_layer_->UpdateTiles(Occlusion()); |
| + active_layer_->UpdateTiles(Occlusion(), !resourceless_software_draw); |
| gfx::Rect visible_rect_for_tile_priority = |
| active_layer_->visible_rect_for_tile_priority(); |
| @@ -464,9 +466,8 @@ TEST_F(PictureLayerImplTest, |
| gfx::Transform screen_space_transform_for_tile_priority = |
| active_layer_->screen_space_transform_for_tile_priority(); |
| - // PictureLayerImpl does not make a special case for |
| - // resource_less_software_draw, so the tile viewport and matrix should be |
| - // respected. |
| + // Expand viewport and set it as invalid for prioritizing tiles. |
| + // Should update viewport and transform, but not update visible rect. |
| time_ticks += base::TimeDelta::FromMilliseconds(200); |
| host_impl_.SetCurrentBeginFrameArgs( |
| CreateBeginFrameArgsForTesting(time_ticks)); |
| @@ -481,20 +482,37 @@ TEST_F(PictureLayerImplTest, |
| viewport, |
| transform, |
| resourceless_software_draw); |
| - active_layer_->UpdateTiles(Occlusion()); |
| + active_layer_->UpdateTiles(Occlusion(), !resourceless_software_draw); |
| - visible_rect_for_tile_priority = |
| - gfx::ScaleToEnclosingRect(visible_rect_for_tile_priority, 2); |
| - viewport_rect_for_tile_priority = |
| - gfx::ScaleToEnclosingRect(viewport_rect_for_tile_priority, 2); |
| - screen_space_transform_for_tile_priority = transform; |
| + // Viewport and transform for tile priority are updated. |
| + EXPECT_RECT_EQ(viewport, active_layer_->viewport_rect_for_tile_priority()); |
|
danakj
2014/10/01 02:05:14
nit: you can EXPECT_EQ instead of EXPECT_RECT_EQ n
|
| + EXPECT_TRANSFORMATION_MATRIX_EQ( |
| + transform, active_layer_->screen_space_transform_for_tile_priority()); |
| + // Visible rect for tile priority retains old value. |
| EXPECT_RECT_EQ(visible_rect_for_tile_priority, |
| active_layer_->visible_rect_for_tile_priority()); |
| - EXPECT_RECT_EQ(viewport_rect_for_tile_priority, |
| - active_layer_->viewport_rect_for_tile_priority()); |
| + |
| + // Keep expanded viewport but mark it valid. Should update tile viewport. |
| + time_ticks += base::TimeDelta::FromMilliseconds(200); |
| + host_impl_.SetCurrentBeginFrameArgs( |
| + CreateBeginFrameArgsForTesting(time_ticks)); |
| + resourceless_software_draw = false; |
| + host_impl_.SetExternalDrawConstraints(transform, |
| + viewport, |
| + viewport, |
| + viewport, |
| + transform, |
| + resourceless_software_draw); |
| + active_layer_->UpdateTiles(Occlusion(), !resourceless_software_draw); |
| + |
| EXPECT_TRANSFORMATION_MATRIX_EQ( |
| - screen_space_transform_for_tile_priority, |
| - active_layer_->screen_space_transform_for_tile_priority()); |
| + transform, active_layer_->screen_space_transform_for_tile_priority()); |
| + EXPECT_RECT_EQ(viewport, active_layer_->visible_rect_for_tile_priority()); |
| + |
| + gfx::Rect viewport_rect_in_layer = |
| + active_layer_->viewport_rect_for_tile_priority(); |
| + viewport_rect_in_layer.Offset(1, 1); // Match translate in |transform|. |
| + EXPECT_RECT_EQ(viewport, viewport_rect_in_layer); |
|
danakj
2014/10/01 02:05:14
nit: slightly prefer modifying the expected instea
|
| } |
| TEST_F(PictureLayerImplTest, ClonePartialInvalidation) { |
| @@ -1419,14 +1437,23 @@ TEST_F(PictureLayerImplTest, MarkRequiredOffscreenTiles) { |
| FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); |
| SetupPendingTree(pending_pile); |
| + gfx::Transform transform; |
| + gfx::Transform transform_for_tile_priority; |
| + bool resourceless_software_draw = false; |
| + gfx::Rect viewport(0, 0, 100, 200); |
| + host_impl_.SetExternalDrawConstraints(transform, |
| + viewport, |
| + viewport, |
| + viewport, |
| + transform, |
| + resourceless_software_draw); |
| + |
| pending_layer_->set_fixed_tile_size(tile_size); |
| ASSERT_TRUE(pending_layer_->CanHaveTilings()); |
| PictureLayerTiling* tiling = pending_layer_->AddTiling(1.f); |
| host_impl_.pending_tree()->UpdateDrawProperties(); |
| EXPECT_EQ(tiling->resolution(), HIGH_RESOLUTION); |
| - |
| - pending_layer_->draw_properties().visible_content_rect = |
| - gfx::Rect(0, 0, 100, 200); |
| + EXPECT_RECT_EQ(viewport, pending_layer_->visible_rect_for_tile_priority()); |
| // Fake set priorities. |
| for (PictureLayerTiling::CoverageIterator iter( |
| @@ -1439,7 +1466,8 @@ TEST_F(PictureLayerImplTest, MarkRequiredOffscreenTiles) { |
| TilePriority priority; |
| priority.resolution = HIGH_RESOLUTION; |
| gfx::Rect tile_bounds = iter.geometry_rect(); |
| - if (pending_layer_->visible_content_rect().Intersects(tile_bounds)) { |
| + if (pending_layer_->visible_rect_for_tile_priority().Intersects( |
| + tile_bounds)) { |
| priority.priority_bin = TilePriority::NOW; |
| priority.distance_to_visible = 0.f; |
| } else { |
| @@ -1515,7 +1543,7 @@ TEST_F(PictureLayerImplTest, TileOutsideOfViewportForTilePriorityNotRequired) { |
| time_ticks += base::TimeDelta::FromMilliseconds(200); |
| host_impl_.SetCurrentBeginFrameArgs( |
| CreateBeginFrameArgsForTesting(time_ticks)); |
| - pending_layer_->UpdateTiles(Occlusion()); |
| + pending_layer_->UpdateTiles(Occlusion(), !resourceless_software_draw); |
| pending_layer_->MarkVisibleResourcesAsRequired(); |
| @@ -2579,7 +2607,9 @@ TEST_F(PictureLayerImplTest, LayerRasterTileIterator) { |
| pending_layer_->draw_properties().visible_content_rect = |
| gfx::Rect(1100, 1100, 500, 500); |
| - pending_layer_->UpdateTiles(Occlusion()); |
| + bool draw_properties_valid_for_tile_priority = true; |
| + pending_layer_->UpdateTiles(Occlusion(), |
| + draw_properties_valid_for_tile_priority); |
| unique_tiles.clear(); |
| high_res_tile_count = 0u; |
| @@ -2609,7 +2639,8 @@ TEST_F(PictureLayerImplTest, LayerRasterTileIterator) { |
| pending_layer_->draw_properties().visible_content_rect = |
| gfx::Rect(0, 0, 500, 500); |
| - pending_layer_->UpdateTiles(Occlusion()); |
| + pending_layer_->UpdateTiles(Occlusion(), |
| + draw_properties_valid_for_tile_priority); |
| std::vector<Tile*> high_res_tiles = high_res_tiling->AllTilesForTesting(); |
| for (std::vector<Tile*>::iterator tile_it = high_res_tiles.begin(); |
| @@ -3130,8 +3161,7 @@ TEST_F(NoLowResPictureLayerImplTest, NothingRequiredIfActiveMissingTiles) { |
| AssertNoTilesRequired(pending_layer_->LowResTiling()); |
| } |
| -TEST_F(NoLowResPictureLayerImplTest, |
| - ResourcelessSoftwareDrawHasValidViewportForTilePriority) { |
| +TEST_F(NoLowResPictureLayerImplTest, InvalidViewportForPrioritizingTiles) { |
| base::TimeTicks time_ticks; |
| time_ticks += base::TimeDelta::FromMilliseconds(1); |
| host_impl_.SetCurrentBeginFrameArgs( |
| @@ -3152,6 +3182,8 @@ TEST_F(NoLowResPictureLayerImplTest, |
| SetupDrawPropertiesAndUpdateTiles(active_layer_, 1.f, 1.f, 1.f, 1.f, false); |
| // UpdateTiles with valid viewport. Should update tile viewport. |
| + // Note viewport is considered invalid if and only if in resourceless |
| + // software draw. |
| bool resourceless_software_draw = false; |
| gfx::Rect viewport = gfx::Rect(layer_bounds); |
| gfx::Transform transform; |
| @@ -3163,7 +3195,7 @@ TEST_F(NoLowResPictureLayerImplTest, |
| resourceless_software_draw); |
| active_layer_->draw_properties().visible_content_rect = viewport; |
| active_layer_->draw_properties().screen_space_transform = transform; |
| - active_layer_->UpdateTiles(Occlusion()); |
| + active_layer_->UpdateTiles(Occlusion(), !resourceless_software_draw); |
| gfx::Rect visible_rect_for_tile_priority = |
| active_layer_->visible_rect_for_tile_priority(); |
| @@ -3174,9 +3206,8 @@ TEST_F(NoLowResPictureLayerImplTest, |
| gfx::Transform screen_space_transform_for_tile_priority = |
| active_layer_->screen_space_transform_for_tile_priority(); |
| - // PictureLayerImpl does not make a special case for |
| - // resource_less_software_draw, so the tile viewport and matrix should be |
| - // respected. |
| + // Expand viewport and set it as invalid for prioritizing tiles. |
| + // Should update viewport and transform, but not update visible rect. |
| time_ticks += base::TimeDelta::FromMilliseconds(200); |
| host_impl_.SetCurrentBeginFrameArgs( |
| CreateBeginFrameArgsForTesting(time_ticks)); |
| @@ -3191,21 +3222,37 @@ TEST_F(NoLowResPictureLayerImplTest, |
| viewport, |
| transform, |
| resourceless_software_draw); |
| - active_layer_->UpdateTiles(Occlusion()); |
| - |
| - visible_rect_for_tile_priority = |
| - gfx::ScaleToEnclosingRect(visible_rect_for_tile_priority, 2); |
| - viewport_rect_for_tile_priority = |
| - gfx::ScaleToEnclosingRect(viewport_rect_for_tile_priority, 2); |
| - screen_space_transform_for_tile_priority = transform; |
| + active_layer_->UpdateTiles(Occlusion(), !resourceless_software_draw); |
| + // Viewport and transform for tile priority are updated. |
| + EXPECT_RECT_EQ(viewport, active_layer_->viewport_rect_for_tile_priority()); |
| + EXPECT_TRANSFORMATION_MATRIX_EQ( |
| + transform, active_layer_->screen_space_transform_for_tile_priority()); |
| + // Visible rect for tile priority retains old value. |
| EXPECT_RECT_EQ(visible_rect_for_tile_priority, |
| active_layer_->visible_rect_for_tile_priority()); |
| - EXPECT_RECT_EQ(viewport_rect_for_tile_priority, |
| - active_layer_->viewport_rect_for_tile_priority()); |
| + |
| + // Keep expanded viewport but mark it valid. Should update tile viewport. |
| + time_ticks += base::TimeDelta::FromMilliseconds(200); |
| + host_impl_.SetCurrentBeginFrameArgs( |
| + CreateBeginFrameArgsForTesting(time_ticks)); |
| + resourceless_software_draw = false; |
| + host_impl_.SetExternalDrawConstraints(transform, |
| + viewport, |
| + viewport, |
| + viewport, |
| + transform, |
| + resourceless_software_draw); |
| + active_layer_->UpdateTiles(Occlusion(), !resourceless_software_draw); |
| + |
| EXPECT_TRANSFORMATION_MATRIX_EQ( |
| - screen_space_transform_for_tile_priority, |
| - active_layer_->screen_space_transform_for_tile_priority()); |
| + transform, active_layer_->screen_space_transform_for_tile_priority()); |
| + EXPECT_RECT_EQ(viewport, active_layer_->visible_rect_for_tile_priority()); |
| + |
| + gfx::Rect viewport_rect_in_layer = |
| + active_layer_->viewport_rect_for_tile_priority(); |
| + viewport_rect_in_layer.Offset(1, 1); // Match translate in |transform|. |
| + EXPECT_RECT_EQ(viewport, viewport_rect_in_layer); |
| } |
| TEST_F(NoLowResPictureLayerImplTest, CleanUpTilings) { |