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

Unified Diff: cc/resources/picture_layer_tiling_unittest.cc

Issue 13895005: cc: Find a better prioritized rect when the viewport rect is huge. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: early out restored Created 7 years, 8 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/resources/picture_layer_tiling_set.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/resources/picture_layer_tiling_unittest.cc
diff --git a/cc/resources/picture_layer_tiling_unittest.cc b/cc/resources/picture_layer_tiling_unittest.cc
index 5e29b826275064786933a743a10812754c712c7c..a17c02504f0a0cb12f7838e4276475acd89667be 100644
--- a/cc/resources/picture_layer_tiling_unittest.cc
+++ b/cc/resources/picture_layer_tiling_unittest.cc
@@ -421,6 +421,7 @@ TEST_F(PictureLayerTilingIteratorTest, TilesExist) {
ACTIVE_TREE,
layer_bounds, // device viewport
gfx::Rect(layer_bounds), // viewport in layer space
+ gfx::Rect(layer_bounds), // visible content rect
layer_bounds, // last layer bounds
layer_bounds, // current layer bounds
1.f, // last contents scale
@@ -438,6 +439,7 @@ TEST_F(PictureLayerTilingIteratorTest, TilesExist) {
ACTIVE_TREE,
layer_bounds, // device viewport
gfx::Rect(), // viewport in layer space
+ gfx::Rect(), // visible content rect
layer_bounds, // last layer bounds
layer_bounds, // current layer bounds
1.f, // last contents scale
@@ -451,5 +453,154 @@ TEST_F(PictureLayerTilingIteratorTest, TilesExist) {
VerifyTiles(1.f, gfx::Rect(layer_bounds), base::Bind(&TileExists, false));
}
+TEST_F(PictureLayerTilingIteratorTest, TilesExistGiantViewport) {
+ gfx::Size layer_bounds(1099, 801);
+ Initialize(gfx::Size(100, 100), 1.f, layer_bounds);
+ VerifyTilesExactlyCoverRect(1.f, gfx::Rect(layer_bounds));
+ VerifyTiles(1.f, gfx::Rect(layer_bounds), base::Bind(&TileExists, false));
+
+ gfx::Rect giant_rect(-10000000, -10000000, 1000000000, 1000000000);
+
+ tiling_->UpdateTilePriorities(
+ ACTIVE_TREE,
+ layer_bounds, // device viewport
+ giant_rect, // viewport in layer space
+ gfx::Rect(layer_bounds), // visible content rect
+ layer_bounds, // last layer bounds
+ layer_bounds, // current layer bounds
+ 1.f, // last contents scale
+ 1.f, // current contents scale
+ gfx::Transform(), // last screen transform
+ gfx::Transform(), // current screen transform
+ 1, // current frame number
+ 1.0, // current frame time
+ false, // store screen space quads on tiles
+ 10000); // max tiles in tile manager
+ VerifyTiles(1.f, gfx::Rect(layer_bounds), base::Bind(&TileExists, true));
+
+ // If the visible content rect is empty, it should still have live tiles.
+ tiling_->UpdateTilePriorities(
+ ACTIVE_TREE,
+ layer_bounds, // device viewport
+ giant_rect, // viewport in layer space
+ gfx::Rect(), // visible content rect
+ layer_bounds, // last layer bounds
+ layer_bounds, // current layer bounds
+ 1.f, // last contents scale
+ 1.f, // current contents scale
+ gfx::Transform(), // last screen transform
+ gfx::Transform(), // current screen transform
+ 2, // current frame number
+ 2.0, // current frame time
+ false, // store screen space quads on tiles
+ 10000); // max tiles in tile manager
+ VerifyTiles(1.f, gfx::Rect(layer_bounds), base::Bind(&TileExists, true));
+}
+
+TEST_F(PictureLayerTilingIteratorTest, TilesExistOutsideViewport) {
+ gfx::Size layer_bounds(1099, 801);
+ Initialize(gfx::Size(100, 100), 1.f, layer_bounds);
+ VerifyTilesExactlyCoverRect(1.f, gfx::Rect(layer_bounds));
+ VerifyTiles(1.f, gfx::Rect(layer_bounds), base::Bind(&TileExists, false));
+
+ // This rect does not intersect with the layer, as the layer is outside the
+ // viewport.
+ gfx::Rect viewport_rect(1100, 0, 1000, 1000);
+ EXPECT_FALSE(viewport_rect.Intersects(gfx::Rect(layer_bounds)));
+
+ tiling_->UpdateTilePriorities(
+ ACTIVE_TREE,
+ layer_bounds, // device viewport
+ viewport_rect, // viewport in layer space
+ gfx::Rect(), // visible content rect
+ layer_bounds, // last layer bounds
+ layer_bounds, // current layer bounds
+ 1.f, // last contents scale
+ 1.f, // current contents scale
+ gfx::Transform(), // last screen transform
+ gfx::Transform(), // current screen transform
+ 2, // current frame number
+ 2.0, // current frame time
+ false, // store screen space quads on tiles
+ 10000); // max tiles in tile manager
+ VerifyTiles(1.f, gfx::Rect(layer_bounds), base::Bind(&TileExists, true));
+}
+
+static void TilesIntersectingRectExist(gfx::Rect rect, Tile* tile) {
+ ASSERT_TRUE(tile != NULL);
+ bool expected_live = rect.Intersects(tile->content_rect());
+ EXPECT_EQ(expected_live, tile->priority(ACTIVE_TREE).is_live) <<
+ "Rects intersecting " << rect.ToString() << " should exist. " <<
+ "Current tile rect is " << tile->content_rect().ToString();
+}
+
+TEST_F(PictureLayerTilingIteratorTest,
+ TilesExistLargeViewportAndLayerWithSmallVisibleArea) {
+ gfx::Size layer_bounds(10000, 10000);
+ Initialize(gfx::Size(100, 100), 1.f, layer_bounds);
+ VerifyTilesExactlyCoverRect(1.f, gfx::Rect(layer_bounds));
+ VerifyTiles(1.f, gfx::Rect(layer_bounds), base::Bind(&TileExists, false));
+
+ gfx::Rect visible_rect(8000, 8000, 50, 50);
+
+ tiling_->UpdateTilePriorities(
+ ACTIVE_TREE,
+ layer_bounds, // device viewport
+ gfx::Rect(layer_bounds), // viewport in layer space
+ visible_rect, // visible content rect
+ layer_bounds, // last layer bounds
+ layer_bounds, // current layer bounds
+ 1.f, // last contents scale
+ 1.f, // current contents scale
+ gfx::Transform(), // last screen transform
+ gfx::Transform(), // current screen transform
+ 2, // current frame number
+ 2.0, // current frame time
+ false, // store screen space quads on tiles
+ 1); // max tiles in tile manager
+ VerifyTiles(1.f,
+ gfx::Rect(layer_bounds),
+ base::Bind(&TilesIntersectingRectExist, visible_rect));
+}
+
+static void CountExistingTiles(int *count, Tile* tile) {
+ ASSERT_TRUE(tile != NULL);
+ if (tile->priority(ACTIVE_TREE).is_live)
+ ++(*count);
+}
+
+TEST_F(PictureLayerTilingIteratorTest,
+ TilesExistLargeViewportAndLayerWithLargeVisibleArea) {
+ gfx::Size layer_bounds(10000, 10000);
+ Initialize(gfx::Size(100, 100), 1.f, layer_bounds);
+ VerifyTilesExactlyCoverRect(1.f, gfx::Rect(layer_bounds));
+ VerifyTiles(1.f, gfx::Rect(layer_bounds), base::Bind(&TileExists, false));
+
+
+ tiling_->UpdateTilePriorities(
+ ACTIVE_TREE,
+ layer_bounds, // device viewport
+ gfx::Rect(layer_bounds), // viewport in layer space
+ gfx::Rect(layer_bounds), // visible content rect
+ layer_bounds, // last layer bounds
+ layer_bounds, // current layer bounds
+ 1.f, // last contents scale
+ 1.f, // current contents scale
+ gfx::Transform(), // last screen transform
+ gfx::Transform(), // current screen transform
+ 2, // current frame number
+ 2.0, // current frame time
+ false, // store screen space quads on tiles
+ 1); // max tiles in tile manager
+
+ int num_tiles = 0;
+ VerifyTiles(1.f,
+ gfx::Rect(layer_bounds),
+ base::Bind(&CountExistingTiles, &num_tiles));
+ // If we're making a rect the size of one tile, it can only overlap up to 4
+ // tiles depending on its position.
+ EXPECT_LE(num_tiles, 4);
+}
+
} // namespace
} // namespace cc
« no previous file with comments | « cc/resources/picture_layer_tiling_set.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698