| Index: cc/resources/picture_pile_unittest.cc
|
| diff --git a/cc/resources/picture_pile_unittest.cc b/cc/resources/picture_pile_unittest.cc
|
| index 03878630f6329831d46fa68ed629586c11f93697..e33a8f0676d5fa47986fc90c6ba04dc3dd8becab 100644
|
| --- a/cc/resources/picture_pile_unittest.cc
|
| +++ b/cc/resources/picture_pile_unittest.cc
|
| @@ -51,20 +51,26 @@ class PicturePileTest : public testing::Test {
|
|
|
| gfx::Rect tiling_rect() const { return pile_->tiling_rect(); }
|
|
|
| - bool Update(const Region& invalidation, const gfx::Rect& visible_layer_rect) {
|
| + bool UpdateAndExpandInvalidation(Region* invalidation,
|
| + const gfx::Rect& visible_layer_rect) {
|
| frame_number_++;
|
| - return pile_->Update(&client_,
|
| - background_color_,
|
| - contents_opaque_,
|
| - false,
|
| - invalidation,
|
| - visible_layer_rect,
|
| - frame_number_,
|
| - Picture::RECORD_NORMALLY,
|
| - &stats_instrumentation_);
|
| + return pile_->UpdateAndExpandInvalidation(&client_,
|
| + invalidation,
|
| + background_color_,
|
| + contents_opaque_,
|
| + false,
|
| + visible_layer_rect,
|
| + frame_number_,
|
| + Picture::RECORD_NORMALLY,
|
| + &stats_instrumentation_);
|
| }
|
|
|
| - bool UpdateWholePile() { return Update(tiling_rect(), tiling_rect()); }
|
| + bool UpdateWholePile() {
|
| + Region invalidation = tiling_rect();
|
| + bool result = UpdateAndExpandInvalidation(&invalidation, tiling_rect());
|
| + EXPECT_EQ(tiling_rect().ToString(), invalidation.ToString());
|
| + return result;
|
| + }
|
|
|
| FakeContentLayerClient client_;
|
| FakeRenderingStatsInstrumentation stats_instrumentation_;
|
| @@ -79,8 +85,9 @@ TEST_F(PicturePileTest, SmallInvalidateInflated) {
|
| UpdateWholePile();
|
|
|
| // Invalidate something inside a tile.
|
| - gfx::Rect invalidate_rect(50, 50, 1, 1);
|
| - Update(invalidate_rect, tiling_rect());
|
| + Region invalidate_rect(gfx::Rect(50, 50, 1, 1));
|
| + UpdateAndExpandInvalidation(&invalidate_rect, tiling_rect());
|
| + EXPECT_EQ(tiling_rect().ToString(), invalidate_rect.ToString());
|
|
|
| EXPECT_EQ(1, pile_->tiling().num_tiles_x());
|
| EXPECT_EQ(1, pile_->tiling().num_tiles_y());
|
| @@ -102,8 +109,9 @@ TEST_F(PicturePileTest, LargeInvalidateInflated) {
|
| UpdateWholePile();
|
|
|
| // Invalidate something inside a tile.
|
| - gfx::Rect invalidate_rect(50, 50, 100, 100);
|
| - Update(invalidate_rect, tiling_rect());
|
| + Region invalidate_rect(gfx::Rect(50, 50, 100, 100));
|
| + UpdateAndExpandInvalidation(&invalidate_rect, tiling_rect());
|
| + EXPECT_EQ(tiling_rect().ToString(), invalidate_rect.ToString());
|
|
|
| EXPECT_EQ(1, pile_->tiling().num_tiles_x());
|
| EXPECT_EQ(1, pile_->tiling().num_tiles_y());
|
| @@ -143,12 +151,17 @@ TEST_F(PicturePileTest, InvalidateOnTileBoundaryInflated) {
|
|
|
| // Invalidate something just over a tile boundary by a single pixel.
|
| // This will invalidate the tile (1, 1), as well as 1 row of pixels in (1, 0).
|
| - gfx::Rect invalidate_rect(
|
| - pile_->tiling().TileBoundsWithBorder(0, 0).right(),
|
| - pile_->tiling().TileBoundsWithBorder(0, 0).bottom() - 1,
|
| - 50,
|
| - 50);
|
| - Update(invalidate_rect, tiling_rect());
|
| + Region invalidate_rect(
|
| + gfx::Rect(pile_->tiling().TileBoundsWithBorder(0, 0).right(),
|
| + pile_->tiling().TileBoundsWithBorder(0, 0).bottom() - 1,
|
| + 50,
|
| + 50));
|
| + UpdateAndExpandInvalidation(&invalidate_rect, tiling_rect());
|
| +
|
| + gfx::Rect expected_invalidation =
|
| + gfx::UnionRects(pile_->tiling().TileBoundsWithBorder(1, 1),
|
| + pile_->tiling().TileBoundsWithBorder(1, 0));
|
| + EXPECT_EQ(expected_invalidation.ToString(), invalidate_rect.ToString());
|
|
|
| for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) {
|
| for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) {
|
| @@ -197,9 +210,11 @@ TEST_F(PicturePileTest, StopRecordingOffscreenInvalidations) {
|
| }
|
| }
|
|
|
| - // Update once more with a small viewport tiilng_rect.x(), tiilng_rect.y(),
|
| - // tiling_rect.width() by 1
|
| - Update(tiling_rect(), viewport);
|
| + // Update once more with a small viewport tiilng_rect.x(), tiling_rect.y(),
|
| + // tiling_rect.width() by 1.
|
| + Region invalidation = tiling_rect();
|
| + UpdateAndExpandInvalidation(&invalidation, viewport);
|
| + EXPECT_EQ(tiling_rect().ToString(), invalidation.ToString());
|
|
|
| for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) {
|
| for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) {
|
| @@ -219,7 +234,9 @@ TEST_F(PicturePileTest, StopRecordingOffscreenInvalidations) {
|
| }
|
|
|
| // Now update with no invalidation and full viewport
|
| - Update(gfx::Rect(), tiling_rect());
|
| + Region empty_invalidation;
|
| + UpdateAndExpandInvalidation(&empty_invalidation, tiling_rect());
|
| + EXPECT_EQ(Region().ToString(), empty_invalidation.ToString());
|
|
|
| for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) {
|
| for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) {
|
| @@ -291,7 +308,9 @@ TEST_F(PicturePileTest, FrequentInvalidationCanRaster) {
|
|
|
| // Update once more with a small viewport.
|
| gfx::Rect viewport(0, 0, tiling_rect().width(), 1);
|
| - Update(tiling_rect(), viewport);
|
| + Region invalidation(tiling_rect());
|
| + UpdateAndExpandInvalidation(&invalidation, viewport);
|
| + EXPECT_EQ(tiling_rect().ToString(), invalidation.ToString());
|
|
|
| // Sanity check some pictures exist and others don't.
|
| EXPECT_TRUE(pile_->picture_map()
|
| @@ -315,16 +334,62 @@ TEST_F(PicturePileTest, NoInvalidationValidViewport) {
|
| EXPECT_TRUE(!pile_->recorded_viewport().IsEmpty());
|
|
|
| // No invalidation, same viewport.
|
| - Update(gfx::Rect(), tiling_rect());
|
| + Region invalidation;
|
| + UpdateAndExpandInvalidation(&invalidation, tiling_rect());
|
| EXPECT_TRUE(!pile_->recorded_viewport().IsEmpty());
|
| + EXPECT_EQ(Region().ToString(), invalidation.ToString());
|
|
|
| // Partial invalidation, same viewport.
|
| - Update(gfx::Rect(gfx::Rect(0, 0, 1, 1)), tiling_rect());
|
| + invalidation = gfx::Rect(0, 0, 1, 1);
|
| + UpdateAndExpandInvalidation(&invalidation, tiling_rect());
|
| EXPECT_TRUE(!pile_->recorded_viewport().IsEmpty());
|
| + EXPECT_EQ(pile_->tiling().TileBounds(0, 0).ToString(),
|
| + invalidation.ToString());
|
|
|
| // No invalidation, changing viewport.
|
| - Update(gfx::Rect(), gfx::Rect(5, 5, 5, 5));
|
| + invalidation = Region();
|
| + UpdateAndExpandInvalidation(&invalidation, gfx::Rect(5, 5, 5, 5));
|
| EXPECT_TRUE(!pile_->recorded_viewport().IsEmpty());
|
| + EXPECT_EQ(Region().ToString(), invalidation.ToString());
|
| +}
|
| +
|
| +TEST_F(PicturePileTest, InvalidateOutsideRecordingViewport) {
|
| + gfx::Rect huge_page(10000000, 20000000);
|
| + pile_->SetTilingRect(huge_page);
|
| +
|
| + gfx::Rect viewport(8000, 9000, 2000, 2000);
|
| +
|
| + // For no invalidation, only the recorded viewport should be
|
| + // considered as not-potentially-invalid.
|
| + Region invalidation;
|
| + UpdateAndExpandInvalidation(&invalidation, viewport);
|
| +
|
| + gfx::Rect recording_viewport = pile_->recorded_viewport();
|
| + Region expected_invalidation = SubtractRegions(huge_page, recording_viewport);
|
| + EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString());
|
| +
|
| + // With some invalidation, that should also be included and expanded to cover
|
| + // the entire recording tiles it overlaps.
|
| + gfx::Rect invalid_rect(7080, 10000, 200, 1000);
|
| + invalidation = invalid_rect;
|
| + UpdateAndExpandInvalidation(&invalidation, viewport);
|
| +
|
| + int left_tile =
|
| + pile_->tiling().FirstBorderTileXIndexFromSrcCoord(invalid_rect.x());
|
| + int top_tile =
|
| + pile_->tiling().FirstBorderTileYIndexFromSrcCoord(invalid_rect.y());
|
| + int right_tile = pile_->tiling().LastBorderTileXIndexFromSrcCoord(
|
| + invalid_rect.right() - 1);
|
| + int bottom_tile = pile_->tiling().LastBorderTileYIndexFromSrcCoord(
|
| + invalid_rect.bottom() - 1);
|
| + int left = pile_->tiling().TileBoundsWithBorder(left_tile, top_tile).x();
|
| + int top = pile_->tiling().TileBoundsWithBorder(left_tile, top_tile).y();
|
| + int right =
|
| + pile_->tiling().TileBoundsWithBorder(right_tile, bottom_tile).right();
|
| + int bottom =
|
| + pile_->tiling().TileBoundsWithBorder(right_tile, bottom_tile).bottom();
|
| + expected_invalidation.Union(gfx::Rect(left, top, right - left, bottom - top));
|
| + EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString());
|
| }
|
|
|
| } // namespace
|
|
|