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

Unified Diff: cc/layers/picture_layer_impl_unittest.cc

Issue 616543004: cc: Use visible_rect_for_tile_priority_ where approriate (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Offset Created 6 years, 3 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.cc ('k') | cc/resources/tile_manager_perftest.cc » ('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 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) {
« no previous file with comments | « cc/layers/picture_layer_impl.cc ('k') | cc/resources/tile_manager_perftest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698