| 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..0bd471851f3cb05070950c6c0dc0b999e387bc14 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 resourceless_software_draw = false;
|
| + layer->UpdateTiles(Occlusion(), resourceless_software_draw);
|
| }
|
| static void VerifyAllTilesExistAndHavePile(
|
| const PictureLayerTiling* tiling,
|
| @@ -264,7 +265,7 @@ class PictureLayerImplTest : public testing::Test {
|
| // neighboring tiles which indicates that the tile grid embedded in
|
| // SkPicture is perfectly aligned with the compositor's tiles.
|
| EXPECT_EQ(1u, mock_canvas.rects_.size());
|
| - EXPECT_RECT_EQ(*rect_iter, mock_canvas.rects_[0]);
|
| + EXPECT_EQ(*rect_iter, mock_canvas.rects_[0]);
|
| rect_iter++;
|
| }
|
| }
|
| @@ -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,36 @@ TEST_F(PictureLayerImplTest,
|
| 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;
|
| - 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());
|
| + active_layer_->UpdateTiles(Occlusion(), resourceless_software_draw);
|
| +
|
| + // Viewport and transform for tile priority are updated.
|
| + EXPECT_EQ(viewport, active_layer_->viewport_rect_for_tile_priority());
|
| 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());
|
| + // Visible rect for tile priority retains old value.
|
| + EXPECT_EQ(visible_rect_for_tile_priority,
|
| + active_layer_->visible_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(
|
| + transform, active_layer_->screen_space_transform_for_tile_priority());
|
| + EXPECT_EQ(viewport, active_layer_->visible_rect_for_tile_priority());
|
| +
|
| + // Match the reverse translate in |transform|.
|
| + EXPECT_EQ(viewport - gfx::Vector2d(1, 1),
|
| + active_layer_->viewport_rect_for_tile_priority());
|
| }
|
|
|
| TEST_F(PictureLayerImplTest, ClonePartialInvalidation) {
|
| @@ -1419,14 +1436,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_EQ(viewport, pending_layer_->visible_rect_for_tile_priority());
|
|
|
| // Fake set priorities.
|
| for (PictureLayerTiling::CoverageIterator iter(
|
| @@ -1439,7 +1465,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 +1542,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 +2606,8 @@ TEST_F(PictureLayerImplTest, LayerRasterTileIterator) {
|
|
|
| pending_layer_->draw_properties().visible_content_rect =
|
| gfx::Rect(1100, 1100, 500, 500);
|
| - pending_layer_->UpdateTiles(Occlusion());
|
| + bool resourceless_software_draw = false;
|
| + pending_layer_->UpdateTiles(Occlusion(), resourceless_software_draw);
|
|
|
| unique_tiles.clear();
|
| high_res_tile_count = 0u;
|
| @@ -2609,7 +2637,7 @@ 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(), resourceless_software_draw);
|
|
|
| std::vector<Tile*> high_res_tiles = high_res_tiling->AllTilesForTesting();
|
| for (std::vector<Tile*>::iterator tile_it = high_res_tiles.begin();
|
| @@ -3130,8 +3158,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 +3179,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 +3192,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 +3203,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 +3219,36 @@ 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;
|
| -
|
| - 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());
|
| + active_layer_->UpdateTiles(Occlusion(), resourceless_software_draw);
|
| +
|
| + // Viewport and transform for tile priority are updated.
|
| + EXPECT_EQ(viewport, active_layer_->viewport_rect_for_tile_priority());
|
| 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());
|
| + // Visible rect for tile priority retains old value.
|
| + EXPECT_EQ(visible_rect_for_tile_priority,
|
| + active_layer_->visible_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(
|
| + transform, active_layer_->screen_space_transform_for_tile_priority());
|
| + EXPECT_EQ(viewport, active_layer_->visible_rect_for_tile_priority());
|
| +
|
| + // Match the reverse translate in |transform|.
|
| + EXPECT_EQ(viewport - gfx::Vector2d(1, 1),
|
| + active_layer_->viewport_rect_for_tile_priority());
|
| }
|
|
|
| TEST_F(NoLowResPictureLayerImplTest, CleanUpTilings) {
|
|
|