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

Unified Diff: cc/playback/discardable_image_map_unittest.cc

Issue 2514263002: Handle simple SkImageShaders (Closed)
Patch Set: fix unit test Created 4 years 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
Index: cc/playback/discardable_image_map_unittest.cc
diff --git a/cc/playback/discardable_image_map_unittest.cc b/cc/playback/discardable_image_map_unittest.cc
index 1dfdb3a1b5fe44d22aa226fae9ab5e6903ebe62b..3a8d90be95e8cfcc270d992032a59a2f81575bd2 100644
--- a/cc/playback/discardable_image_map_unittest.cc
+++ b/cc/playback/discardable_image_map_unittest.cc
@@ -25,18 +25,21 @@
namespace cc {
namespace {
-struct PositionDrawImage {
- PositionDrawImage(sk_sp<const SkImage> image, const gfx::Rect& image_rect)
- : image(std::move(image)), image_rect(image_rect) {}
+struct PositionScaleDrawImage {
+ PositionScaleDrawImage(sk_sp<const SkImage> image,
+ const gfx::Rect& image_rect,
+ const SkSize& scale)
+ : image(std::move(image)), image_rect(image_rect), scale(scale) {}
sk_sp<const SkImage> image;
gfx::Rect image_rect;
+ SkSize scale;
};
} // namespace
class DiscardableImageMapTest : public testing::Test {
public:
- std::vector<PositionDrawImage> GetDiscardableImagesInRect(
+ std::vector<PositionScaleDrawImage> GetDiscardableImagesInRect(
const DiscardableImageMap& image_map,
const gfx::Rect& rect) {
std::vector<DrawImage> draw_images;
@@ -45,11 +48,12 @@ class DiscardableImageMapTest : public testing::Test {
std::vector<size_t> indices;
image_map.images_rtree_.Search(rect, &indices);
- std::vector<PositionDrawImage> position_draw_images;
+ std::vector<PositionScaleDrawImage> position_draw_images;
for (size_t index : indices) {
position_draw_images.push_back(
- PositionDrawImage(image_map.all_images_[index].first.image(),
- image_map.all_images_[index].second));
+ PositionScaleDrawImage(image_map.all_images_[index].first.image(),
+ image_map.all_images_[index].second,
+ image_map.all_images_[index].first.scale()));
}
EXPECT_EQ(draw_images.size(), position_draw_images.size());
@@ -100,7 +104,7 @@ TEST_F(DiscardableImageMapTest, GetDiscardableImagesInRectTest) {
for (int y = 0; y < 4; ++y) {
for (int x = 0; x < 4; ++x) {
- std::vector<PositionDrawImage> images = GetDiscardableImagesInRect(
+ std::vector<PositionScaleDrawImage> images = GetDiscardableImagesInRect(
image_map, gfx::Rect(x * 512, y * 512, 500, 500));
if ((x + y) & 1) {
EXPECT_EQ(1u, images.size()) << x << " " << y;
@@ -115,7 +119,7 @@ TEST_F(DiscardableImageMapTest, GetDiscardableImagesInRectTest) {
}
// Capture 4 pixel refs.
- std::vector<PositionDrawImage> images =
+ std::vector<PositionScaleDrawImage> images =
GetDiscardableImagesInRect(image_map, gfx::Rect(512, 512, 2048, 2048));
EXPECT_EQ(4u, images.size());
EXPECT_TRUE(images[0].image == discardable_image[1][2]);
@@ -173,7 +177,7 @@ TEST_F(DiscardableImageMapTest, GetDiscardableImagesInRectNonZeroLayer) {
for (int y = 0; y < 4; ++y) {
for (int x = 0; x < 4; ++x) {
- std::vector<PositionDrawImage> images = GetDiscardableImagesInRect(
+ std::vector<PositionScaleDrawImage> images = GetDiscardableImagesInRect(
image_map, gfx::Rect(1024 + x * 512, y * 512, 500, 500));
if ((x + y) & 1) {
EXPECT_EQ(1u, images.size()) << x << " " << y;
@@ -188,7 +192,7 @@ TEST_F(DiscardableImageMapTest, GetDiscardableImagesInRectNonZeroLayer) {
}
// Capture 4 pixel refs.
{
- std::vector<PositionDrawImage> images = GetDiscardableImagesInRect(
+ std::vector<PositionScaleDrawImage> images = GetDiscardableImagesInRect(
image_map, gfx::Rect(1024 + 512, 512, 2048, 2048));
EXPECT_EQ(4u, images.size());
EXPECT_TRUE(images[0].image == discardable_image[1][2]);
@@ -207,22 +211,22 @@ TEST_F(DiscardableImageMapTest, GetDiscardableImagesInRectNonZeroLayer) {
// Non intersecting rects
{
- std::vector<PositionDrawImage> images =
+ std::vector<PositionScaleDrawImage> images =
GetDiscardableImagesInRect(image_map, gfx::Rect(0, 0, 1000, 1000));
EXPECT_EQ(0u, images.size());
}
{
- std::vector<PositionDrawImage> images =
+ std::vector<PositionScaleDrawImage> images =
GetDiscardableImagesInRect(image_map, gfx::Rect(3500, 0, 1000, 1000));
EXPECT_EQ(0u, images.size());
}
{
- std::vector<PositionDrawImage> images =
+ std::vector<PositionScaleDrawImage> images =
GetDiscardableImagesInRect(image_map, gfx::Rect(0, 1100, 1000, 1000));
EXPECT_EQ(0u, images.size());
}
{
- std::vector<PositionDrawImage> images = GetDiscardableImagesInRect(
+ std::vector<PositionScaleDrawImage> images = GetDiscardableImagesInRect(
image_map, gfx::Rect(3500, 1100, 1000, 1000));
EXPECT_EQ(0u, images.size());
}
@@ -269,7 +273,7 @@ TEST_F(DiscardableImageMapTest, GetDiscardableImagesInRectOnePixelQuery) {
for (int y = 0; y < 4; ++y) {
for (int x = 0; x < 4; ++x) {
- std::vector<PositionDrawImage> images = GetDiscardableImagesInRect(
+ std::vector<PositionScaleDrawImage> images = GetDiscardableImagesInRect(
image_map, gfx::Rect(x * 512 + 256, y * 512 + 256, 1, 1));
if ((x + y) & 1) {
EXPECT_EQ(1u, images.size()) << x << " " << y;
@@ -305,7 +309,7 @@ TEST_F(DiscardableImageMapTest, GetDiscardableImagesInRectMassiveImage) {
visible_rect.size());
display_list->Raster(generator.canvas(), nullptr, gfx::Rect(), 1.f);
}
- std::vector<PositionDrawImage> images =
+ std::vector<PositionScaleDrawImage> images =
GetDiscardableImagesInRect(image_map, gfx::Rect(0, 0, 1, 1));
EXPECT_EQ(1u, images.size());
EXPECT_TRUE(images[0].image == discardable_image);
@@ -332,7 +336,7 @@ TEST_F(DiscardableImageMapTest, PaintDestroyedWhileImageIsDrawn) {
generator.canvas()->restore();
}
- std::vector<PositionDrawImage> images =
+ std::vector<PositionScaleDrawImage> images =
GetDiscardableImagesInRect(image_map, gfx::Rect(0, 0, 1, 1));
EXPECT_EQ(1u, images.size());
EXPECT_TRUE(images[0].image == discardable_image);
@@ -360,7 +364,7 @@ TEST_F(DiscardableImageMapTest, GetDiscardableImagesInRectMaxImage) {
visible_rect.size());
display_list->Raster(generator.canvas(), nullptr, visible_rect, 1.f);
}
- std::vector<PositionDrawImage> images =
+ std::vector<PositionScaleDrawImage> images =
GetDiscardableImagesInRect(image_map, gfx::Rect(42, 42, 1, 1));
EXPECT_EQ(1u, images.size());
EXPECT_TRUE(images[0].image == discardable_image);
@@ -399,7 +403,7 @@ TEST_F(DiscardableImageMapTest, GetDiscardableImagesInRectMaxImageMaxLayer) {
visible_rect.size());
display_list->Raster(generator.canvas(), nullptr, visible_rect, 1.f);
}
- std::vector<PositionDrawImage> images =
+ std::vector<PositionScaleDrawImage> images =
GetDiscardableImagesInRect(image_map, gfx::Rect(0, 0, 1, 1));
EXPECT_EQ(1u, images.size());
EXPECT_EQ(gfx::Rect(0, 0, dimension, dimension), images[0].image_rect);
@@ -450,7 +454,7 @@ TEST_F(DiscardableImageMapTest, GetDiscardableImagesRectInBounds) {
visible_rect.size());
display_list->Raster(generator.canvas(), nullptr, visible_rect, 1.f);
}
- std::vector<PositionDrawImage> images =
+ std::vector<PositionScaleDrawImage> images =
GetDiscardableImagesInRect(image_map, gfx::Rect(0, 0, 1, 1));
EXPECT_EQ(1u, images.size());
EXPECT_EQ(gfx::Rect(0, 0, 90, 89), images[0].image_rect);
@@ -464,4 +468,79 @@ TEST_F(DiscardableImageMapTest, GetDiscardableImagesRectInBounds) {
EXPECT_EQ(gfx::Rect(0, 500, 1000, 100), images[0].image_rect);
}
+TEST_F(DiscardableImageMapTest, GetDiscardableImagesInShader) {
+ gfx::Rect visible_rect(2048, 2048);
+ FakeContentLayerClient content_layer_client;
+ content_layer_client.set_bounds(visible_rect.size());
+
+ // Discardable pixel refs are found in the following grids:
+ // |---|---|---|---|
+ // | | x | | x |
+ // |---|---|---|---|
+ // | x | | x | |
+ // |---|---|---|---|
+ // | | x | | x |
+ // |---|---|---|---|
+ // | x | | x | |
+ // |---|---|---|---|
+ sk_sp<SkImage> discardable_image[4][4];
+ for (int y = 0; y < 4; ++y) {
+ for (int x = 0; x < 4; ++x) {
+ if ((x + y) & 1) {
+ discardable_image[y][x] = CreateDiscardableImage(gfx::Size(500, 500));
+ SkMatrix scale = SkMatrix::MakeScale(x * 0.5f, y * 0.5f);
+ SkPaint paint;
+ paint.setShader(discardable_image[y][x]->makeShader(
+ SkShader::kClamp_TileMode, SkShader::kClamp_TileMode, &scale));
+ content_layer_client.add_draw_rect(
+ gfx::Rect(x * 512 + 6, y * 512 + 6, 500, 500), paint);
+ }
+ }
+ }
+
+ scoped_refptr<DisplayItemList> display_list =
+ 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);
+ }
+
+ for (int y = 0; y < 4; ++y) {
+ for (int x = 0; x < 4; ++x) {
+ std::vector<PositionScaleDrawImage> images = GetDiscardableImagesInRect(
+ image_map, gfx::Rect(x * 512, y * 512, 500, 500));
+ if ((x + y) & 1) {
+ EXPECT_EQ(1u, images.size()) << x << " " << y;
+ EXPECT_TRUE(images[0].image == discardable_image[y][x]) << x << " "
+ << y;
+ EXPECT_EQ(gfx::Rect(x * 512 + 6, y * 512 + 6, 500, 500),
+ images[0].image_rect);
+ EXPECT_EQ(x * 0.5f, images[0].scale.fWidth);
+ EXPECT_EQ(y * 0.5f, images[0].scale.fHeight);
+ } else {
+ EXPECT_EQ(0u, images.size()) << x << " " << y;
+ }
+ }
+ }
+
+ // Capture 4 pixel refs.
+ std::vector<PositionScaleDrawImage> images =
+ GetDiscardableImagesInRect(image_map, gfx::Rect(512, 512, 2048, 2048));
+ EXPECT_EQ(4u, images.size());
+ EXPECT_TRUE(images[0].image == discardable_image[1][2]);
+ EXPECT_EQ(gfx::Rect(2 * 512 + 6, 512 + 6, 500, 500), images[0].image_rect);
+ EXPECT_TRUE(images[1].image == discardable_image[2][1]);
+ EXPECT_EQ(gfx::Rect(512 + 6, 2 * 512 + 6, 500, 500), images[1].image_rect);
+ EXPECT_TRUE(images[2].image == discardable_image[2][3]);
+ EXPECT_EQ(gfx::Rect(3 * 512 + 6, 2 * 512 + 6, 500, 500),
+ images[2].image_rect);
+ EXPECT_TRUE(images[3].image == discardable_image[3][2]);
+ EXPECT_EQ(gfx::Rect(2 * 512 + 6, 3 * 512 + 6, 500, 500),
+ images[3].image_rect);
+}
+
} // namespace cc

Powered by Google App Engine
This is Rietveld 408576698