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

Unified Diff: cc/layers/picture_layer_impl_unittest.cc

Issue 1591513002: cc: Early out of UpdateTiles for resoureceless draw (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: comment, test Created 4 years, 11 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
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 5d16d8f69195376bacd0762e82a79eab4a4a1ae4..dd3c35fe70c667b295bca3913478cd2a884768ed 100644
--- a/cc/layers/picture_layer_impl_unittest.cc
+++ b/cc/layers/picture_layer_impl_unittest.cc
@@ -267,14 +267,13 @@ class PictureLayerImplTest : public testing::Test {
host_impl_.pending_tree()->UpdateDrawProperties(update_lcd_text);
}
- void SetupDrawPropertiesAndUpdateTiles(
- FakePictureLayerImpl* layer,
- float ideal_contents_scale,
- float device_scale_factor,
- float page_scale_factor,
- float maximum_animation_contents_scale,
- float starting_animation_contents_scale,
- bool animating_transform_to_screen) {
+ void SetupDrawProperties(FakePictureLayerImpl* layer,
+ float ideal_contents_scale,
+ float device_scale_factor,
+ float page_scale_factor,
+ float maximum_animation_contents_scale,
+ float starting_animation_contents_scale,
+ bool animating_transform_to_screen) {
layer->layer_tree_impl()->SetDeviceScaleFactor(device_scale_factor);
host_impl_.active_tree()->SetPageScaleOnActiveTree(page_scale_factor);
@@ -288,9 +287,24 @@ class PictureLayerImplTest : public testing::Test {
starting_animation_contents_scale;
layer->draw_properties().screen_space_transform_is_animating =
animating_transform_to_screen;
+ }
+
+ void SetupDrawPropertiesAndUpdateTiles(
+ FakePictureLayerImpl* layer,
+ float ideal_contents_scale,
+ float device_scale_factor,
+ float page_scale_factor,
+ float maximum_animation_contents_scale,
+ float starting_animation_contents_scale,
+ bool animating_transform_to_screen) {
+ SetupDrawProperties(layer, ideal_contents_scale, device_scale_factor,
+ page_scale_factor, maximum_animation_contents_scale,
+ starting_animation_contents_scale,
+ animating_transform_to_screen);
bool resourceless_software_draw = false;
layer->UpdateTiles(resourceless_software_draw);
}
+
static void VerifyAllPrioritizedTilesExistAndHaveRasterSource(
const PictureLayerTiling* tiling,
DisplayListRasterSource* raster_source) {
@@ -546,87 +560,28 @@ TEST_F(PictureLayerImplTest, ExternalViewportRectForPrioritizingTiles) {
}
}
-TEST_F(PictureLayerImplTest, InvalidViewportForPrioritizingTiles) {
- host_impl_.AdvanceToNextFrame(base::TimeDelta::FromMilliseconds(1));
+TEST_F(PictureLayerImplTest, SkipUpdateTilesInResourcelessDraw) {
gfx::Size layer_bounds(400, 400);
SetupDefaultTrees(layer_bounds);
- SetupDrawPropertiesAndUpdateTiles(active_layer_, 1.f, 1.f, 1.f, 1.f, 0.f,
- false);
+ float ideal_contents_scale = 1.f;
+ SetupDrawProperties(active_layer_, ideal_contents_scale, 1.f, 1.f, 1.f, 0.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 draw_transform;
- gfx::Transform tile_priority_transform;
- host_impl_.SetExternalTilePriorityConstraints(viewport,
- tile_priority_transform);
- active_layer_->draw_properties().visible_layer_rect = viewport;
- active_layer_->draw_properties().screen_space_transform = draw_transform;
active_layer_->UpdateTiles(resourceless_software_draw);
+ EXPECT_EQ(ideal_contents_scale, active_layer_->ideal_contents_scale());
- gfx::Rect visible_rect_for_tile_priority =
- active_layer_->visible_rect_for_tile_priority();
- EXPECT_FALSE(visible_rect_for_tile_priority.IsEmpty());
- gfx::Transform screen_space_transform_for_tile_priority =
- active_layer_->draw_properties().screen_space_transform;
-
- // Expand viewport and set it as invalid for prioritizing tiles.
- // Should update viewport and transform, but not update visible rect.
- host_impl_.AdvanceToNextFrame(base::TimeDelta::FromMilliseconds(200));
+ float new_ideal_contents_scale = 2.f;
resourceless_software_draw = true;
- viewport = gfx::ScaleToEnclosingRect(viewport, 2);
- tile_priority_transform.Translate(1.f, 0.f);
- draw_transform.Translate(0.f, 1.f);
- active_layer_->draw_properties().visible_layer_rect = viewport;
- active_layer_->draw_properties().screen_space_transform = draw_transform;
- host_impl_.SetExternalTilePriorityConstraints(viewport,
- tile_priority_transform);
- active_layer_->UpdateTiles(resourceless_software_draw);
+ SetupDrawProperties(active_layer_, new_ideal_contents_scale, 1.f, 1.f, 1.f,
+ 0.f, false);
+ EXPECT_FALSE(active_layer_->UpdateTiles(resourceless_software_draw));
+ EXPECT_EQ(ideal_contents_scale, active_layer_->ideal_contents_scale());
- // Transform for tile priority is not updated.
- EXPECT_TRANSFORMATION_MATRIX_EQ(
- screen_space_transform_for_tile_priority,
- 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());
- ASSERT_GT(active_layer_->picture_layer_tiling_set()->num_tilings(), 0u);
- EXPECT_EQ(active_layer_->viewport_rect_for_tile_priority_in_content_space(),
- active_layer_->picture_layer_tiling_set()
- ->tiling_at(0)
- ->GetCurrentVisibleRectForTesting());
-
- // Keep expanded viewport but mark it valid. Should update tile viewport.
- host_impl_.AdvanceToNextFrame(base::TimeDelta::FromMilliseconds(200));
resourceless_software_draw = false;
- host_impl_.SetExternalTilePriorityConstraints(viewport,
- tile_priority_transform);
- active_layer_->UpdateTiles(resourceless_software_draw);
-
- EXPECT_TRANSFORMATION_MATRIX_EQ(
- draw_transform,
- active_layer_->screen_space_transform_for_tile_priority());
- EXPECT_EQ(viewport, active_layer_->visible_rect_for_tile_priority());
-
- gfx::RectF visible_rect_in_content_space(viewport);
- gfx::Transform inverse_draw_transform;
- gfx::Transform inverse_tile_priority_transform;
- EXPECT_TRUE(draw_transform.GetInverse(&inverse_draw_transform));
- EXPECT_TRUE(
- tile_priority_transform.GetInverse(&inverse_tile_priority_transform));
- visible_rect_in_content_space = MathUtil::ProjectClippedRect(
- inverse_tile_priority_transform, visible_rect_in_content_space);
- visible_rect_in_content_space = MathUtil::ProjectClippedRect(
- inverse_draw_transform, visible_rect_in_content_space);
-
- ASSERT_GT(active_layer_->picture_layer_tiling_set()->num_tilings(), 0u);
- EXPECT_EQ(gfx::ToEnclosingRect(visible_rect_in_content_space),
- active_layer_->picture_layer_tiling_set()
- ->tiling_at(0)
- ->GetCurrentVisibleRectForTesting());
+ EXPECT_TRUE(active_layer_->UpdateTiles(resourceless_software_draw));
+ EXPECT_EQ(new_ideal_contents_scale, active_layer_->ideal_contents_scale());
}
TEST_F(PictureLayerImplTest, ViewportRectForTilePriorityIsCached) {
@@ -3669,60 +3624,6 @@ TEST_F(NoLowResPictureLayerImplTest, NothingRequiredIfActiveMissingTiles) {
AssertNoTilesRequired(pending_layer_->LowResTiling());
}
-TEST_F(NoLowResPictureLayerImplTest, InvalidViewportForPrioritizingTiles) {
- host_impl_.AdvanceToNextFrame(base::TimeDelta::FromMilliseconds(1));
- gfx::Size layer_bounds(400, 400);
- SetupDefaultTrees(layer_bounds);
-
- SetupDrawPropertiesAndUpdateTiles(active_layer_, 1.f, 1.f, 1.f, 1.f, 0.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;
- host_impl_.SetExternalTilePriorityConstraints(viewport, transform);
- active_layer_->draw_properties().visible_layer_rect = viewport;
- active_layer_->draw_properties().screen_space_transform = transform;
- active_layer_->UpdateTiles(resourceless_software_draw);
-
- gfx::Rect visible_rect_for_tile_priority =
- active_layer_->visible_rect_for_tile_priority();
- EXPECT_FALSE(visible_rect_for_tile_priority.IsEmpty());
- gfx::Transform screen_space_transform_for_tile_priority =
- active_layer_->draw_properties().screen_space_transform;
-
- // Expand viewport and set it as invalid for prioritizing tiles.
- // Should update viewport and transform, but not update visible rect.
- host_impl_.AdvanceToNextFrame(base::TimeDelta::FromMilliseconds(200));
- resourceless_software_draw = true;
- viewport = gfx::ScaleToEnclosingRect(viewport, 2);
- transform.Translate(1.f, 1.f);
- active_layer_->draw_properties().visible_layer_rect = viewport;
- active_layer_->draw_properties().screen_space_transform = transform;
- host_impl_.SetExternalTilePriorityConstraints(viewport, transform);
- active_layer_->UpdateTiles(resourceless_software_draw);
-
- // Transform for tile priority is updated.
- EXPECT_TRANSFORMATION_MATRIX_EQ(
- transform, active_layer_->draw_properties().screen_space_transform);
- // 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.
- host_impl_.AdvanceToNextFrame(base::TimeDelta::FromMilliseconds(200));
- resourceless_software_draw = false;
- host_impl_.SetExternalTilePriorityConstraints(viewport, transform);
- active_layer_->UpdateTiles(resourceless_software_draw);
-
- EXPECT_TRANSFORMATION_MATRIX_EQ(
- transform, active_layer_->draw_properties().screen_space_transform);
- EXPECT_EQ(viewport, active_layer_->visible_rect_for_tile_priority());
-}
-
TEST_F(NoLowResPictureLayerImplTest, CleanUpTilings) {
gfx::Size layer_bounds(1300, 1900);
std::vector<PictureLayerTiling*> used_tilings;

Powered by Google App Engine
This is Rietveld 408576698