| Index: cc/paint/discardable_image_map_unittest.cc
|
| diff --git a/cc/paint/discardable_image_map_unittest.cc b/cc/paint/discardable_image_map_unittest.cc
|
| index eb687ad27df22d79b594aac6a5c059f2a5a9ca3d..9a457267ef6f4d2283a5b7a7531592d875fa3b6e 100644
|
| --- a/cc/paint/discardable_image_map_unittest.cc
|
| +++ b/cc/paint/discardable_image_map_unittest.cc
|
| @@ -11,6 +11,10 @@
|
| #include "base/memory/ref_counted.h"
|
| #include "base/values.h"
|
| #include "cc/base/region.h"
|
| +#include "cc/paint/clip_display_item.h"
|
| +#include "cc/paint/discardable_image_store.h"
|
| +#include "cc/paint/paint_flags.h"
|
| +#include "cc/paint/paint_recorder.h"
|
| #include "cc/test/fake_content_layer_client.h"
|
| #include "cc/test/fake_recording_source.h"
|
| #include "cc/test/skia_common.h"
|
| @@ -35,6 +39,20 @@ struct PositionScaleDrawImage {
|
| SkSize scale;
|
| };
|
|
|
| +sk_sp<PaintRecord> CreateRecording(
|
| + const sk_sp<const SkImage>& discardable_image,
|
| + const gfx::Rect& visible_rect) {
|
| + PaintRecorder recorder;
|
| + PaintCanvas* canvas =
|
| + recorder.beginRecording(visible_rect.width(), visible_rect.height());
|
| + canvas->drawImage(
|
| + PaintImage(discardable_image, PaintImage::AnimationType::STATIC,
|
| + PaintImage::CompletionState::DONE),
|
| + 0, 0, nullptr);
|
| + sk_sp<PaintRecord> record = recorder.finishRecordingAsPicture();
|
| + return record;
|
| +}
|
| +
|
| } // namespace
|
|
|
| class DiscardableImageMapTest : public testing::Test {
|
| @@ -112,12 +130,8 @@ TEST_F(DiscardableImageMapTest, GetDiscardableImagesInRectTest) {
|
| content_layer_client.PaintContentsToDisplayList(
|
| ContentLayerClient::PAINTING_BEHAVIOR_NORMAL);
|
|
|
| - DiscardableImageMap image_map;
|
| - {
|
| - DiscardableImageMap::ScopedMetadataGenerator generator(&image_map,
|
| - visible_rect.size());
|
| - display_list->Raster(generator.canvas(), nullptr, gfx::Rect(), 1.f);
|
| - }
|
| + const DiscardableImageMap& image_map =
|
| + display_list->discardable_image_map_for_testing();
|
|
|
| for (int y = 0; y < 4; ++y) {
|
| for (int x = 0; x < 4; ++x) {
|
| @@ -199,12 +213,8 @@ TEST_F(DiscardableImageMapTest, GetDiscardableImagesInRectNonZeroLayer) {
|
| content_layer_client.PaintContentsToDisplayList(
|
| ContentLayerClient::PAINTING_BEHAVIOR_NORMAL);
|
|
|
| - DiscardableImageMap image_map;
|
| - {
|
| - DiscardableImageMap::ScopedMetadataGenerator generator(&image_map,
|
| - layer_size);
|
| - display_list->Raster(generator.canvas(), nullptr, gfx::Rect(), 1.f);
|
| - }
|
| + const DiscardableImageMap& image_map =
|
| + display_list->discardable_image_map_for_testing();
|
|
|
| for (int y = 0; y < 4; ++y) {
|
| for (int x = 0; x < 4; ++x) {
|
| @@ -315,12 +325,8 @@ TEST_F(DiscardableImageMapTest, GetDiscardableImagesInRectOnePixelQuery) {
|
| content_layer_client.PaintContentsToDisplayList(
|
| ContentLayerClient::PAINTING_BEHAVIOR_NORMAL);
|
|
|
| - DiscardableImageMap image_map;
|
| - {
|
| - DiscardableImageMap::ScopedMetadataGenerator generator(&image_map,
|
| - visible_rect.size());
|
| - display_list->Raster(generator.canvas(), nullptr, gfx::Rect(), 1.f);
|
| - }
|
| + const DiscardableImageMap& image_map =
|
| + display_list->discardable_image_map_for_testing();
|
|
|
| for (int y = 0; y < 4; ++y) {
|
| for (int x = 0; x < 4; ++x) {
|
| @@ -357,12 +363,8 @@ TEST_F(DiscardableImageMapTest, GetDiscardableImagesInRectMassiveImage) {
|
| content_layer_client.PaintContentsToDisplayList(
|
| ContentLayerClient::PAINTING_BEHAVIOR_NORMAL);
|
|
|
| - DiscardableImageMap image_map;
|
| - {
|
| - DiscardableImageMap::ScopedMetadataGenerator generator(&image_map,
|
| - visible_rect.size());
|
| - display_list->Raster(generator.canvas(), nullptr, gfx::Rect(), 1.f);
|
| - }
|
| + const DiscardableImageMap& image_map =
|
| + display_list->discardable_image_map_for_testing();
|
| std::vector<PositionScaleDrawImage> images =
|
| GetDiscardableImagesInRect(image_map, gfx::Rect(0, 0, 1, 1));
|
| std::vector<gfx::Rect> inset_rects = InsetImageRects(images);
|
| @@ -379,18 +381,20 @@ TEST_F(DiscardableImageMapTest, PaintDestroyedWhileImageIsDrawn) {
|
| content_layer_client.set_bounds(visible_rect.size());
|
|
|
| sk_sp<SkImage> discardable_image = CreateDiscardableImage(gfx::Size(10, 10));
|
| + sk_sp<PaintRecord> record = CreateRecording(discardable_image, visible_rect);
|
|
|
| DiscardableImageMap image_map;
|
| {
|
| DiscardableImageMap::ScopedMetadataGenerator generator(&image_map,
|
| visible_rect.size());
|
| + DiscardableImageStore* image_store = generator.image_store();
|
| {
|
| std::unique_ptr<SkPaint> paint(new SkPaint());
|
| - generator.canvas()->saveLayer(gfx::RectToSkRect(visible_rect),
|
| - paint.get());
|
| + image_store->NoDrawCanvas()->saveLayer(gfx::RectToSkRect(visible_rect),
|
| + paint.get());
|
| }
|
| - generator.canvas()->drawImage(discardable_image, 0, 0, nullptr);
|
| - generator.canvas()->restore();
|
| + record->GatherDiscardableImages(image_store);
|
| + image_store->NoDrawCanvas()->restore();
|
| }
|
|
|
| std::vector<PositionScaleDrawImage> images =
|
| @@ -405,15 +409,18 @@ TEST_F(DiscardableImageMapTest, NullPaintOnSaveLayer) {
|
| content_layer_client.set_bounds(visible_rect.size());
|
|
|
| sk_sp<SkImage> discardable_image = CreateDiscardableImage(gfx::Size(10, 10));
|
| + sk_sp<PaintRecord> record = CreateRecording(discardable_image, visible_rect);
|
|
|
| DiscardableImageMap image_map;
|
| {
|
| DiscardableImageMap::ScopedMetadataGenerator generator(&image_map,
|
| visible_rect.size());
|
| + DiscardableImageStore* image_store = generator.image_store();
|
| SkPaint* null_paint = nullptr;
|
| - generator.canvas()->saveLayer(gfx::RectToSkRect(visible_rect), null_paint);
|
| - generator.canvas()->drawImage(discardable_image, 0, 0, nullptr);
|
| - generator.canvas()->restore();
|
| + image_store->NoDrawCanvas()->saveLayer(gfx::RectToSkRect(visible_rect),
|
| + null_paint);
|
| + record->GatherDiscardableImages(image_store);
|
| + image_store->NoDrawCanvas()->restore();
|
| }
|
|
|
| std::vector<PositionScaleDrawImage> images =
|
| @@ -438,12 +445,8 @@ TEST_F(DiscardableImageMapTest, GetDiscardableImagesInRectMaxImage) {
|
| content_layer_client.PaintContentsToDisplayList(
|
| ContentLayerClient::PAINTING_BEHAVIOR_NORMAL);
|
|
|
| - DiscardableImageMap image_map;
|
| - {
|
| - DiscardableImageMap::ScopedMetadataGenerator generator(&image_map,
|
| - visible_rect.size());
|
| - display_list->Raster(generator.canvas(), nullptr, visible_rect, 1.f);
|
| - }
|
| + const DiscardableImageMap& image_map =
|
| + display_list->discardable_image_map_for_testing();
|
| std::vector<PositionScaleDrawImage> images =
|
| GetDiscardableImagesInRect(image_map, gfx::Rect(42, 42, 1, 1));
|
| std::vector<gfx::Rect> inset_rects = InsetImageRects(images);
|
| @@ -480,12 +483,8 @@ TEST_F(DiscardableImageMapTest, GetDiscardableImagesInRectMaxImageMaxLayer) {
|
| content_layer_client.PaintContentsToDisplayList(
|
| ContentLayerClient::PAINTING_BEHAVIOR_NORMAL);
|
|
|
| - DiscardableImageMap image_map;
|
| - {
|
| - DiscardableImageMap::ScopedMetadataGenerator generator(&image_map,
|
| - visible_rect.size());
|
| - display_list->Raster(generator.canvas(), nullptr, visible_rect, 1.f);
|
| - }
|
| + const DiscardableImageMap& image_map =
|
| + display_list->discardable_image_map_for_testing();
|
| std::vector<PositionScaleDrawImage> images =
|
| GetDiscardableImagesInRect(image_map, gfx::Rect(0, 0, 1, 1));
|
| std::vector<gfx::Rect> inset_rects = InsetImageRects(images);
|
| @@ -535,12 +534,8 @@ TEST_F(DiscardableImageMapTest, GetDiscardableImagesRectInBounds) {
|
| content_layer_client.PaintContentsToDisplayList(
|
| ContentLayerClient::PAINTING_BEHAVIOR_NORMAL);
|
|
|
| - DiscardableImageMap image_map;
|
| - {
|
| - DiscardableImageMap::ScopedMetadataGenerator generator(&image_map,
|
| - visible_rect.size());
|
| - display_list->Raster(generator.canvas(), nullptr, visible_rect, 1.f);
|
| - }
|
| + const DiscardableImageMap& image_map =
|
| + display_list->discardable_image_map_for_testing();
|
| std::vector<PositionScaleDrawImage> images =
|
| GetDiscardableImagesInRect(image_map, gfx::Rect(0, 0, 1, 1));
|
| std::vector<gfx::Rect> inset_rects = InsetImageRects(images);
|
| @@ -608,12 +603,8 @@ TEST_F(DiscardableImageMapTest, GetDiscardableImagesInShader) {
|
| content_layer_client.PaintContentsToDisplayList(
|
| ContentLayerClient::PAINTING_BEHAVIOR_NORMAL);
|
|
|
| - DiscardableImageMap image_map;
|
| - {
|
| - DiscardableImageMap::ScopedMetadataGenerator generator(&image_map,
|
| - visible_rect.size());
|
| - display_list->Raster(generator.canvas(), nullptr, gfx::Rect(), 1.f);
|
| - }
|
| + const DiscardableImageMap& image_map =
|
| + display_list->discardable_image_map_for_testing();
|
|
|
| for (int y = 0; y < 4; ++y) {
|
| for (int x = 0; x < 4; ++x) {
|
| @@ -649,4 +640,29 @@ TEST_F(DiscardableImageMapTest, GetDiscardableImagesInShader) {
|
| EXPECT_EQ(gfx::Rect(2 * 512 + 6, 3 * 512 + 6, 500, 500), inset_rects[3]);
|
| }
|
|
|
| +TEST_F(DiscardableImageMapTest, ClipsImageRects) {
|
| + gfx::Rect visible_rect(500, 500);
|
| +
|
| + sk_sp<const SkImage> discardable_image =
|
| + CreateDiscardableImage(gfx::Size(500, 500));
|
| + sk_sp<PaintRecord> record = CreateRecording(discardable_image, visible_rect);
|
| +
|
| + scoped_refptr<DisplayItemList> display_list = new DisplayItemList;
|
| + display_list->CreateAndAppendPairedBeginItem<ClipDisplayItem>(
|
| + gfx::Rect(250, 250), std::vector<SkRRect>(), false);
|
| + display_list->CreateAndAppendDrawingItem<DrawingDisplayItem>(
|
| + gfx::Rect(500, 500), record);
|
| + display_list->CreateAndAppendPairedEndItem<EndClipDisplayItem>();
|
| + display_list->Finalize();
|
| +
|
| + const DiscardableImageMap& image_map =
|
| + display_list->discardable_image_map_for_testing();
|
| + std::vector<PositionScaleDrawImage> images =
|
| + GetDiscardableImagesInRect(image_map, visible_rect);
|
| + std::vector<gfx::Rect> inset_rects = InsetImageRects(images);
|
| + EXPECT_EQ(1u, images.size());
|
| + EXPECT_TRUE(images[0].image == discardable_image);
|
| + EXPECT_EQ(gfx::Rect(250, 250), inset_rects[0]);
|
| +}
|
| +
|
| } // namespace cc
|
|
|