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

Unified Diff: cc/paint/discardable_image_map_unittest.cc

Issue 2842333003: cc: Update discardable image metadata generation to get PaintImages. (Closed)
Patch Set: win Created 3 years, 7 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/paint/discardable_image_map.cc ('k') | cc/paint/discardable_image_store.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..d9ab8fd1b9ddd1fc955384d15192be882857de4f 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 {
@@ -111,13 +129,10 @@ TEST_F(DiscardableImageMapTest, GetDiscardableImagesInRectTest) {
scoped_refptr<DisplayItemList> display_list =
content_layer_client.PaintContentsToDisplayList(
ContentLayerClient::PAINTING_BEHAVIOR_NORMAL);
+ display_list->GenerateDiscardableImagesMetadata();
- 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) {
@@ -198,13 +213,10 @@ TEST_F(DiscardableImageMapTest, GetDiscardableImagesInRectNonZeroLayer) {
scoped_refptr<DisplayItemList> display_list =
content_layer_client.PaintContentsToDisplayList(
ContentLayerClient::PAINTING_BEHAVIOR_NORMAL);
+ display_list->GenerateDiscardableImagesMetadata();
- 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) {
@@ -314,13 +326,10 @@ TEST_F(DiscardableImageMapTest, GetDiscardableImagesInRectOnePixelQuery) {
scoped_refptr<DisplayItemList> display_list =
content_layer_client.PaintContentsToDisplayList(
ContentLayerClient::PAINTING_BEHAVIOR_NORMAL);
+ display_list->GenerateDiscardableImagesMetadata();
- 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) {
@@ -356,13 +365,10 @@ TEST_F(DiscardableImageMapTest, GetDiscardableImagesInRectMassiveImage) {
scoped_refptr<DisplayItemList> display_list =
content_layer_client.PaintContentsToDisplayList(
ContentLayerClient::PAINTING_BEHAVIOR_NORMAL);
+ display_list->GenerateDiscardableImagesMetadata();
- 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 +385,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->GetNoDrawCanvas()->saveLayer(gfx::RectToSkRect(visible_rect),
+ paint.get());
}
- generator.canvas()->drawImage(discardable_image, 0, 0, nullptr);
- generator.canvas()->restore();
+ image_store->GatherDiscardableImages(record.get());
+ image_store->GetNoDrawCanvas()->restore();
}
std::vector<PositionScaleDrawImage> images =
@@ -405,15 +413,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->GetNoDrawCanvas()->saveLayer(gfx::RectToSkRect(visible_rect),
+ null_paint);
+ image_store->GatherDiscardableImages(record.get());
+ image_store->GetNoDrawCanvas()->restore();
}
std::vector<PositionScaleDrawImage> images =
@@ -437,13 +448,10 @@ TEST_F(DiscardableImageMapTest, GetDiscardableImagesInRectMaxImage) {
scoped_refptr<DisplayItemList> display_list =
content_layer_client.PaintContentsToDisplayList(
ContentLayerClient::PAINTING_BEHAVIOR_NORMAL);
+ display_list->GenerateDiscardableImagesMetadata();
- 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);
@@ -479,13 +487,10 @@ TEST_F(DiscardableImageMapTest, GetDiscardableImagesInRectMaxImageMaxLayer) {
scoped_refptr<DisplayItemList> display_list =
content_layer_client.PaintContentsToDisplayList(
ContentLayerClient::PAINTING_BEHAVIOR_NORMAL);
+ display_list->GenerateDiscardableImagesMetadata();
- 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);
@@ -534,13 +539,10 @@ TEST_F(DiscardableImageMapTest, GetDiscardableImagesRectInBounds) {
scoped_refptr<DisplayItemList> display_list =
content_layer_client.PaintContentsToDisplayList(
ContentLayerClient::PAINTING_BEHAVIOR_NORMAL);
+ display_list->GenerateDiscardableImagesMetadata();
- 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);
@@ -607,13 +609,10 @@ TEST_F(DiscardableImageMapTest, GetDiscardableImagesInShader) {
scoped_refptr<DisplayItemList> display_list =
content_layer_client.PaintContentsToDisplayList(
ContentLayerClient::PAINTING_BEHAVIOR_NORMAL);
+ display_list->GenerateDiscardableImagesMetadata();
- 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 +648,75 @@ 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();
+ display_list->GenerateDiscardableImagesMetadata();
+
+ 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]);
+}
+
+TEST_F(DiscardableImageMapTest, GathersDiscardableImagesFromNestedOps) {
+ sk_sp<PaintRecord> internal_record = sk_make_sp<PaintRecord>();
+ sk_sp<SkImage> discardable_image =
+ CreateDiscardableImage(gfx::Size(100, 100));
+ internal_record->push<DrawImageOp>(
+ PaintImage(discardable_image, PaintImage::AnimationType::STATIC,
+ PaintImage::CompletionState::DONE),
+ 0.f, 0.f, nullptr);
+
+ sk_sp<PaintRecord> list_record = sk_make_sp<PaintRecord>();
+ sk_sp<SkImage> discardable_image2 =
+ CreateDiscardableImage(gfx::Size(100, 100));
+ list_record->push<DrawImageOp>(
+ PaintImage(discardable_image2, PaintImage::AnimationType::STATIC,
+ PaintImage::CompletionState::DONE),
+ 100.f, 100.f, nullptr);
+ scoped_refptr<DisplayItemList> display_list = new DisplayItemList;
+ display_list->CreateAndAppendDrawingItem<DrawingDisplayItem>(
+ gfx::Rect(100, 100, 100, 100), list_record);
+ display_list->Finalize();
+
+ PaintOpBuffer buffer;
+ buffer.push<DrawRecordOp>(internal_record);
+ buffer.push<DrawDisplayItemListOp>(display_list);
+ DiscardableImageMap image_map_;
+ {
+ DiscardableImageMap::ScopedMetadataGenerator generator(&image_map_,
+ gfx::Size(200, 200));
+ generator.image_store()->GatherDiscardableImages(&buffer);
+ }
+
+ gfx::ColorSpace target_color_space;
+ std::vector<DrawImage> images;
+ image_map_.GetDiscardableImagesInRect(gfx::Rect(0, 0, 5, 95), 1.f,
+ target_color_space, &images);
+ EXPECT_EQ(1u, images.size());
+ EXPECT_TRUE(discardable_image == images[0].image());
+
+ images.clear();
+ image_map_.GetDiscardableImagesInRect(gfx::Rect(105, 105, 5, 95), 1.f,
+ target_color_space, &images);
+ EXPECT_EQ(1u, images.size());
+ EXPECT_TRUE(discardable_image2 == images[0].image());
+}
+
} // namespace cc
« no previous file with comments | « cc/paint/discardable_image_map.cc ('k') | cc/paint/discardable_image_store.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698