Index: cc/resources/picture_pile_unittest.cc |
diff --git a/cc/resources/picture_pile_unittest.cc b/cc/resources/picture_pile_unittest.cc |
index 24bed3e64c0303e8ab5a4975d199e2ff40b0e6a2..25e0d128510f2cfef273dc992d5ebfad3a39a0ae 100644 |
--- a/cc/resources/picture_pile_unittest.cc |
+++ b/cc/resources/picture_pile_unittest.cc |
@@ -7,7 +7,7 @@ |
#include "cc/resources/picture_pile.h" |
#include "cc/test/fake_content_layer_client.h" |
-#include "cc/test/fake_rendering_stats_instrumentation.h" |
+#include "cc/test/fake_picture_pile.h" |
#include "testing/gtest/include/gtest/gtest.h" |
#include "ui/gfx/geometry/rect_conversions.h" |
#include "ui/gfx/geometry/size_conversions.h" |
@@ -15,26 +15,6 @@ |
namespace cc { |
namespace { |
-class TestPicturePile : public PicturePile { |
- public: |
- ~TestPicturePile() override {} |
- |
- using PicturePile::buffer_pixels; |
- using PicturePile::CanRasterSlowTileCheck; |
- using PicturePile::Clear; |
- |
- PictureMap& picture_map() { return picture_map_; } |
- const gfx::Rect& recorded_viewport() const { return recorded_viewport_; } |
- |
- bool CanRasterLayerRect(const gfx::Rect& layer_rect) { |
- return CanRaster(1.f, layer_rect); |
- } |
- |
- typedef PicturePile::PictureInfo PictureInfo; |
- typedef PicturePile::PictureMapKey PictureMapKey; |
- typedef PicturePile::PictureMap PictureMap; |
-}; |
- |
class PicturePileTestBase { |
public: |
PicturePileTestBase() |
@@ -56,36 +36,29 @@ class PicturePileTestBase { |
UpdateAndExpandInvalidation(&invalidation, tiling_size, viewport_rect); |
} |
- gfx::Size tiling_size() const { return pile_.tiling_size(); } |
- gfx::Rect tiling_rect() const { return gfx::Rect(pile_.tiling_size()); } |
+ gfx::Size tiling_size() const { return pile_.GetSize(); } |
+ gfx::Rect tiling_rect() const { return gfx::Rect(pile_.GetSize()); } |
bool UpdateAndExpandInvalidation(Region* invalidation, |
const gfx::Size& layer_size, |
const gfx::Rect& visible_layer_rect) { |
frame_number_++; |
- return pile_.UpdateAndExpandInvalidation(&client_, |
- invalidation, |
- background_color_, |
- contents_opaque_, |
- false, |
- layer_size, |
- visible_layer_rect, |
- frame_number_, |
- Picture::RECORD_NORMALLY, |
- &stats_instrumentation_); |
+ return pile_.UpdateAndExpandInvalidation( |
+ &client_, invalidation, background_color_, contents_opaque_, false, |
+ layer_size, visible_layer_rect, frame_number_, |
+ Picture::RECORD_NORMALLY); |
} |
bool UpdateWholePile() { |
Region invalidation = tiling_rect(); |
- bool result = UpdateAndExpandInvalidation( |
- &invalidation, tiling_size(), tiling_rect()); |
+ bool result = UpdateAndExpandInvalidation(&invalidation, tiling_size(), |
+ tiling_rect()); |
EXPECT_EQ(tiling_rect().ToString(), invalidation.ToString()); |
return result; |
} |
FakeContentLayerClient client_; |
- FakeRenderingStatsInstrumentation stats_instrumentation_; |
- TestPicturePile pile_; |
+ FakePicturePile pile_; |
SkColor background_color_; |
float min_scale_; |
int frame_number_; |
@@ -99,7 +72,7 @@ class PicturePileTest : public PicturePileTestBase, public testing::Test { |
TEST_F(PicturePileTest, InvalidationOnTileBorderOutsideInterestRect) { |
// Don't expand the interest rect past what we invalidate. |
- pile_.SetPixelRecordDistanceForTesting(0); |
+ pile_.SetPixelRecordDistance(0); |
gfx::Size tile_size(100, 100); |
pile_.tiling().SetMaxTextureSize(tile_size); |
@@ -182,8 +155,8 @@ TEST_F(PicturePileTest, SmallInvalidateInflated) { |
EXPECT_EQ(1, pile_.tiling().num_tiles_x()); |
EXPECT_EQ(1, pile_.tiling().num_tiles_y()); |
- TestPicturePile::PictureInfo& picture_info = |
- pile_.picture_map().find(TestPicturePile::PictureMapKey(0, 0))->second; |
+ FakePicturePile::PictureInfo& picture_info = |
+ pile_.picture_map().find(FakePicturePile::PictureMapKey(0, 0))->second; |
// We should have a picture. |
EXPECT_TRUE(!!picture_info.GetPicture()); |
gfx::Rect picture_rect = gfx::ScaleToEnclosedRect( |
@@ -204,14 +177,14 @@ TEST_F(PicturePileTest, LargeInvalidateInflated) { |
EXPECT_EQ(1, pile_.tiling().num_tiles_x()); |
EXPECT_EQ(1, pile_.tiling().num_tiles_y()); |
- TestPicturePile::PictureInfo& picture_info = |
- pile_.picture_map().find(TestPicturePile::PictureMapKey(0, 0))->second; |
+ FakePicturePile::PictureInfo& picture_info = |
+ pile_.picture_map().find(FakePicturePile::PictureMapKey(0, 0))->second; |
EXPECT_TRUE(!!picture_info.GetPicture()); |
int expected_inflation = pile_.buffer_pixels(); |
const Picture* base_picture = picture_info.GetPicture(); |
- gfx::Rect base_picture_rect(pile_.tiling_size()); |
+ gfx::Rect base_picture_rect(tiling_size()); |
base_picture_rect.Inset(-expected_inflation, -expected_inflation); |
EXPECT_EQ(base_picture_rect.ToString(), |
base_picture->LayerRect().ToString()); |
@@ -219,7 +192,7 @@ TEST_F(PicturePileTest, LargeInvalidateInflated) { |
TEST_F(PicturePileTest, InvalidateOnTileBoundaryInflated) { |
gfx::Size new_tiling_size = |
- gfx::ToCeiledSize(gfx::ScaleSize(pile_.tiling_size(), 2.f)); |
+ gfx::ToCeiledSize(gfx::ScaleSize(tiling_size(), 2.f)); |
// This creates initial pictures. |
SetTilingSize(new_tiling_size); |
@@ -247,20 +220,20 @@ TEST_F(PicturePileTest, InvalidateOnTileBoundaryInflated) { |
for (int i = 0; i < pile_.tiling().num_tiles_x(); ++i) { |
for (int j = 0; j < pile_.tiling().num_tiles_y(); ++j) { |
- TestPicturePile::PictureInfo& picture_info = |
+ FakePicturePile::PictureInfo& picture_info = |
pile_.picture_map() |
- .find(TestPicturePile::PictureMapKey(i, j)) |
+ .find(FakePicturePile::PictureMapKey(i, j)) |
->second; |
// Expect (1, 1) and (1, 0) to be invalidated once more |
// than the rest of the tiles. |
if (i == 1 && (j == 0 || j == 1)) { |
EXPECT_FLOAT_EQ( |
- 2.0f / TestPicturePile::PictureInfo::INVALIDATION_FRAMES_TRACKED, |
+ 2.0f / FakePicturePile::PictureInfo::INVALIDATION_FRAMES_TRACKED, |
picture_info.GetInvalidationFrequencyForTesting()); |
} else { |
EXPECT_FLOAT_EQ( |
- 1.0f / TestPicturePile::PictureInfo::INVALIDATION_FRAMES_TRACKED, |
+ 1.0f / FakePicturePile::PictureInfo::INVALIDATION_FRAMES_TRACKED, |
picture_info.GetInvalidationFrequencyForTesting()); |
} |
} |
@@ -273,7 +246,7 @@ TEST_F(PicturePileTest, InvalidateOnFullLayer) { |
// Everything was invalidated once so far. |
for (auto& it : pile_.picture_map()) { |
EXPECT_FLOAT_EQ( |
- 1.0f / TestPicturePile::PictureInfo::INVALIDATION_FRAMES_TRACKED, |
+ 1.0f / FakePicturePile::PictureInfo::INVALIDATION_FRAMES_TRACKED, |
it.second.GetInvalidationFrequencyForTesting()); |
} |
@@ -284,14 +257,14 @@ TEST_F(PicturePileTest, InvalidateOnFullLayer) { |
// Everything was invalidated again. |
for (auto& it : pile_.picture_map()) { |
EXPECT_FLOAT_EQ( |
- 2.0f / TestPicturePile::PictureInfo::INVALIDATION_FRAMES_TRACKED, |
+ 2.0f / FakePicturePile::PictureInfo::INVALIDATION_FRAMES_TRACKED, |
it.second.GetInvalidationFrequencyForTesting()); |
} |
} |
TEST_F(PicturePileTest, StopRecordingOffscreenInvalidations) { |
gfx::Size new_tiling_size = |
- gfx::ToCeiledSize(gfx::ScaleSize(pile_.tiling_size(), 4.f)); |
+ gfx::ToCeiledSize(gfx::ScaleSize(tiling_size(), 4.f)); |
SetTilingSize(new_tiling_size); |
gfx::Rect viewport(tiling_size().width(), 1); |
@@ -304,9 +277,9 @@ TEST_F(PicturePileTest, StopRecordingOffscreenInvalidations) { |
// Make sure we have a high invalidation frequency. |
for (int i = 0; i < pile_.tiling().num_tiles_x(); ++i) { |
for (int j = 0; j < pile_.tiling().num_tiles_y(); ++j) { |
- TestPicturePile::PictureInfo& picture_info = |
+ FakePicturePile::PictureInfo& picture_info = |
pile_.picture_map() |
- .find(TestPicturePile::PictureMapKey(i, j)) |
+ .find(FakePicturePile::PictureMapKey(i, j)) |
->second; |
EXPECT_FLOAT_EQ(1.0f, picture_info.GetInvalidationFrequencyForTesting()) |
<< "i " << i << " j " << j; |
@@ -320,9 +293,9 @@ TEST_F(PicturePileTest, StopRecordingOffscreenInvalidations) { |
for (int i = 0; i < pile_.tiling().num_tiles_x(); ++i) { |
for (int j = 0; j < pile_.tiling().num_tiles_y(); ++j) { |
- TestPicturePile::PictureInfo& picture_info = |
+ FakePicturePile::PictureInfo& picture_info = |
pile_.picture_map() |
- .find(TestPicturePile::PictureMapKey(i, j)) |
+ .find(FakePicturePile::PictureMapKey(i, j)) |
->second; |
EXPECT_FLOAT_EQ(1.0f, picture_info.GetInvalidationFrequencyForTesting()); |
@@ -349,15 +322,15 @@ TEST_F(PicturePileTest, StopRecordingOffscreenInvalidations) { |
// Now update with no invalidation and full viewport |
Region empty_invalidation; |
- UpdateAndExpandInvalidation( |
- &empty_invalidation, tiling_size(), tiling_rect()); |
+ UpdateAndExpandInvalidation(&empty_invalidation, tiling_size(), |
+ 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) { |
- TestPicturePile::PictureInfo& picture_info = |
+ FakePicturePile::PictureInfo& picture_info = |
pile_.picture_map() |
- .find(TestPicturePile::PictureMapKey(i, j)) |
+ .find(FakePicturePile::PictureMapKey(i, j)) |
->second; |
// Expect the invalidation frequency to be less than 1, since we just |
// updated with no invalidations. |
@@ -388,7 +361,7 @@ TEST_F(PicturePileTest, FrequentInvalidationCanRaster) { |
// tiles touching it, but is true for adjacent tiles, even if it |
// overlaps on borders (edge case). |
gfx::Size new_tiling_size = |
- gfx::ToCeiledSize(gfx::ScaleSize(pile_.tiling_size(), 4.f)); |
+ gfx::ToCeiledSize(gfx::ScaleSize(tiling_size(), 4.f)); |
SetTilingSize(new_tiling_size); |
gfx::Rect tile01_borders = pile_.tiling().TileBoundsWithBorder(0, 1); |
@@ -422,10 +395,10 @@ TEST_F(PicturePileTest, FrequentInvalidationCanRaster) { |
// Sanity check some pictures exist and others don't. |
EXPECT_TRUE(pile_.picture_map() |
- .find(TestPicturePile::PictureMapKey(0, 1)) |
+ .find(FakePicturePile::PictureMapKey(0, 1)) |
->second.GetPicture()); |
EXPECT_FALSE(pile_.picture_map() |
- .find(TestPicturePile::PictureMapKey(0, 2)) |
+ .find(FakePicturePile::PictureMapKey(0, 2)) |
->second.GetPicture()); |
EXPECT_TRUE(pile_.CanRasterLayerRect(tile01_noborders)); |
@@ -454,8 +427,8 @@ TEST_F(PicturePileTest, NoInvalidationValidViewport) { |
// No invalidation, changing viewport. |
invalidation = Region(); |
- UpdateAndExpandInvalidation( |
- &invalidation, tiling_size(), gfx::Rect(5, 5, 5, 5)); |
+ UpdateAndExpandInvalidation(&invalidation, tiling_size(), |
+ gfx::Rect(5, 5, 5, 5)); |
EXPECT_TRUE(!pile_.recorded_viewport().IsEmpty()); |
EXPECT_EQ(Region().ToString(), invalidation.ToString()); |
} |
@@ -604,9 +577,9 @@ TEST_P(PicturePileResizeCornerTest, ResizePileOutsideInterestRect) { |
EXPECT_EQ(6, pile_.tiling().num_tiles_y()); |
for (int i = 0; i < pile_.tiling().num_tiles_x(); ++i) { |
for (int j = 0; j < pile_.tiling().num_tiles_y(); ++j) { |
- TestPicturePile::PictureMapKey key(i, j); |
- TestPicturePile::PictureMap& map = pile_.picture_map(); |
- TestPicturePile::PictureMap::iterator it = map.find(key); |
+ FakePicturePile::PictureMapKey key(i, j); |
+ FakePicturePile::PictureMap& map = pile_.picture_map(); |
+ FakePicturePile::PictureMap::iterator it = map.find(key); |
EXPECT_TRUE(it != map.end() && it->second.GetPicture()); |
} |
} |
@@ -616,14 +589,15 @@ TEST_P(PicturePileResizeCornerTest, ResizePileOutsideInterestRect) { |
grow_down_tiling_size, |
CornerSinglePixelRect(corner, grow_down_tiling_size)); |
- // We should have lost the recordings in the bottom row. |
+ // We should have lost all of the recordings in the bottom row as none of them |
+ // are in the current interest rect (which is either the above or below it). |
EXPECT_EQ(6, pile_.tiling().num_tiles_x()); |
EXPECT_EQ(8, pile_.tiling().num_tiles_y()); |
for (int i = 0; i < 6; ++i) { |
for (int j = 0; j < 6; ++j) { |
- TestPicturePile::PictureMapKey key(i, j); |
- TestPicturePile::PictureMap& map = pile_.picture_map(); |
- TestPicturePile::PictureMap::iterator it = map.find(key); |
+ FakePicturePile::PictureMapKey key(i, j); |
+ FakePicturePile::PictureMap& map = pile_.picture_map(); |
+ FakePicturePile::PictureMap::iterator it = map.find(key); |
EXPECT_EQ(j < 5, it != map.end() && it->second.GetPicture()); |
} |
} |
@@ -645,20 +619,58 @@ TEST_P(PicturePileResizeCornerTest, ResizePileOutsideInterestRect) { |
base_tiling_size, |
CornerSinglePixelRect(corner, base_tiling_size)); |
- // We should have lost the recordings that are now outside the tiling only. |
+ // When shrinking, we should have lost all the recordings in the bottom row |
+ // not touching the interest rect. |
EXPECT_EQ(6, pile_.tiling().num_tiles_x()); |
EXPECT_EQ(6, pile_.tiling().num_tiles_y()); |
for (int i = 0; i < pile_.tiling().num_tiles_x(); ++i) { |
for (int j = 0; j < pile_.tiling().num_tiles_y(); ++j) { |
- TestPicturePile::PictureMapKey key(i, j); |
- TestPicturePile::PictureMap& map = pile_.picture_map(); |
- TestPicturePile::PictureMap::iterator it = map.find(key); |
- EXPECT_EQ(j < 6, it != map.end() && it->second.GetPicture()); |
+ FakePicturePile::PictureMapKey key(i, j); |
+ FakePicturePile::PictureMap& map = pile_.picture_map(); |
+ FakePicturePile::PictureMap::iterator it = map.find(key); |
+ bool expect_tile; |
+ switch (corner) { |
+ case TOP_LEFT: |
+ case TOP_RIGHT: |
+ expect_tile = j < 5; |
+ break; |
+ case BOTTOM_LEFT: |
+ // The interest rect in the bottom left tile means we'll record it. |
+ expect_tile = j < 5 || (j == 5 && i == 0); |
+ break; |
+ case BOTTOM_RIGHT: |
+ // The interest rect in the bottom right tile means we'll record it. |
+ expect_tile = j < 5 || (j == 5 && i == 5); |
+ break; |
+ } |
+ EXPECT_EQ(expect_tile, it != map.end() && it->second.GetPicture()); |
} |
} |
- // No invalidation when shrinking. |
- expected_invalidation.Clear(); |
+ // When shrinking, the previously exposed region is invalidated. |
+ expected_invalidation = SubtractRegions(gfx::Rect(grow_down_tiling_size), |
+ gfx::Rect(base_tiling_size)); |
+ // The whole bottom row of tiles (except any with the interest rect) are |
+ // dropped. |
+ gfx::Rect bottom_row_minus_existing_corner = gfx::UnionRects( |
+ pile_.tiling().TileBounds(0, 5), pile_.tiling().TileBounds(5, 5)); |
+ switch (corner) { |
+ case TOP_LEFT: |
+ case TOP_RIGHT: |
+ // No tiles are kept in the changed region because it doesn't |
+ // intersect with the interest rect. |
+ break; |
+ case BOTTOM_LEFT: |
+ bottom_row_minus_existing_corner.Subtract( |
+ pile_.tiling().TileBounds(0, 5)); |
+ break; |
+ case BOTTOM_RIGHT: |
+ bottom_row_minus_existing_corner.Subtract( |
+ pile_.tiling().TileBounds(5, 5)); |
+ break; |
+ } |
+ |
+ expected_invalidation.Union(bottom_row_minus_existing_corner); |
EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString()); |
invalidation.Clear(); |
@@ -668,14 +680,16 @@ TEST_P(PicturePileResizeCornerTest, ResizePileOutsideInterestRect) { |
grow_right_tiling_size, |
CornerSinglePixelRect(corner, grow_right_tiling_size)); |
- // We should have lost the recordings in the right column. |
+ // We should have lost all of the recordings in the right column as none of |
+ // them are in the current interest rect (which is either entirely left or |
+ // right of it). |
EXPECT_EQ(8, pile_.tiling().num_tiles_x()); |
EXPECT_EQ(6, pile_.tiling().num_tiles_y()); |
for (int i = 0; i < 6; ++i) { |
for (int j = 0; j < 6; ++j) { |
- TestPicturePile::PictureMapKey key(i, j); |
- TestPicturePile::PictureMap& map = pile_.picture_map(); |
- TestPicturePile::PictureMap::iterator it = map.find(key); |
+ FakePicturePile::PictureMapKey key(i, j); |
+ FakePicturePile::PictureMap& map = pile_.picture_map(); |
+ FakePicturePile::PictureMap::iterator it = map.find(key); |
EXPECT_EQ(i < 5, it != map.end() && it->second.GetPicture()); |
} |
} |
@@ -697,20 +711,57 @@ TEST_P(PicturePileResizeCornerTest, ResizePileOutsideInterestRect) { |
base_tiling_size, |
CornerSinglePixelRect(corner, base_tiling_size)); |
- // We should have lost the recordings that are now outside the tiling only. |
+ // When shrinking, we should have lost all the recordings in the right column |
+ // not touching the interest rect. |
EXPECT_EQ(6, pile_.tiling().num_tiles_x()); |
EXPECT_EQ(6, pile_.tiling().num_tiles_y()); |
for (int i = 0; i < pile_.tiling().num_tiles_x(); ++i) { |
for (int j = 0; j < pile_.tiling().num_tiles_y(); ++j) { |
- TestPicturePile::PictureMapKey key(i, j); |
- TestPicturePile::PictureMap& map = pile_.picture_map(); |
- TestPicturePile::PictureMap::iterator it = map.find(key); |
- EXPECT_EQ(i < 6, it != map.end() && it->second.GetPicture()); |
+ FakePicturePile::PictureMapKey key(i, j); |
+ FakePicturePile::PictureMap& map = pile_.picture_map(); |
+ FakePicturePile::PictureMap::iterator it = map.find(key); |
+ bool expect_tile; |
+ switch (corner) { |
+ case TOP_LEFT: |
+ case BOTTOM_LEFT: |
+ // No tiles are kept in the changed region because it doesn't |
+ // intersect with the interest rect. |
+ expect_tile = i < 5; |
+ break; |
+ case TOP_RIGHT: |
+ // The interest rect in the top right tile means we'll record it. |
+ expect_tile = i < 5 || (j == 0 && i == 5); |
+ break; |
+ case BOTTOM_RIGHT: |
+ // The interest rect in the bottom right tile means we'll record it. |
+ expect_tile = i < 5 || (j == 5 && i == 5); |
+ break; |
+ } |
+ EXPECT_EQ(expect_tile, it != map.end() && it->second.GetPicture()); |
} |
} |
- // No invalidation when shrinking. |
- expected_invalidation.Clear(); |
+ // When shrinking, the previously exposed region is invalidated. |
+ expected_invalidation = SubtractRegions(gfx::Rect(grow_right_tiling_size), |
+ gfx::Rect(base_tiling_size)); |
+ // The whole right column of tiles (except for ones with the interest rect) |
+ // are dropped. |
+ gfx::Rect right_column_minus_existing_corner = gfx::UnionRects( |
+ pile_.tiling().TileBounds(5, 0), pile_.tiling().TileBounds(5, 5)); |
+ switch (corner) { |
+ case TOP_LEFT: |
+ case BOTTOM_LEFT: |
+ break; |
+ case TOP_RIGHT: |
+ right_column_minus_existing_corner.Subtract( |
+ pile_.tiling().TileBounds(5, 0)); |
+ break; |
+ case BOTTOM_RIGHT: |
+ right_column_minus_existing_corner.Subtract( |
+ pile_.tiling().TileBounds(5, 5)); |
+ break; |
+ } |
+ expected_invalidation.Union(right_column_minus_existing_corner); |
EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString()); |
invalidation.Clear(); |
@@ -725,9 +776,9 @@ TEST_P(PicturePileResizeCornerTest, ResizePileOutsideInterestRect) { |
EXPECT_EQ(8, pile_.tiling().num_tiles_y()); |
for (int i = 0; i < 6; ++i) { |
for (int j = 0; j < 6; ++j) { |
- TestPicturePile::PictureMapKey key(i, j); |
- TestPicturePile::PictureMap& map = pile_.picture_map(); |
- TestPicturePile::PictureMap::iterator it = map.find(key); |
+ FakePicturePile::PictureMapKey key(i, j); |
+ FakePicturePile::PictureMap& map = pile_.picture_map(); |
+ FakePicturePile::PictureMap::iterator it = map.find(key); |
EXPECT_EQ(i < 5 && j < 5, it != map.end() && it->second.GetPicture()); |
} |
} |
@@ -735,7 +786,7 @@ TEST_P(PicturePileResizeCornerTest, ResizePileOutsideInterestRect) { |
// We invalidated all new pixels in the recording. |
expected_invalidation = SubtractRegions(gfx::Rect(grow_both_tiling_size), |
gfx::Rect(base_tiling_size)); |
- // But the new pixels don't cover the whole right_column. |
+ // But the new pixels don't cover the whole right column or bottom row. |
Region right_column_and_bottom_row = |
UnionRegions(gfx::UnionRects(pile_.tiling().TileBounds(5, 0), |
pile_.tiling().TileBounds(5, 5)), |
@@ -748,22 +799,66 @@ TEST_P(PicturePileResizeCornerTest, ResizePileOutsideInterestRect) { |
invalidation.Clear(); |
UpdateWholePile(); |
- UpdateAndExpandInvalidation(&invalidation, base_tiling_size, gfx::Rect()); |
+ UpdateAndExpandInvalidation(&invalidation, base_tiling_size, |
+ CornerSinglePixelRect(corner, base_tiling_size)); |
- // We should have lost the recordings that are now outside the tiling only. |
+ // We should have lost the recordings in the right column and bottom row, |
+ // except where it intersects the interest rect. |
EXPECT_EQ(6, pile_.tiling().num_tiles_x()); |
EXPECT_EQ(6, pile_.tiling().num_tiles_y()); |
for (int i = 0; i < pile_.tiling().num_tiles_x(); ++i) { |
for (int j = 0; j < pile_.tiling().num_tiles_y(); ++j) { |
- TestPicturePile::PictureMapKey key(i, j); |
- TestPicturePile::PictureMap& map = pile_.picture_map(); |
- TestPicturePile::PictureMap::iterator it = map.find(key); |
- EXPECT_EQ(i < 6 && j < 6, it != map.end() && it->second.GetPicture()); |
+ FakePicturePile::PictureMapKey key(i, j); |
+ FakePicturePile::PictureMap& map = pile_.picture_map(); |
+ FakePicturePile::PictureMap::iterator it = map.find(key); |
+ bool expect_tile; |
+ switch (corner) { |
+ case TOP_LEFT: |
+ expect_tile = i < 5 && j < 5; |
+ break; |
+ case TOP_RIGHT: |
+ // The interest rect in the top right tile means we'll record it. |
+ expect_tile = (i < 5 && j < 5) || (j == 0 && i == 5); |
+ break; |
+ case BOTTOM_LEFT: |
+ // The interest rect in the bottom left tile means we'll record it. |
+ expect_tile = (i < 5 && j < 5) || (j == 5 && i == 0); |
+ break; |
+ case BOTTOM_RIGHT: |
+ // The interest rect in the bottom right tile means we'll record it. |
+ expect_tile = (i < 5 && j < 5) || (j == 5 && i == 5); |
+ break; |
+ } |
+ EXPECT_EQ(expect_tile, it != map.end() && it->second.GetPicture()) |
+ << i << "," << j; |
} |
} |
- // No invalidation when shrinking. |
- expected_invalidation.Clear(); |
+ // We invalidated all previous pixels in the recording. |
+ expected_invalidation = SubtractRegions(gfx::Rect(grow_both_tiling_size), |
+ gfx::Rect(base_tiling_size)); |
+ // The whole right column and bottom row of tiles (except for ones with the |
+ // interest rect) are dropped. |
+ Region right_column_and_bottom_row_minus_existing_corner = |
+ right_column_and_bottom_row; |
+ switch (corner) { |
+ case TOP_LEFT: |
+ break; |
+ case BOTTOM_LEFT: |
+ right_column_and_bottom_row_minus_existing_corner.Subtract( |
+ pile_.tiling().TileBounds(0, 5)); |
+ break; |
+ case TOP_RIGHT: |
+ right_column_and_bottom_row_minus_existing_corner.Subtract( |
+ pile_.tiling().TileBounds(5, 0)); |
+ break; |
+ case BOTTOM_RIGHT: |
+ right_column_and_bottom_row_minus_existing_corner.Subtract( |
+ pile_.tiling().TileBounds(5, 5)); |
+ break; |
+ } |
+ expected_invalidation.Union( |
+ right_column_and_bottom_row_minus_existing_corner); |
EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString()); |
invalidation.Clear(); |
} |
@@ -796,268 +891,235 @@ TEST_P(PicturePileResizeCornerTest, SmallResizePileOutsideInterestRect) { |
EXPECT_EQ(6, pile_.tiling().num_tiles_y()); |
for (int i = 0; i < pile_.tiling().num_tiles_x(); ++i) { |
for (int j = 0; j < pile_.tiling().num_tiles_y(); ++j) { |
- TestPicturePile::PictureMapKey key(i, j); |
- TestPicturePile::PictureMap& map = pile_.picture_map(); |
- TestPicturePile::PictureMap::iterator it = map.find(key); |
+ FakePicturePile::PictureMapKey key(i, j); |
+ FakePicturePile::PictureMap& map = pile_.picture_map(); |
+ FakePicturePile::PictureMap::iterator it = map.find(key); |
EXPECT_TRUE(it != map.end() && it->second.GetPicture()); |
} |
} |
- UpdateAndExpandInvalidation( |
- &invalidation, |
- grow_down_tiling_size, |
- CornerSinglePixelRect(corner, grow_down_tiling_size)); |
+ // In this test (unlike the large resize test), as all growing and shrinking |
+ // happens within tiles, the resulting invalidation is symmetrical, so use |
+ // this enum to repeat the test both ways. |
+ enum ChangeDirection { GROW, SHRINK, LAST_DIRECTION = SHRINK }; |
- // We should have lost the recordings in the bottom row that do not intersect |
- // the interest rect. |
- EXPECT_EQ(6, pile_.tiling().num_tiles_x()); |
- EXPECT_EQ(6, pile_.tiling().num_tiles_y()); |
- for (int i = 0; i < pile_.tiling().num_tiles_x(); ++i) { |
- for (int j = 0; j < pile_.tiling().num_tiles_y(); ++j) { |
- TestPicturePile::PictureMapKey key(i, j); |
- TestPicturePile::PictureMap& map = pile_.picture_map(); |
- TestPicturePile::PictureMap::iterator it = map.find(key); |
- bool expect_tile; |
+ // Grow downward. |
+ for (int dir = 0; dir <= LAST_DIRECTION; ++dir) { |
+ gfx::Size new_tiling_size = |
+ dir == GROW ? grow_down_tiling_size : base_tiling_size; |
+ UpdateWholePile(); |
+ UpdateAndExpandInvalidation(&invalidation, new_tiling_size, |
+ CornerSinglePixelRect(corner, new_tiling_size)); |
+ |
+ // We should have lost the recordings in the bottom row that do not |
+ // intersect the interest rect. |
+ EXPECT_EQ(6, pile_.tiling().num_tiles_x()); |
+ EXPECT_EQ(6, pile_.tiling().num_tiles_y()); |
+ for (int i = 0; i < pile_.tiling().num_tiles_x(); ++i) { |
+ for (int j = 0; j < pile_.tiling().num_tiles_y(); ++j) { |
+ FakePicturePile::PictureMapKey key(i, j); |
+ FakePicturePile::PictureMap& map = pile_.picture_map(); |
+ FakePicturePile::PictureMap::iterator it = map.find(key); |
+ bool expect_tile; |
+ switch (corner) { |
+ case TOP_LEFT: |
+ case TOP_RIGHT: |
+ expect_tile = j < 5; |
+ break; |
+ case BOTTOM_LEFT: |
+ // The interest rect in the bottom left tile means we'll record it. |
+ expect_tile = j < 5 || (j == 5 && i == 0); |
+ break; |
+ case BOTTOM_RIGHT: |
+ // The interest rect in the bottom right tile means we'll record it. |
+ expect_tile = j < 5 || (j == 5 && i == 5); |
+ break; |
+ } |
+ EXPECT_EQ(expect_tile, it != map.end() && it->second.GetPicture()); |
+ } |
+ } |
+ |
+ // We invalidated the bottom row outside the new interest rect. The tile |
+ // that insects the interest rect in invalidated only on its newly |
+ // exposed or previously exposed pixels. |
+ if (dir == GROW) { |
+ // Only calculate the expected invalidation while growing, as the tile |
+ // bounds post-growing is the newly exposed / previously exposed sizes. |
+ // Post-shrinking, the tile bounds are smaller, so can't be used. |
switch (corner) { |
case TOP_LEFT: |
case TOP_RIGHT: |
- expect_tile = j < 5; |
+ expected_invalidation = gfx::UnionRects( |
+ pile_.tiling().TileBounds(0, 5), pile_.tiling().TileBounds(5, 5)); |
break; |
case BOTTOM_LEFT: |
- // The interest rect in the bottom left tile means we'll record it. |
- expect_tile = j < 5 || (j == 5 && i == 0); |
+ expected_invalidation = gfx::UnionRects( |
+ pile_.tiling().TileBounds(1, 5), pile_.tiling().TileBounds(5, 5)); |
+ expected_invalidation.Union(SubtractRects( |
+ pile_.tiling().TileBounds(0, 5), gfx::Rect(base_tiling_size))); |
break; |
case BOTTOM_RIGHT: |
- // The interest rect in the bottom right tile means we'll record it. |
- expect_tile = j < 5 || (j == 5 && i == 5); |
+ expected_invalidation = gfx::UnionRects( |
+ pile_.tiling().TileBounds(0, 5), pile_.tiling().TileBounds(4, 5)); |
+ expected_invalidation.Union(SubtractRects( |
+ pile_.tiling().TileBounds(5, 5), gfx::Rect(base_tiling_size))); |
break; |
} |
- EXPECT_EQ(expect_tile, it != map.end() && it->second.GetPicture()); |
} |
+ EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString()); |
+ invalidation.Clear(); |
} |
- // We invalidated the bottom row outside the new interest rect. The tile that |
- // insects the interest rect in invalidated only on its new pixels. |
- switch (corner) { |
- case TOP_LEFT: |
- case TOP_RIGHT: |
- expected_invalidation = gfx::UnionRects(pile_.tiling().TileBounds(0, 5), |
- pile_.tiling().TileBounds(5, 5)); |
- break; |
- case BOTTOM_LEFT: |
- expected_invalidation = gfx::UnionRects(pile_.tiling().TileBounds(1, 5), |
- pile_.tiling().TileBounds(5, 5)); |
- expected_invalidation.Union(SubtractRects(pile_.tiling().TileBounds(0, 5), |
- gfx::Rect(base_tiling_size))); |
- break; |
- case BOTTOM_RIGHT: |
- expected_invalidation = gfx::UnionRects(pile_.tiling().TileBounds(0, 5), |
- pile_.tiling().TileBounds(4, 5)); |
- expected_invalidation.Union(SubtractRects(pile_.tiling().TileBounds(5, 5), |
- gfx::Rect(base_tiling_size))); |
- break; |
- } |
- EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString()); |
- invalidation.Clear(); |
- |
- UpdateWholePile(); |
- UpdateAndExpandInvalidation(&invalidation, |
- base_tiling_size, |
- CornerSinglePixelRect(corner, base_tiling_size)); |
- |
- // We should have lost nothing. |
- EXPECT_EQ(6, pile_.tiling().num_tiles_x()); |
- EXPECT_EQ(6, pile_.tiling().num_tiles_y()); |
- for (int i = 0; i < pile_.tiling().num_tiles_x(); ++i) { |
- for (int j = 0; j < pile_.tiling().num_tiles_y(); ++j) { |
- TestPicturePile::PictureMapKey key(i, j); |
- TestPicturePile::PictureMap& map = pile_.picture_map(); |
- TestPicturePile::PictureMap::iterator it = map.find(key); |
- EXPECT_TRUE(it != map.end() && it->second.GetPicture()); |
+ // Grow right. |
+ for (int dir = 0; dir <= LAST_DIRECTION; ++dir) { |
+ gfx::Size new_tiling_size = |
+ dir == GROW ? grow_right_tiling_size : base_tiling_size; |
+ UpdateWholePile(); |
+ UpdateAndExpandInvalidation(&invalidation, new_tiling_size, |
+ CornerSinglePixelRect(corner, new_tiling_size)); |
+ |
+ // We should have lost the recordings in the right column. |
+ EXPECT_EQ(6, pile_.tiling().num_tiles_x()); |
+ EXPECT_EQ(6, pile_.tiling().num_tiles_y()); |
+ for (int i = 0; i < pile_.tiling().num_tiles_x(); ++i) { |
+ for (int j = 0; j < pile_.tiling().num_tiles_y(); ++j) { |
+ FakePicturePile::PictureMapKey key(i, j); |
+ FakePicturePile::PictureMap& map = pile_.picture_map(); |
+ FakePicturePile::PictureMap::iterator it = map.find(key); |
+ bool expect_tile; |
+ switch (corner) { |
+ case TOP_LEFT: |
+ case BOTTOM_LEFT: |
+ expect_tile = i < 5; |
+ break; |
+ case TOP_RIGHT: |
+ // The interest rect in the top right tile means we'll record it. |
+ expect_tile = i < 5 || (j == 0 && i == 5); |
+ break; |
+ case BOTTOM_RIGHT: |
+ // The interest rect in the bottom right tile means we'll record it. |
+ expect_tile = i < 5 || (j == 5 && i == 5); |
+ break; |
+ } |
+ EXPECT_EQ(expect_tile, it != map.end() && it->second.GetPicture()); |
+ } |
} |
- } |
- |
- // We invalidated nothing. |
- expected_invalidation.Clear(); |
- EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString()); |
- invalidation.Clear(); |
- |
- UpdateWholePile(); |
- UpdateAndExpandInvalidation( |
- &invalidation, |
- grow_right_tiling_size, |
- CornerSinglePixelRect(corner, grow_right_tiling_size)); |
- // We should have lost the recordings in the right column. |
- EXPECT_EQ(6, pile_.tiling().num_tiles_x()); |
- EXPECT_EQ(6, pile_.tiling().num_tiles_y()); |
- for (int i = 0; i < pile_.tiling().num_tiles_x(); ++i) { |
- for (int j = 0; j < pile_.tiling().num_tiles_y(); ++j) { |
- TestPicturePile::PictureMapKey key(i, j); |
- TestPicturePile::PictureMap& map = pile_.picture_map(); |
- TestPicturePile::PictureMap::iterator it = map.find(key); |
- bool expect_tile; |
+ // We invalidated the right column outside the new interest rect. The tile |
+ // that insects the interest rect in invalidated only on its new or |
+ // previously exposed pixels. |
+ if (dir == GROW) { |
+ // Calculate the expected invalidation the first time through the loop. |
switch (corner) { |
case TOP_LEFT: |
case BOTTOM_LEFT: |
- expect_tile = i < 5; |
+ expected_invalidation = gfx::UnionRects( |
+ pile_.tiling().TileBounds(5, 0), pile_.tiling().TileBounds(5, 5)); |
break; |
case TOP_RIGHT: |
- // The interest rect in the top right tile means we'll record it. |
- expect_tile = i < 5 || (j == 0 && i == 5); |
+ expected_invalidation = gfx::UnionRects( |
+ pile_.tiling().TileBounds(5, 1), pile_.tiling().TileBounds(5, 5)); |
+ expected_invalidation.Union(SubtractRects( |
+ pile_.tiling().TileBounds(5, 0), gfx::Rect(base_tiling_size))); |
break; |
case BOTTOM_RIGHT: |
- // The interest rect in the bottom right tile means we'll record it. |
- expect_tile = i < 5 || (j == 5 && i == 5); |
+ expected_invalidation = gfx::UnionRects( |
+ pile_.tiling().TileBounds(5, 0), pile_.tiling().TileBounds(5, 4)); |
+ expected_invalidation.Union(SubtractRects( |
+ pile_.tiling().TileBounds(5, 5), gfx::Rect(base_tiling_size))); |
break; |
} |
- EXPECT_EQ(expect_tile, it != map.end() && it->second.GetPicture()); |
} |
+ EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString()); |
+ invalidation.Clear(); |
} |
- // We invalidated the right column outside the new interest rect. The tile |
- // that insects the interest rect in invalidated only on its new pixels. |
- switch (corner) { |
- case TOP_LEFT: |
- case BOTTOM_LEFT: |
- expected_invalidation = gfx::UnionRects(pile_.tiling().TileBounds(5, 0), |
- pile_.tiling().TileBounds(5, 5)); |
- break; |
- case TOP_RIGHT: |
- expected_invalidation = gfx::UnionRects(pile_.tiling().TileBounds(5, 1), |
- pile_.tiling().TileBounds(5, 5)); |
- expected_invalidation.Union(SubtractRects(pile_.tiling().TileBounds(5, 0), |
- gfx::Rect(base_tiling_size))); |
- break; |
- case BOTTOM_RIGHT: |
- expected_invalidation = gfx::UnionRects(pile_.tiling().TileBounds(5, 0), |
- pile_.tiling().TileBounds(5, 4)); |
- expected_invalidation.Union(SubtractRects(pile_.tiling().TileBounds(5, 5), |
- gfx::Rect(base_tiling_size))); |
- break; |
- } |
- EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString()); |
- invalidation.Clear(); |
- |
- UpdateWholePile(); |
- UpdateAndExpandInvalidation(&invalidation, |
- base_tiling_size, |
- CornerSinglePixelRect(corner, base_tiling_size)); |
- |
- // We should have lost nothing. |
- EXPECT_EQ(6, pile_.tiling().num_tiles_x()); |
- EXPECT_EQ(6, pile_.tiling().num_tiles_y()); |
- for (int i = 0; i < pile_.tiling().num_tiles_x(); ++i) { |
- for (int j = 0; j < pile_.tiling().num_tiles_y(); ++j) { |
- TestPicturePile::PictureMapKey key(i, j); |
- TestPicturePile::PictureMap& map = pile_.picture_map(); |
- TestPicturePile::PictureMap::iterator it = map.find(key); |
- EXPECT_TRUE(it != map.end() && it->second.GetPicture()); |
+ // Grow both. |
+ for (int dir = 0; dir <= LAST_DIRECTION; ++dir) { |
+ gfx::Size new_tiling_size = |
+ dir == GROW ? grow_both_tiling_size : base_tiling_size; |
+ UpdateWholePile(); |
+ UpdateAndExpandInvalidation(&invalidation, new_tiling_size, |
+ CornerSinglePixelRect(corner, new_tiling_size)); |
+ |
+ // We should have lost the recordings in the right column and bottom row. |
+ // The tile that insects the interest rect in invalidated only on its new |
+ // or previously exposed pixels. |
+ EXPECT_EQ(6, pile_.tiling().num_tiles_x()); |
+ EXPECT_EQ(6, pile_.tiling().num_tiles_y()); |
+ for (int i = 0; i < pile_.tiling().num_tiles_x(); ++i) { |
+ for (int j = 0; j < pile_.tiling().num_tiles_y(); ++j) { |
+ FakePicturePile::PictureMapKey key(i, j); |
+ FakePicturePile::PictureMap& map = pile_.picture_map(); |
+ FakePicturePile::PictureMap::iterator it = map.find(key); |
+ bool expect_tile; |
+ switch (corner) { |
+ case TOP_LEFT: |
+ expect_tile = i < 5 && j < 5; |
+ break; |
+ case TOP_RIGHT: |
+ // The interest rect in the top right tile means we'll record it. |
+ expect_tile = (i < 5 && j < 5) || (j == 0 && i == 5); |
+ break; |
+ case BOTTOM_LEFT: |
+ // The interest rect in the bottom left tile means we'll record it. |
+ expect_tile = (i < 5 && j < 5) || (j == 5 && i == 0); |
+ break; |
+ case BOTTOM_RIGHT: |
+ // The interest rect in the bottom right tile means we'll record it. |
+ expect_tile = (i < 5 && j < 5) || (j == 5 && i == 5); |
+ break; |
+ } |
+ EXPECT_EQ(expect_tile, it != map.end() && it->second.GetPicture()) |
+ << i << "," << j; |
+ } |
} |
- } |
- // We invalidated nothing. |
- expected_invalidation.Clear(); |
- EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString()); |
- invalidation.Clear(); |
- |
- UpdateWholePile(); |
- UpdateAndExpandInvalidation( |
- &invalidation, |
- grow_both_tiling_size, |
- CornerSinglePixelRect(corner, grow_both_tiling_size)); |
- |
- // We should have lost the recordings in the right column and bottom row. The |
- // tile that insects the interest rect in invalidated only on its new pixels. |
- EXPECT_EQ(6, pile_.tiling().num_tiles_x()); |
- EXPECT_EQ(6, pile_.tiling().num_tiles_y()); |
- for (int i = 0; i < pile_.tiling().num_tiles_x(); ++i) { |
- for (int j = 0; j < pile_.tiling().num_tiles_y(); ++j) { |
- TestPicturePile::PictureMapKey key(i, j); |
- TestPicturePile::PictureMap& map = pile_.picture_map(); |
- TestPicturePile::PictureMap::iterator it = map.find(key); |
- bool expect_tile; |
+ // We invalidated the right column and the bottom row outside the new |
+ // interest rect. The tile that insects the interest rect in invalidated |
+ // only on its new or previous exposed pixels. |
+ if (dir == GROW) { |
+ // Calculate the expected invalidation the first time through the loop. |
switch (corner) { |
case TOP_LEFT: |
- expect_tile = i < 5 && j < 5; |
+ expected_invalidation = gfx::UnionRects( |
+ pile_.tiling().TileBounds(5, 0), pile_.tiling().TileBounds(5, 5)); |
+ expected_invalidation.Union( |
+ gfx::UnionRects(pile_.tiling().TileBounds(0, 5), |
+ pile_.tiling().TileBounds(5, 5))); |
break; |
case TOP_RIGHT: |
- // The interest rect in the top right tile means we'll record it. |
- expect_tile = (i < 5 && j < 5) || (j == 0 && i == 5); |
+ expected_invalidation = gfx::UnionRects( |
+ pile_.tiling().TileBounds(5, 1), pile_.tiling().TileBounds(5, 5)); |
+ expected_invalidation.Union( |
+ gfx::UnionRects(pile_.tiling().TileBounds(0, 5), |
+ pile_.tiling().TileBounds(5, 5))); |
+ expected_invalidation.Union(SubtractRects( |
+ pile_.tiling().TileBounds(5, 0), gfx::Rect(base_tiling_size))); |
break; |
case BOTTOM_LEFT: |
- // The interest rect in the bottom left tile means we'll record it. |
- expect_tile = (i < 5 && j < 5) || (j == 5 && i == 0); |
+ expected_invalidation = gfx::UnionRects( |
+ pile_.tiling().TileBounds(5, 0), pile_.tiling().TileBounds(5, 5)); |
+ expected_invalidation.Union( |
+ gfx::UnionRects(pile_.tiling().TileBounds(1, 5), |
+ pile_.tiling().TileBounds(5, 5))); |
+ expected_invalidation.Union(SubtractRects( |
+ pile_.tiling().TileBounds(0, 5), gfx::Rect(base_tiling_size))); |
break; |
case BOTTOM_RIGHT: |
- // The interest rect in the bottom right tile means we'll record it. |
- expect_tile = (i < 5 && j < 5) || (j == 5 && i == 5); |
+ expected_invalidation = gfx::UnionRects( |
+ pile_.tiling().TileBounds(5, 0), pile_.tiling().TileBounds(5, 4)); |
+ expected_invalidation.Union( |
+ gfx::UnionRects(pile_.tiling().TileBounds(0, 5), |
+ pile_.tiling().TileBounds(4, 5))); |
+ expected_invalidation.Union(SubtractRegions( |
+ pile_.tiling().TileBounds(5, 5), gfx::Rect(base_tiling_size))); |
break; |
} |
- EXPECT_EQ(expect_tile, it != map.end() && it->second.GetPicture()) |
- << i << "," << j; |
- } |
- } |
- |
- // We invalidated the right column and the bottom row outside the new interest |
- // rect. The tile that insects the interest rect in invalidated only on its |
- // new pixels. |
- switch (corner) { |
- case TOP_LEFT: |
- expected_invalidation = gfx::UnionRects(pile_.tiling().TileBounds(5, 0), |
- pile_.tiling().TileBounds(5, 5)); |
- expected_invalidation.Union(gfx::UnionRects( |
- pile_.tiling().TileBounds(0, 5), pile_.tiling().TileBounds(5, 5))); |
- break; |
- case TOP_RIGHT: |
- expected_invalidation = gfx::UnionRects(pile_.tiling().TileBounds(5, 1), |
- pile_.tiling().TileBounds(5, 5)); |
- expected_invalidation.Union(gfx::UnionRects( |
- pile_.tiling().TileBounds(0, 5), pile_.tiling().TileBounds(5, 5))); |
- expected_invalidation.Union(SubtractRects(pile_.tiling().TileBounds(5, 0), |
- gfx::Rect(base_tiling_size))); |
- break; |
- case BOTTOM_LEFT: |
- expected_invalidation = gfx::UnionRects(pile_.tiling().TileBounds(5, 0), |
- pile_.tiling().TileBounds(5, 5)); |
- expected_invalidation.Union(gfx::UnionRects( |
- pile_.tiling().TileBounds(1, 5), pile_.tiling().TileBounds(5, 5))); |
- expected_invalidation.Union(SubtractRects(pile_.tiling().TileBounds(0, 5), |
- gfx::Rect(base_tiling_size))); |
- break; |
- case BOTTOM_RIGHT: |
- expected_invalidation = gfx::UnionRects(pile_.tiling().TileBounds(5, 0), |
- pile_.tiling().TileBounds(5, 4)); |
- expected_invalidation.Union(gfx::UnionRects( |
- pile_.tiling().TileBounds(0, 5), pile_.tiling().TileBounds(4, 5))); |
- expected_invalidation.Union(SubtractRegions( |
- pile_.tiling().TileBounds(5, 5), gfx::Rect(base_tiling_size))); |
- break; |
- } |
- EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString()); |
- invalidation.Clear(); |
- |
- UpdateWholePile(); |
- UpdateAndExpandInvalidation(&invalidation, |
- base_tiling_size, |
- CornerSinglePixelRect(corner, base_tiling_size)); |
- |
- // We should have lost nothing. |
- EXPECT_EQ(6, pile_.tiling().num_tiles_x()); |
- EXPECT_EQ(6, pile_.tiling().num_tiles_y()); |
- for (int i = 0; i < pile_.tiling().num_tiles_x(); ++i) { |
- for (int j = 0; j < pile_.tiling().num_tiles_y(); ++j) { |
- TestPicturePile::PictureMapKey key(i, j); |
- TestPicturePile::PictureMap& map = pile_.picture_map(); |
- TestPicturePile::PictureMap::iterator it = map.find(key); |
- EXPECT_TRUE(it != map.end() && it->second.GetPicture()); |
} |
+ EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString()); |
+ invalidation.Clear(); |
} |
- |
- // We invalidated nothing. |
- expected_invalidation.Clear(); |
- EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString()); |
- invalidation.Clear(); |
} |
INSTANTIATE_TEST_CASE_P( |
@@ -1086,9 +1148,9 @@ TEST_F(PicturePileTest, ResizePileInsideInterestRect) { |
EXPECT_EQ(6, pile_.tiling().num_tiles_y()); |
for (int i = 0; i < pile_.tiling().num_tiles_x(); ++i) { |
for (int j = 0; j < pile_.tiling().num_tiles_y(); ++j) { |
- TestPicturePile::PictureMapKey key(i, j); |
- TestPicturePile::PictureMap& map = pile_.picture_map(); |
- TestPicturePile::PictureMap::iterator it = map.find(key); |
+ FakePicturePile::PictureMapKey key(i, j); |
+ FakePicturePile::PictureMap& map = pile_.picture_map(); |
+ FakePicturePile::PictureMap::iterator it = map.find(key); |
EXPECT_TRUE(it != map.end() && it->second.GetPicture()); |
} |
} |
@@ -1101,9 +1163,9 @@ TEST_F(PicturePileTest, ResizePileInsideInterestRect) { |
EXPECT_EQ(8, pile_.tiling().num_tiles_y()); |
for (int i = 0; i < pile_.tiling().num_tiles_x(); ++i) { |
for (int j = 0; j < pile_.tiling().num_tiles_y(); ++j) { |
- TestPicturePile::PictureMapKey key(i, j); |
- TestPicturePile::PictureMap& map = pile_.picture_map(); |
- TestPicturePile::PictureMap::iterator it = map.find(key); |
+ FakePicturePile::PictureMapKey key(i, j); |
+ FakePicturePile::PictureMap& map = pile_.picture_map(); |
+ FakePicturePile::PictureMap::iterator it = map.find(key); |
EXPECT_TRUE(it != map.end() && it->second.GetPicture()); |
} |
} |
@@ -1127,15 +1189,18 @@ TEST_F(PicturePileTest, ResizePileInsideInterestRect) { |
EXPECT_EQ(6, pile_.tiling().num_tiles_y()); |
for (int i = 0; i < pile_.tiling().num_tiles_x(); ++i) { |
for (int j = 0; j < pile_.tiling().num_tiles_y(); ++j) { |
- TestPicturePile::PictureMapKey key(i, j); |
- TestPicturePile::PictureMap& map = pile_.picture_map(); |
- TestPicturePile::PictureMap::iterator it = map.find(key); |
+ FakePicturePile::PictureMapKey key(i, j); |
+ FakePicturePile::PictureMap& map = pile_.picture_map(); |
+ FakePicturePile::PictureMap::iterator it = map.find(key); |
EXPECT_TRUE(it != map.end() && it->second.GetPicture()); |
} |
} |
- // No invalidation when shrinking. |
- EXPECT_EQ(Region().ToString(), invalidation.ToString()); |
+ // We invalidated the previously exposed pixels on the bottom row of tiles. |
+ expected_invalidation = SubtractRegions(gfx::Rect(grow_down_tiling_size), |
+ gfx::Rect(base_tiling_size)); |
+ EXPECT_TRUE(expected_invalidation.Contains(bottom_row_new_pixels)); |
+ EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString()); |
invalidation.Clear(); |
UpdateWholePile(); |
@@ -1147,9 +1212,9 @@ TEST_F(PicturePileTest, ResizePileInsideInterestRect) { |
EXPECT_EQ(6, pile_.tiling().num_tiles_y()); |
for (int i = 0; i < pile_.tiling().num_tiles_x(); ++i) { |
for (int j = 0; j < pile_.tiling().num_tiles_y(); ++j) { |
- TestPicturePile::PictureMapKey key(i, j); |
- TestPicturePile::PictureMap& map = pile_.picture_map(); |
- TestPicturePile::PictureMap::iterator it = map.find(key); |
+ FakePicturePile::PictureMapKey key(i, j); |
+ FakePicturePile::PictureMap& map = pile_.picture_map(); |
+ FakePicturePile::PictureMap::iterator it = map.find(key); |
EXPECT_TRUE(it != map.end() && it->second.GetPicture()); |
} |
} |
@@ -1173,15 +1238,18 @@ TEST_F(PicturePileTest, ResizePileInsideInterestRect) { |
EXPECT_EQ(6, pile_.tiling().num_tiles_y()); |
for (int i = 0; i < pile_.tiling().num_tiles_x(); ++i) { |
for (int j = 0; j < pile_.tiling().num_tiles_y(); ++j) { |
- TestPicturePile::PictureMapKey key(i, j); |
- TestPicturePile::PictureMap& map = pile_.picture_map(); |
- TestPicturePile::PictureMap::iterator it = map.find(key); |
+ FakePicturePile::PictureMapKey key(i, j); |
+ FakePicturePile::PictureMap& map = pile_.picture_map(); |
+ FakePicturePile::PictureMap::iterator it = map.find(key); |
EXPECT_TRUE(it != map.end() && it->second.GetPicture()); |
} |
} |
- // No invalidation when shrinking. |
- EXPECT_EQ(Region().ToString(), invalidation.ToString()); |
+ // We invalidated the previously exposed pixels on the right column of tiles. |
+ expected_invalidation = SubtractRegions(gfx::Rect(grow_right_tiling_size), |
+ gfx::Rect(base_tiling_size)); |
+ EXPECT_TRUE(expected_invalidation.Contains(right_column_new_pixels)); |
+ EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString()); |
invalidation.Clear(); |
UpdateWholePile(); |
@@ -1193,9 +1261,9 @@ TEST_F(PicturePileTest, ResizePileInsideInterestRect) { |
EXPECT_EQ(8, pile_.tiling().num_tiles_y()); |
for (int i = 0; i < pile_.tiling().num_tiles_x(); ++i) { |
for (int j = 0; j < pile_.tiling().num_tiles_y(); ++j) { |
- TestPicturePile::PictureMapKey key(i, j); |
- TestPicturePile::PictureMap& map = pile_.picture_map(); |
- TestPicturePile::PictureMap::iterator it = map.find(key); |
+ FakePicturePile::PictureMapKey key(i, j); |
+ FakePicturePile::PictureMap& map = pile_.picture_map(); |
+ FakePicturePile::PictureMap::iterator it = map.find(key); |
EXPECT_TRUE(it != map.end() && it->second.GetPicture()); |
} |
} |
@@ -1223,15 +1291,20 @@ TEST_F(PicturePileTest, ResizePileInsideInterestRect) { |
EXPECT_EQ(6, pile_.tiling().num_tiles_y()); |
for (int i = 0; i < pile_.tiling().num_tiles_x(); ++i) { |
for (int j = 0; j < pile_.tiling().num_tiles_y(); ++j) { |
- TestPicturePile::PictureMapKey key(i, j); |
- TestPicturePile::PictureMap& map = pile_.picture_map(); |
- TestPicturePile::PictureMap::iterator it = map.find(key); |
+ FakePicturePile::PictureMapKey key(i, j); |
+ FakePicturePile::PictureMap& map = pile_.picture_map(); |
+ FakePicturePile::PictureMap::iterator it = map.find(key); |
EXPECT_TRUE(it != map.end() && it->second.GetPicture()); |
} |
} |
- // No invalidation when shrinking. |
- EXPECT_EQ(Region().ToString(), invalidation.ToString()); |
+ // We invalidated the previously exposed pixels on the bottom row and right |
+ // column of tiles. |
+ expected_invalidation = SubtractRegions(gfx::Rect(grow_both_tiling_size), |
+ gfx::Rect(base_tiling_size)); |
+ EXPECT_TRUE( |
+ expected_invalidation.Contains(bottom_row_and_right_column_new_pixels)); |
+ EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString()); |
invalidation.Clear(); |
} |
@@ -1256,9 +1329,9 @@ TEST_F(PicturePileTest, SmallResizePileInsideInterestRect) { |
EXPECT_EQ(6, pile_.tiling().num_tiles_y()); |
for (int i = 0; i < pile_.tiling().num_tiles_x(); ++i) { |
for (int j = 0; j < pile_.tiling().num_tiles_y(); ++j) { |
- TestPicturePile::PictureMapKey key(i, j); |
- TestPicturePile::PictureMap& map = pile_.picture_map(); |
- TestPicturePile::PictureMap::iterator it = map.find(key); |
+ FakePicturePile::PictureMapKey key(i, j); |
+ FakePicturePile::PictureMap& map = pile_.picture_map(); |
+ FakePicturePile::PictureMap::iterator it = map.find(key); |
EXPECT_TRUE(it != map.end() && it->second.GetPicture()); |
} |
} |
@@ -1271,9 +1344,9 @@ TEST_F(PicturePileTest, SmallResizePileInsideInterestRect) { |
EXPECT_EQ(6, pile_.tiling().num_tiles_y()); |
for (int i = 0; i < pile_.tiling().num_tiles_x(); ++i) { |
for (int j = 0; j < pile_.tiling().num_tiles_y(); ++j) { |
- TestPicturePile::PictureMapKey key(i, j); |
- TestPicturePile::PictureMap& map = pile_.picture_map(); |
- TestPicturePile::PictureMap::iterator it = map.find(key); |
+ FakePicturePile::PictureMapKey key(i, j); |
+ FakePicturePile::PictureMap& map = pile_.picture_map(); |
+ FakePicturePile::PictureMap::iterator it = map.find(key); |
EXPECT_TRUE(it != map.end() && it->second.GetPicture()); |
} |
} |
@@ -1292,15 +1365,17 @@ TEST_F(PicturePileTest, SmallResizePileInsideInterestRect) { |
EXPECT_EQ(6, pile_.tiling().num_tiles_y()); |
for (int i = 0; i < pile_.tiling().num_tiles_x(); ++i) { |
for (int j = 0; j < pile_.tiling().num_tiles_y(); ++j) { |
- TestPicturePile::PictureMapKey key(i, j); |
- TestPicturePile::PictureMap& map = pile_.picture_map(); |
- TestPicturePile::PictureMap::iterator it = map.find(key); |
+ FakePicturePile::PictureMapKey key(i, j); |
+ FakePicturePile::PictureMap& map = pile_.picture_map(); |
+ FakePicturePile::PictureMap::iterator it = map.find(key); |
EXPECT_TRUE(it != map.end() && it->second.GetPicture()); |
} |
} |
- // No invalidation when shrinking. |
- EXPECT_EQ(Region().ToString(), invalidation.ToString()); |
+ // We invalidated the previously exposed pixels. |
+ expected_invalidation = SubtractRegions(gfx::Rect(grow_down_tiling_size), |
+ gfx::Rect(base_tiling_size)); |
+ EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString()); |
invalidation.Clear(); |
UpdateWholePile(); |
@@ -1312,9 +1387,9 @@ TEST_F(PicturePileTest, SmallResizePileInsideInterestRect) { |
EXPECT_EQ(6, pile_.tiling().num_tiles_y()); |
for (int i = 0; i < pile_.tiling().num_tiles_x(); ++i) { |
for (int j = 0; j < pile_.tiling().num_tiles_y(); ++j) { |
- TestPicturePile::PictureMapKey key(i, j); |
- TestPicturePile::PictureMap& map = pile_.picture_map(); |
- TestPicturePile::PictureMap::iterator it = map.find(key); |
+ FakePicturePile::PictureMapKey key(i, j); |
+ FakePicturePile::PictureMap& map = pile_.picture_map(); |
+ FakePicturePile::PictureMap::iterator it = map.find(key); |
EXPECT_TRUE(it != map.end() && it->second.GetPicture()); |
} |
} |
@@ -1333,15 +1408,17 @@ TEST_F(PicturePileTest, SmallResizePileInsideInterestRect) { |
EXPECT_EQ(6, pile_.tiling().num_tiles_y()); |
for (int i = 0; i < pile_.tiling().num_tiles_x(); ++i) { |
for (int j = 0; j < pile_.tiling().num_tiles_y(); ++j) { |
- TestPicturePile::PictureMapKey key(i, j); |
- TestPicturePile::PictureMap& map = pile_.picture_map(); |
- TestPicturePile::PictureMap::iterator it = map.find(key); |
+ FakePicturePile::PictureMapKey key(i, j); |
+ FakePicturePile::PictureMap& map = pile_.picture_map(); |
+ FakePicturePile::PictureMap::iterator it = map.find(key); |
EXPECT_TRUE(it != map.end() && it->second.GetPicture()); |
} |
} |
- // No invalidation when shrinking. |
- EXPECT_EQ(Region().ToString(), invalidation.ToString()); |
+ // We invalidated the previously exposed pixels. |
+ expected_invalidation = SubtractRegions(gfx::Rect(grow_right_tiling_size), |
+ gfx::Rect(base_tiling_size)); |
+ EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString()); |
invalidation.Clear(); |
UpdateWholePile(); |
@@ -1353,9 +1430,9 @@ TEST_F(PicturePileTest, SmallResizePileInsideInterestRect) { |
EXPECT_EQ(6, pile_.tiling().num_tiles_y()); |
for (int i = 0; i < pile_.tiling().num_tiles_x(); ++i) { |
for (int j = 0; j < pile_.tiling().num_tiles_y(); ++j) { |
- TestPicturePile::PictureMapKey key(i, j); |
- TestPicturePile::PictureMap& map = pile_.picture_map(); |
- TestPicturePile::PictureMap::iterator it = map.find(key); |
+ FakePicturePile::PictureMapKey key(i, j); |
+ FakePicturePile::PictureMap& map = pile_.picture_map(); |
+ FakePicturePile::PictureMap::iterator it = map.find(key); |
EXPECT_TRUE(it != map.end() && it->second.GetPicture()); |
} |
} |
@@ -1374,15 +1451,17 @@ TEST_F(PicturePileTest, SmallResizePileInsideInterestRect) { |
EXPECT_EQ(6, pile_.tiling().num_tiles_y()); |
for (int i = 0; i < pile_.tiling().num_tiles_x(); ++i) { |
for (int j = 0; j < pile_.tiling().num_tiles_y(); ++j) { |
- TestPicturePile::PictureMapKey key(i, j); |
- TestPicturePile::PictureMap& map = pile_.picture_map(); |
- TestPicturePile::PictureMap::iterator it = map.find(key); |
+ FakePicturePile::PictureMapKey key(i, j); |
+ FakePicturePile::PictureMap& map = pile_.picture_map(); |
+ FakePicturePile::PictureMap::iterator it = map.find(key); |
EXPECT_TRUE(it != map.end() && it->second.GetPicture()); |
} |
} |
- // No invalidation when shrinking. |
- EXPECT_EQ(Region().ToString(), invalidation.ToString()); |
+ // We invalidated the previously exposed pixels. |
+ expected_invalidation = SubtractRegions(gfx::Rect(grow_both_tiling_size), |
+ gfx::Rect(base_tiling_size)); |
+ EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString()); |
invalidation.Clear(); |
} |
@@ -1458,12 +1537,12 @@ TEST_F(PicturePileTest, NonSolidRectangleOnOffsettedLayerIsNonSolid) { |
TEST_F(PicturePileTest, SetEmptyBounds) { |
EXPECT_TRUE(pile_.is_solid_color()); |
- EXPECT_FALSE(pile_.tiling_size().IsEmpty()); |
+ EXPECT_FALSE(pile_.GetSize().IsEmpty()); |
EXPECT_FALSE(pile_.picture_map().empty()); |
EXPECT_TRUE(pile_.HasRecordings()); |
pile_.SetEmptyBounds(); |
EXPECT_FALSE(pile_.is_solid_color()); |
- EXPECT_TRUE(pile_.tiling_size().IsEmpty()); |
+ EXPECT_TRUE(pile_.GetSize().IsEmpty()); |
EXPECT_TRUE(pile_.picture_map().empty()); |
EXPECT_FALSE(pile_.HasRecordings()); |
} |