Index: cc/resources/pixel_ref_map_unittest.cc |
diff --git a/cc/resources/pixel_ref_map_unittest.cc b/cc/resources/pixel_ref_map_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..4c40336bccbb601945366ce2cf80ebe89f4ff509 |
--- /dev/null |
+++ b/cc/resources/pixel_ref_map_unittest.cc |
@@ -0,0 +1,292 @@ |
+// Copyright 2015 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "cc/resources/pixel_ref_map.h" |
+ |
+#include "base/memory/ref_counted.h" |
+#include "base/memory/scoped_ptr.h" |
+#include "base/values.h" |
+#include "cc/resources/picture.h" |
+#include "cc/test/fake_content_layer_client.h" |
+#include "cc/test/skia_common.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+#include "third_party/skia/include/core/SkGraphics.h" |
+#include "ui/gfx/geometry/rect.h" |
+#include "ui/gfx/skia_util.h" |
+ |
+namespace cc { |
+namespace { |
+ |
+TEST(PixelRefMapTest, PixelRefMapIterator) { |
+ gfx::Rect layer_rect(2048, 2048); |
+ |
+ gfx::Size tile_grid_size(512, 512); |
+ |
+ FakeContentLayerClient content_layer_client; |
+ |
+ // Discardable pixel refs are found in the following grids: |
+ // |---|---|---|---| |
+ // | | x | | x | |
+ // |---|---|---|---| |
+ // | x | | x | | |
+ // |---|---|---|---| |
+ // | | x | | x | |
+ // |---|---|---|---| |
+ // | x | | x | | |
+ // |---|---|---|---| |
+ SkBitmap discardable_bitmap[4][4]; |
+ for (int y = 0; y < 4; ++y) { |
+ for (int x = 0; x < 4; ++x) { |
+ if ((x + y) & 1) { |
+ CreateBitmap(gfx::Size(500, 500), "discardable", |
+ &discardable_bitmap[y][x]); |
+ SkPaint paint; |
+ content_layer_client.add_draw_bitmap( |
+ discardable_bitmap[y][x], gfx::Point(x * 512 + 6, y * 512 + 6), |
+ paint); |
+ } |
+ } |
+ } |
+ |
+ scoped_refptr<Picture> picture = |
+ Picture::Create(layer_rect, &content_layer_client, tile_grid_size, true, |
+ RecordingSource::RECORD_NORMALLY); |
+ |
+ // Default iterator does not have any pixel refs. |
+ { |
+ PixelRefMap::Iterator iterator; |
+ EXPECT_FALSE(iterator); |
+ } |
+ |
+ for (int y = 0; y < 4; ++y) { |
+ for (int x = 0; x < 4; ++x) { |
+ PixelRefMap::Iterator iterator(gfx::Rect(x * 512, y * 512, 500, 500), |
+ picture.get()); |
+ if ((x + y) & 1) { |
+ EXPECT_TRUE(iterator) << x << " " << y; |
+ EXPECT_TRUE(*iterator == discardable_bitmap[y][x].pixelRef()) |
+ << x << " " << y; |
+ EXPECT_FALSE(++iterator) << x << " " << y; |
+ } else { |
+ EXPECT_FALSE(iterator) << x << " " << y; |
+ } |
+ } |
+ } |
+ // Capture 4 pixel refs. |
+ { |
+ PixelRefMap::Iterator iterator(gfx::Rect(512, 512, 2048, 2048), |
+ picture.get()); |
+ EXPECT_TRUE(iterator); |
+ EXPECT_TRUE(*iterator == discardable_bitmap[1][2].pixelRef()); |
+ EXPECT_TRUE(++iterator); |
+ EXPECT_TRUE(*iterator == discardable_bitmap[2][1].pixelRef()); |
+ EXPECT_TRUE(++iterator); |
+ EXPECT_TRUE(*iterator == discardable_bitmap[2][3].pixelRef()); |
+ EXPECT_TRUE(++iterator); |
+ EXPECT_TRUE(*iterator == discardable_bitmap[3][2].pixelRef()); |
+ EXPECT_FALSE(++iterator); |
+ } |
+ |
+ // Copy test. |
+ PixelRefMap::Iterator iterator(gfx::Rect(512, 512, 2048, 2048), |
+ picture.get()); |
+ EXPECT_TRUE(iterator); |
+ EXPECT_TRUE(*iterator == discardable_bitmap[1][2].pixelRef()); |
+ EXPECT_TRUE(++iterator); |
+ EXPECT_TRUE(*iterator == discardable_bitmap[2][1].pixelRef()); |
+ |
+ // copy now points to the same spot as iterator, |
+ // but both can be incremented independently. |
+ PixelRefMap::Iterator copy = iterator; |
+ EXPECT_TRUE(++iterator); |
+ EXPECT_TRUE(*iterator == discardable_bitmap[2][3].pixelRef()); |
+ EXPECT_TRUE(++iterator); |
+ EXPECT_TRUE(*iterator == discardable_bitmap[3][2].pixelRef()); |
+ EXPECT_FALSE(++iterator); |
+ |
+ EXPECT_TRUE(copy); |
+ EXPECT_TRUE(*copy == discardable_bitmap[2][1].pixelRef()); |
+ EXPECT_TRUE(++copy); |
+ EXPECT_TRUE(*copy == discardable_bitmap[2][3].pixelRef()); |
+ EXPECT_TRUE(++copy); |
+ EXPECT_TRUE(*copy == discardable_bitmap[3][2].pixelRef()); |
+ EXPECT_FALSE(++copy); |
+} |
+ |
+TEST(PixelRefMapTest, PixelRefMapIteratorNonZeroLayer) { |
+ gfx::Rect layer_rect(1024, 0, 2048, 2048); |
+ |
+ gfx::Size tile_grid_size(512, 512); |
+ |
+ FakeContentLayerClient content_layer_client; |
+ |
+ // Discardable pixel refs are found in the following grids: |
+ // |---|---|---|---| |
+ // | | x | | x | |
+ // |---|---|---|---| |
+ // | x | | x | | |
+ // |---|---|---|---| |
+ // | | x | | x | |
+ // |---|---|---|---| |
+ // | x | | x | | |
+ // |---|---|---|---| |
+ SkBitmap discardable_bitmap[4][4]; |
+ for (int y = 0; y < 4; ++y) { |
+ for (int x = 0; x < 4; ++x) { |
+ if ((x + y) & 1) { |
+ CreateBitmap(gfx::Size(500, 500), "discardable", |
+ &discardable_bitmap[y][x]); |
+ SkPaint paint; |
+ content_layer_client.add_draw_bitmap( |
+ discardable_bitmap[y][x], |
+ gfx::Point(1024 + x * 512 + 6, y * 512 + 6), paint); |
+ } |
+ } |
+ } |
+ |
+ scoped_refptr<Picture> picture = |
+ Picture::Create(layer_rect, &content_layer_client, tile_grid_size, true, |
+ RecordingSource::RECORD_NORMALLY); |
+ |
+ // Default iterator does not have any pixel refs. |
+ { |
+ PixelRefMap::Iterator iterator; |
+ EXPECT_FALSE(iterator); |
+ } |
+ |
+ for (int y = 0; y < 4; ++y) { |
+ for (int x = 0; x < 4; ++x) { |
+ PixelRefMap::Iterator iterator( |
+ gfx::Rect(1024 + x * 512, y * 512, 500, 500), picture.get()); |
+ if ((x + y) & 1) { |
+ EXPECT_TRUE(iterator) << x << " " << y; |
+ EXPECT_TRUE(*iterator == discardable_bitmap[y][x].pixelRef()); |
+ EXPECT_FALSE(++iterator) << x << " " << y; |
+ } else { |
+ EXPECT_FALSE(iterator) << x << " " << y; |
+ } |
+ } |
+ } |
+ // Capture 4 pixel refs. |
+ { |
+ PixelRefMap::Iterator iterator(gfx::Rect(1024 + 512, 512, 2048, 2048), |
+ picture.get()); |
+ EXPECT_TRUE(iterator); |
+ EXPECT_TRUE(*iterator == discardable_bitmap[1][2].pixelRef()); |
+ EXPECT_TRUE(++iterator); |
+ EXPECT_TRUE(*iterator == discardable_bitmap[2][1].pixelRef()); |
+ EXPECT_TRUE(++iterator); |
+ EXPECT_TRUE(*iterator == discardable_bitmap[2][3].pixelRef()); |
+ EXPECT_TRUE(++iterator); |
+ EXPECT_TRUE(*iterator == discardable_bitmap[3][2].pixelRef()); |
+ EXPECT_FALSE(++iterator); |
+ } |
+ |
+ // Copy test. |
+ { |
+ PixelRefMap::Iterator iterator(gfx::Rect(1024 + 512, 512, 2048, 2048), |
+ picture.get()); |
+ EXPECT_TRUE(iterator); |
+ EXPECT_TRUE(*iterator == discardable_bitmap[1][2].pixelRef()); |
+ EXPECT_TRUE(++iterator); |
+ EXPECT_TRUE(*iterator == discardable_bitmap[2][1].pixelRef()); |
+ |
+ // copy now points to the same spot as iterator, |
+ // but both can be incremented independently. |
+ PixelRefMap::Iterator copy = iterator; |
+ EXPECT_TRUE(++iterator); |
+ EXPECT_TRUE(*iterator == discardable_bitmap[2][3].pixelRef()); |
+ EXPECT_TRUE(++iterator); |
+ EXPECT_TRUE(*iterator == discardable_bitmap[3][2].pixelRef()); |
+ EXPECT_FALSE(++iterator); |
+ |
+ EXPECT_TRUE(copy); |
+ EXPECT_TRUE(*copy == discardable_bitmap[2][1].pixelRef()); |
+ EXPECT_TRUE(++copy); |
+ EXPECT_TRUE(*copy == discardable_bitmap[2][3].pixelRef()); |
+ EXPECT_TRUE(++copy); |
+ EXPECT_TRUE(*copy == discardable_bitmap[3][2].pixelRef()); |
+ EXPECT_FALSE(++copy); |
+ } |
+ |
+ // Non intersecting rects |
+ { |
+ PixelRefMap::Iterator iterator(gfx::Rect(0, 0, 1000, 1000), picture.get()); |
+ EXPECT_FALSE(iterator); |
+ } |
+ { |
+ PixelRefMap::Iterator iterator(gfx::Rect(3500, 0, 1000, 1000), |
+ picture.get()); |
+ EXPECT_FALSE(iterator); |
+ } |
+ { |
+ PixelRefMap::Iterator iterator(gfx::Rect(0, 1100, 1000, 1000), |
+ picture.get()); |
+ EXPECT_FALSE(iterator); |
+ } |
+ { |
+ PixelRefMap::Iterator iterator(gfx::Rect(3500, 1100, 1000, 1000), |
+ picture.get()); |
+ EXPECT_FALSE(iterator); |
+ } |
+} |
+ |
+TEST(PixelRefMapTest, PixelRefMapIteratorOnePixelQuery) { |
+ gfx::Rect layer_rect(2048, 2048); |
+ |
+ gfx::Size tile_grid_size(512, 512); |
+ |
+ FakeContentLayerClient content_layer_client; |
+ |
+ // Discardable pixel refs are found in the following grids: |
+ // |---|---|---|---| |
+ // | | x | | x | |
+ // |---|---|---|---| |
+ // | x | | x | | |
+ // |---|---|---|---| |
+ // | | x | | x | |
+ // |---|---|---|---| |
+ // | x | | x | | |
+ // |---|---|---|---| |
+ SkBitmap discardable_bitmap[4][4]; |
+ for (int y = 0; y < 4; ++y) { |
+ for (int x = 0; x < 4; ++x) { |
+ if ((x + y) & 1) { |
+ CreateBitmap(gfx::Size(500, 500), "discardable", |
+ &discardable_bitmap[y][x]); |
+ SkPaint paint; |
+ content_layer_client.add_draw_bitmap( |
+ discardable_bitmap[y][x], gfx::Point(x * 512 + 6, y * 512 + 6), |
+ paint); |
+ } |
+ } |
+ } |
+ |
+ scoped_refptr<Picture> picture = |
+ Picture::Create(layer_rect, &content_layer_client, tile_grid_size, true, |
+ RecordingSource::RECORD_NORMALLY); |
+ |
+ // Default iterator does not have any pixel refs. |
+ { |
+ PixelRefMap::Iterator iterator; |
+ EXPECT_FALSE(iterator); |
+ } |
+ |
+ for (int y = 0; y < 4; ++y) { |
+ for (int x = 0; x < 4; ++x) { |
+ PixelRefMap::Iterator iterator(gfx::Rect(x * 512, y * 512 + 256, 1, 1), |
+ picture.get()); |
+ if ((x + y) & 1) { |
+ EXPECT_TRUE(iterator) << x << " " << y; |
+ EXPECT_TRUE(*iterator == discardable_bitmap[y][x].pixelRef()); |
+ EXPECT_FALSE(++iterator) << x << " " << y; |
+ } else { |
+ EXPECT_FALSE(iterator) << x << " " << y; |
+ } |
+ } |
+ } |
+} |
+ |
+} // namespace |
+} // namespace cc |