Index: cc/playback/display_list_recording_source_unittest.cc |
diff --git a/cc/playback/display_list_recording_source_unittest.cc b/cc/playback/display_list_recording_source_unittest.cc |
index 1ac4092d9c69e9f013d31826fc6e5d0d7db9d089..96dcd37c1d91cf590973d01783f89b9d1b05fa2b 100644 |
--- a/cc/playback/display_list_recording_source_unittest.cc |
+++ b/cc/playback/display_list_recording_source_unittest.cc |
@@ -14,12 +14,26 @@ |
namespace cc { |
namespace { |
-class DisplayListRecordingSourceTest : public testing::Test { |
- public: |
- void SetUp() override {} |
-}; |
+scoped_ptr<FakeDisplayListRecordingSource> CreateRecordingSource( |
+ const gfx::Rect& viewport, |
+ const gfx::Size& grid_cell_size) { |
+ gfx::Rect layer_rect(viewport.right(), viewport.bottom()); |
+ scoped_ptr<FakeDisplayListRecordingSource> recording_source = |
+ FakeDisplayListRecordingSource::CreateRecordingSource(viewport, |
+ layer_rect.size()); |
+ recording_source->SetGridCellSize(grid_cell_size); |
+ |
+ return recording_source.Pass(); |
+} |
+ |
+scoped_refptr<RasterSource> CreateRasterSource( |
+ FakeDisplayListRecordingSource* recording_source) { |
+ bool can_use_lcd_text = true; |
+ return DisplayListRasterSource::CreateFromDisplayListRecordingSource( |
+ recording_source, can_use_lcd_text); |
+} |
-TEST_F(DisplayListRecordingSourceTest, DiscardableImagesWithTransform) { |
+TEST(DisplayListRecordingSourceTest, DiscardableImagesWithTransform) { |
gfx::Size grid_cell_size(128, 128); |
gfx::Rect recorded_viewport(256, 256); |
@@ -128,7 +142,7 @@ TEST_F(DisplayListRecordingSourceTest, DiscardableImagesWithTransform) { |
} |
} |
-TEST_F(DisplayListRecordingSourceTest, ExposesEnoughNewAreaEmpty) { |
+TEST(DisplayListRecordingSourceTest, ExposesEnoughNewAreaEmpty) { |
gfx::Size layer_size(1000, 1000); |
// Both empty means there is nothing to do. |
@@ -144,7 +158,7 @@ TEST_F(DisplayListRecordingSourceTest, ExposesEnoughNewAreaEmpty) { |
gfx::Rect(1, 1), gfx::Rect(), layer_size)); |
} |
-TEST_F(DisplayListRecordingSourceTest, ExposesEnoughNewAreaNotBigEnough) { |
+TEST(DisplayListRecordingSourceTest, ExposesEnoughNewAreaNotBigEnough) { |
gfx::Size layer_size(1000, 1000); |
gfx::Rect current_recorded_viewport(100, 100, 100, 100); |
EXPECT_FALSE(DisplayListRecordingSource::ExposesEnoughNewArea( |
@@ -155,8 +169,8 @@ TEST_F(DisplayListRecordingSourceTest, ExposesEnoughNewAreaNotBigEnough) { |
current_recorded_viewport, gfx::Rect(1, 1, 200, 200), layer_size)); |
} |
-TEST_F(DisplayListRecordingSourceTest, |
- ExposesEnoughNewAreaNotBigEnoughButNewAreaTouchesEdge) { |
+TEST(DisplayListRecordingSourceTest, |
+ ExposesEnoughNewAreaNotBigEnoughButNewAreaTouchesEdge) { |
gfx::Size layer_size(500, 500); |
gfx::Rect current_recorded_viewport(100, 100, 100, 100); |
@@ -179,8 +193,8 @@ TEST_F(DisplayListRecordingSourceTest, |
// Verifies that having a current viewport that touches a layer edge does not |
// force re-recording. |
-TEST_F(DisplayListRecordingSourceTest, |
- ExposesEnoughNewAreaCurrentViewportTouchesEdge) { |
+TEST(DisplayListRecordingSourceTest, |
+ ExposesEnoughNewAreaCurrentViewportTouchesEdge) { |
gfx::Size layer_size(500, 500); |
gfx::Rect potential_new_viewport(100, 100, 300, 300); |
@@ -201,7 +215,7 @@ TEST_F(DisplayListRecordingSourceTest, |
gfx::Rect(400, 300, 100, 100), potential_new_viewport, layer_size)); |
} |
-TEST_F(DisplayListRecordingSourceTest, ExposesEnoughNewAreaScrollScenarios) { |
+TEST(DisplayListRecordingSourceTest, ExposesEnoughNewAreaScrollScenarios) { |
gfx::Size layer_size(1000, 1000); |
gfx::Rect current_recorded_viewport(100, 100, 100, 100); |
@@ -224,8 +238,8 @@ TEST_F(DisplayListRecordingSourceTest, ExposesEnoughNewAreaScrollScenarios) { |
// Verifies that UpdateAndExpandInvalidation calls ExposesEnoughNewArea with the |
// right arguments. |
-TEST_F(DisplayListRecordingSourceTest, |
- ExposesEnoughNewAreaCalledWithCorrectArguments) { |
+TEST(DisplayListRecordingSourceTest, |
+ ExposesEnoughNewAreaCalledWithCorrectArguments) { |
gfx::Size grid_cell_size(128, 128); |
DisplayListRecordingSource recording_source(grid_cell_size); |
FakeContentLayerClient client; |
@@ -260,5 +274,274 @@ TEST_F(DisplayListRecordingSourceTest, |
EXPECT_EQ(gfx::Rect(0, 0, 4256, 4769), recording_source.recorded_viewport()); |
} |
+TEST(DisplayListRecordingSourceTest, NoGatherImageEmptyImages) { |
+ gfx::Size grid_cell_size(128, 128); |
+ gfx::Rect recorded_viewport(0, 0, 256, 256); |
+ |
+ scoped_ptr<FakeDisplayListRecordingSource> recording_source = |
+ CreateRecordingSource(recorded_viewport, grid_cell_size); |
+ recording_source->SetGatherDiscardableImages(false); |
+ recording_source->Rerecord(); |
+ |
+ scoped_refptr<RasterSource> raster_source = |
+ CreateRasterSource(recording_source.get()); |
+ |
+ // If recording source do not gather images, raster source is not going to |
+ // get images. |
+ { |
+ std::vector<skia::PositionImage> images; |
+ raster_source->GatherDiscardableImages(recorded_viewport, &images); |
+ EXPECT_TRUE(images.empty()); |
+ } |
+} |
+ |
+TEST(DisplayListRecordingSourceTest, EmptyImages) { |
+ gfx::Size grid_cell_size(128, 128); |
+ gfx::Rect recorded_viewport(0, 0, 256, 256); |
+ |
+ scoped_ptr<FakeDisplayListRecordingSource> recording_source = |
+ CreateRecordingSource(recorded_viewport, grid_cell_size); |
+ recording_source->SetGatherDiscardableImages(true); |
+ recording_source->Rerecord(); |
+ |
+ scoped_refptr<RasterSource> raster_source = |
+ CreateRasterSource(recording_source.get()); |
+ |
+ // Tile sized iterators. |
+ { |
+ std::vector<skia::PositionImage> images; |
+ raster_source->GatherDiscardableImages(gfx::Rect(0, 0, 128, 128), &images); |
+ EXPECT_TRUE(images.empty()); |
+ } |
+ // Shifted tile sized iterators. |
+ { |
+ std::vector<skia::PositionImage> images; |
+ raster_source->GatherDiscardableImages(gfx::Rect(140, 140, 128, 128), |
+ &images); |
+ EXPECT_TRUE(images.empty()); |
+ } |
+ // Layer sized iterators. |
+ { |
+ std::vector<skia::PositionImage> images; |
+ raster_source->GatherDiscardableImages(gfx::Rect(0, 0, 256, 256), &images); |
+ EXPECT_TRUE(images.empty()); |
+ } |
+} |
+ |
+TEST(DisplayListRecordingSourceTest, NoDiscardableImages) { |
+ gfx::Size grid_cell_size(128, 128); |
+ gfx::Rect recorded_viewport(0, 0, 256, 256); |
+ |
+ scoped_ptr<FakeDisplayListRecordingSource> recording_source = |
+ CreateRecordingSource(recorded_viewport, grid_cell_size); |
+ |
+ SkPaint simple_paint; |
+ simple_paint.setColor(SkColorSetARGB(255, 12, 23, 34)); |
+ |
+ SkBitmap non_discardable_bitmap; |
+ non_discardable_bitmap.allocN32Pixels(128, 128); |
+ non_discardable_bitmap.setImmutable(); |
+ skia::RefPtr<SkImage> non_discardable_image = |
+ skia::AdoptRef(SkImage::NewFromBitmap(non_discardable_bitmap)); |
+ |
+ recording_source->add_draw_rect_with_paint(gfx::Rect(0, 0, 256, 256), |
+ simple_paint); |
+ recording_source->add_draw_rect_with_paint(gfx::Rect(128, 128, 512, 512), |
+ simple_paint); |
+ recording_source->add_draw_rect_with_paint(gfx::Rect(512, 0, 256, 256), |
+ simple_paint); |
+ recording_source->add_draw_rect_with_paint(gfx::Rect(0, 512, 256, 256), |
+ simple_paint); |
+ recording_source->add_draw_image(non_discardable_image.get(), |
+ gfx::Point(128, 0)); |
+ recording_source->add_draw_image(non_discardable_image.get(), |
+ gfx::Point(0, 128)); |
+ recording_source->add_draw_image(non_discardable_image.get(), |
+ gfx::Point(150, 150)); |
+ recording_source->SetGatherDiscardableImages(true); |
+ recording_source->Rerecord(); |
+ |
+ scoped_refptr<RasterSource> raster_source = |
+ CreateRasterSource(recording_source.get()); |
+ |
+ // Tile sized iterators. |
+ { |
+ std::vector<skia::PositionImage> images; |
+ raster_source->GatherDiscardableImages(gfx::Rect(0, 0, 128, 128), &images); |
+ EXPECT_TRUE(images.empty()); |
+ } |
+ // Shifted tile sized iterators. |
+ { |
+ std::vector<skia::PositionImage> images; |
+ raster_source->GatherDiscardableImages(gfx::Rect(140, 140, 128, 128), |
+ &images); |
+ EXPECT_TRUE(images.empty()); |
+ } |
+ // Layer sized iterators. |
+ { |
+ std::vector<skia::PositionImage> images; |
+ raster_source->GatherDiscardableImages(gfx::Rect(0, 0, 256, 256), &images); |
+ EXPECT_TRUE(images.empty()); |
+ } |
+} |
+ |
+TEST(DisplayListRecordingSourceTest, DiscardableImages) { |
+ gfx::Size grid_cell_size(128, 128); |
+ gfx::Rect recorded_viewport(0, 0, 256, 256); |
+ |
+ scoped_ptr<FakeDisplayListRecordingSource> recording_source = |
+ CreateRecordingSource(recorded_viewport, grid_cell_size); |
+ |
+ skia::RefPtr<SkImage> discardable_image[2][2]; |
+ discardable_image[0][0] = CreateDiscardableImage(gfx::Size(32, 32)); |
+ discardable_image[1][0] = CreateDiscardableImage(gfx::Size(32, 32)); |
+ discardable_image[1][1] = CreateDiscardableImage(gfx::Size(32, 32)); |
+ |
+ // Discardable images are found in the following cells: |
+ // |---|---| |
+ // | x | | |
+ // |---|---| |
+ // | x | x | |
+ // |---|---| |
+ recording_source->add_draw_image(discardable_image[0][0].get(), |
+ gfx::Point(0, 0)); |
+ recording_source->add_draw_image(discardable_image[1][0].get(), |
+ gfx::Point(0, 130)); |
+ recording_source->add_draw_image(discardable_image[1][1].get(), |
+ gfx::Point(140, 140)); |
+ recording_source->SetGatherDiscardableImages(true); |
+ recording_source->Rerecord(); |
+ |
+ scoped_refptr<RasterSource> raster_source = |
+ CreateRasterSource(recording_source.get()); |
+ |
+ // Tile sized iterators. These should find only one image. |
+ { |
+ std::vector<skia::PositionImage> images; |
+ raster_source->GatherDiscardableImages(gfx::Rect(0, 0, 128, 128), &images); |
+ EXPECT_EQ(1u, images.size()); |
+ EXPECT_TRUE(images[0].image == discardable_image[0][0].get()); |
+ EXPECT_EQ(gfx::RectF(32, 32).ToString(), |
+ gfx::SkRectToRectF(images[0].image_rect).ToString()); |
+ } |
+ |
+ // Shifted tile sized iterators. These should find only one image. |
+ { |
+ std::vector<skia::PositionImage> images; |
+ raster_source->GatherDiscardableImages(gfx::Rect(140, 140, 128, 128), |
+ &images); |
+ EXPECT_EQ(1u, images.size()); |
+ EXPECT_TRUE(images[0].image == discardable_image[1][1].get()); |
+ EXPECT_EQ(gfx::RectF(140, 140, 32, 32).ToString(), |
+ gfx::SkRectToRectF(images[0].image_rect).ToString()); |
+ } |
+ |
+ // Ensure there's no discardable images in the empty cell |
+ { |
+ std::vector<skia::PositionImage> images; |
+ raster_source->GatherDiscardableImages(gfx::Rect(140, 0, 128, 128), |
+ &images); |
+ EXPECT_TRUE(images.empty()); |
+ } |
+ |
+ // Layer sized iterators. These should find all 3 images. |
+ { |
+ std::vector<skia::PositionImage> images; |
+ raster_source->GatherDiscardableImages(gfx::Rect(0, 0, 256, 256), &images); |
+ EXPECT_EQ(3u, images.size()); |
+ EXPECT_TRUE(images[0].image == discardable_image[0][0].get()); |
+ EXPECT_TRUE(images[1].image == discardable_image[1][0].get()); |
+ EXPECT_TRUE(images[2].image == discardable_image[1][1].get()); |
+ EXPECT_EQ(gfx::RectF(32, 32).ToString(), |
+ gfx::SkRectToRectF(images[0].image_rect).ToString()); |
+ EXPECT_EQ(gfx::RectF(0, 130, 32, 32).ToString(), |
+ gfx::SkRectToRectF(images[1].image_rect).ToString()); |
+ EXPECT_EQ(gfx::RectF(140, 140, 32, 32).ToString(), |
+ gfx::SkRectToRectF(images[2].image_rect).ToString()); |
+ } |
+} |
+ |
+TEST(DisplayListRecordingSourceTest, DiscardableImagesBaseNonDiscardable) { |
+ gfx::Size grid_cell_size(256, 256); |
+ gfx::Rect recorded_viewport(0, 0, 512, 512); |
+ |
+ scoped_ptr<FakeDisplayListRecordingSource> recording_source = |
+ CreateRecordingSource(recorded_viewport, grid_cell_size); |
+ |
+ SkBitmap non_discardable_bitmap; |
+ non_discardable_bitmap.allocN32Pixels(512, 512); |
+ non_discardable_bitmap.setImmutable(); |
+ skia::RefPtr<SkImage> non_discardable_image = |
+ skia::AdoptRef(SkImage::NewFromBitmap(non_discardable_bitmap)); |
+ |
+ skia::RefPtr<SkImage> discardable_image[2][2]; |
+ discardable_image[0][0] = CreateDiscardableImage(gfx::Size(128, 128)); |
+ discardable_image[0][1] = CreateDiscardableImage(gfx::Size(128, 128)); |
+ discardable_image[1][1] = CreateDiscardableImage(gfx::Size(128, 128)); |
+ |
+ // One large non-discardable image covers the whole grid. |
+ // Discardable images are found in the following cells: |
+ // |---|---| |
+ // | x | x | |
+ // |---|---| |
+ // | | x | |
+ // |---|---| |
+ recording_source->add_draw_image(non_discardable_image.get(), |
+ gfx::Point(0, 0)); |
+ recording_source->add_draw_image(discardable_image[0][0].get(), |
+ gfx::Point(0, 0)); |
+ recording_source->add_draw_image(discardable_image[0][1].get(), |
+ gfx::Point(260, 0)); |
+ recording_source->add_draw_image(discardable_image[1][1].get(), |
+ gfx::Point(260, 260)); |
+ recording_source->SetGatherDiscardableImages(true); |
+ recording_source->Rerecord(); |
+ |
+ scoped_refptr<RasterSource> raster_source = |
+ CreateRasterSource(recording_source.get()); |
+ |
+ // Tile sized iterators. These should find only one image. |
+ { |
+ std::vector<skia::PositionImage> images; |
+ raster_source->GatherDiscardableImages(gfx::Rect(0, 0, 256, 256), &images); |
+ EXPECT_EQ(1u, images.size()); |
+ EXPECT_TRUE(images[0].image == discardable_image[0][0].get()); |
+ EXPECT_EQ(gfx::RectF(128, 128).ToString(), |
+ gfx::SkRectToRectF(images[0].image_rect).ToString()); |
+ } |
+ // Shifted tile sized iterators. These should find only one image. |
+ { |
+ std::vector<skia::PositionImage> images; |
+ raster_source->GatherDiscardableImages(gfx::Rect(260, 260, 256, 256), |
+ &images); |
+ EXPECT_EQ(1u, images.size()); |
+ EXPECT_TRUE(images[0].image == discardable_image[1][1].get()); |
+ EXPECT_EQ(gfx::RectF(260, 260, 128, 128).ToString(), |
+ gfx::SkRectToRectF(images[0].image_rect).ToString()); |
+ } |
+ // Ensure there's no discardable images in the empty cell |
+ { |
+ std::vector<skia::PositionImage> images; |
+ raster_source->GatherDiscardableImages(gfx::Rect(0, 256, 256, 256), |
+ &images); |
+ EXPECT_TRUE(images.empty()); |
+ } |
+ // Layer sized iterators. These should find three images. |
+ { |
+ std::vector<skia::PositionImage> images; |
+ raster_source->GatherDiscardableImages(gfx::Rect(0, 0, 512, 512), &images); |
+ EXPECT_EQ(3u, images.size()); |
+ EXPECT_TRUE(images[0].image == discardable_image[0][0].get()); |
+ EXPECT_TRUE(images[1].image == discardable_image[0][1].get()); |
+ EXPECT_TRUE(images[2].image == discardable_image[1][1].get()); |
+ EXPECT_EQ(gfx::RectF(128, 128).ToString(), |
+ gfx::SkRectToRectF(images[0].image_rect).ToString()); |
+ EXPECT_EQ(gfx::RectF(260, 0, 128, 128).ToString(), |
+ gfx::SkRectToRectF(images[1].image_rect).ToString()); |
+ EXPECT_EQ(gfx::RectF(260, 260, 128, 128).ToString(), |
+ gfx::SkRectToRectF(images[2].image_rect).ToString()); |
+ } |
+} |
+ |
} // namespace |
} // namespace cc |