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

Side by Side Diff: cc/paint/discardable_image_map_unittest.cc

Issue 2857923004: cc: Keep PaintImage in DrawImage. (Closed)
Patch Set: .. 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 unified diff | 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 »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/paint/discardable_image_map.h" 5 #include "cc/paint/discardable_image_map.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <memory> 9 #include <memory>
10 10
(...skipping 11 matching lines...) Expand all
22 #include "third_party/skia/include/core/SkCanvas.h" 22 #include "third_party/skia/include/core/SkCanvas.h"
23 #include "third_party/skia/include/core/SkGraphics.h" 23 #include "third_party/skia/include/core/SkGraphics.h"
24 #include "third_party/skia/include/core/SkImageGenerator.h" 24 #include "third_party/skia/include/core/SkImageGenerator.h"
25 #include "third_party/skia/include/core/SkRefCnt.h" 25 #include "third_party/skia/include/core/SkRefCnt.h"
26 #include "ui/gfx/geometry/rect.h" 26 #include "ui/gfx/geometry/rect.h"
27 #include "ui/gfx/skia_util.h" 27 #include "ui/gfx/skia_util.h"
28 28
29 namespace cc { 29 namespace cc {
30 namespace { 30 namespace {
31 31
32 PaintImage CreateDiscardablePaintImage(const gfx::Size& size) {
33 return PaintImage(PaintImage::GetNextId(), CreateDiscardableImage(size));
34 }
35
32 struct PositionScaleDrawImage { 36 struct PositionScaleDrawImage {
33 PositionScaleDrawImage(sk_sp<const SkImage> image, 37 PositionScaleDrawImage(const PaintImage& image,
34 const gfx::Rect& image_rect, 38 const gfx::Rect& image_rect,
35 const SkSize& scale) 39 const SkSize& scale)
36 : image(std::move(image)), image_rect(image_rect), scale(scale) {} 40 : image(image), image_rect(image_rect), scale(scale) {}
37 sk_sp<const SkImage> image; 41 PaintImage image;
38 gfx::Rect image_rect; 42 gfx::Rect image_rect;
39 SkSize scale; 43 SkSize scale;
40 }; 44 };
41 45
42 sk_sp<PaintRecord> CreateRecording(const sk_sp<SkImage>& discardable_image, 46 sk_sp<PaintRecord> CreateRecording(const PaintImage& discardable_image,
43 const gfx::Rect& visible_rect) { 47 const gfx::Rect& visible_rect) {
44 PaintRecorder recorder; 48 PaintRecorder recorder;
45 PaintCanvas* canvas = 49 PaintCanvas* canvas =
46 recorder.beginRecording(visible_rect.width(), visible_rect.height()); 50 recorder.beginRecording(visible_rect.width(), visible_rect.height());
47 canvas->drawImage(PaintImage(PaintImage::GetNextId(), discardable_image, 51 canvas->drawImage(discardable_image, 0, 0, nullptr);
48 PaintImage::AnimationType::STATIC,
49 PaintImage::CompletionState::DONE),
50 0, 0, nullptr);
51 sk_sp<PaintRecord> record = recorder.finishRecordingAsPicture(); 52 sk_sp<PaintRecord> record = recorder.finishRecordingAsPicture();
52 return record; 53 return record;
53 } 54 }
54 55
55 } // namespace 56 } // namespace
56 57
57 class DiscardableImageMapTest : public testing::Test { 58 class DiscardableImageMapTest : public testing::Test {
58 public: 59 public:
59 std::vector<PositionScaleDrawImage> GetDiscardableImagesInRect( 60 std::vector<PositionScaleDrawImage> GetDiscardableImagesInRect(
60 const DiscardableImageMap& image_map, 61 const DiscardableImageMap& image_map,
61 const gfx::Rect& rect) { 62 const gfx::Rect& rect) {
62 std::vector<DrawImage> draw_images; 63 std::vector<DrawImage> draw_images;
63 // Choose a not-SRGB-and-not-invalid target color space to verify that it 64 // Choose a not-SRGB-and-not-invalid target color space to verify that it
64 // is passed correctly to the resulting DrawImages. 65 // is passed correctly to the resulting DrawImages.
65 gfx::ColorSpace target_color_space = gfx::ColorSpace::CreateXYZD50(); 66 gfx::ColorSpace target_color_space = gfx::ColorSpace::CreateXYZD50();
66 image_map.GetDiscardableImagesInRect(rect, 1.f, target_color_space, 67 image_map.GetDiscardableImagesInRect(rect, 1.f, target_color_space,
67 &draw_images); 68 &draw_images);
68 69
69 std::vector<PositionScaleDrawImage> position_draw_images; 70 std::vector<PositionScaleDrawImage> position_draw_images;
70 for (size_t index : image_map.images_rtree_.Search(rect)) { 71 for (size_t index : image_map.images_rtree_.Search(rect)) {
71 position_draw_images.push_back( 72 position_draw_images.push_back(PositionScaleDrawImage(
72 PositionScaleDrawImage(image_map.all_images_[index].first.image(), 73 image_map.all_images_[index].first.paint_image(),
73 image_map.all_images_[index].second, 74 image_map.all_images_[index].second,
74 image_map.all_images_[index].first.scale())); 75 image_map.all_images_[index].first.scale()));
75 } 76 }
76 77
77 EXPECT_EQ(draw_images.size(), position_draw_images.size()); 78 EXPECT_EQ(draw_images.size(), position_draw_images.size());
78 for (size_t i = 0; i < draw_images.size(); ++i) { 79 for (size_t i = 0; i < draw_images.size(); ++i) {
79 EXPECT_TRUE(draw_images[i].image() == position_draw_images[i].image); 80 EXPECT_TRUE(draw_images[i].paint_image() ==
81 position_draw_images[i].image);
80 EXPECT_EQ(draw_images[i].target_color_space(), target_color_space); 82 EXPECT_EQ(draw_images[i].target_color_space(), target_color_space);
81 } 83 }
82 return position_draw_images; 84 return position_draw_images;
83 } 85 }
84 86
85 // Note that the image rtree outsets the images by 1, see the comment in 87 // Note that the image rtree outsets the images by 1, see the comment in
86 // DiscardableImagesMetadataCanvas::AddImage. 88 // DiscardableImagesMetadataCanvas::AddImage.
87 std::vector<gfx::Rect> InsetImageRects( 89 std::vector<gfx::Rect> InsetImageRects(
88 const std::vector<PositionScaleDrawImage>& images) { 90 const std::vector<PositionScaleDrawImage>& images) {
89 std::vector<gfx::Rect> result; 91 std::vector<gfx::Rect> result;
(...skipping 13 matching lines...) Expand all
103 // Discardable pixel refs are found in the following grids: 105 // Discardable pixel refs are found in the following grids:
104 // |---|---|---|---| 106 // |---|---|---|---|
105 // | | x | | x | 107 // | | x | | x |
106 // |---|---|---|---| 108 // |---|---|---|---|
107 // | x | | x | | 109 // | x | | x | |
108 // |---|---|---|---| 110 // |---|---|---|---|
109 // | | x | | x | 111 // | | x | | x |
110 // |---|---|---|---| 112 // |---|---|---|---|
111 // | x | | x | | 113 // | x | | x | |
112 // |---|---|---|---| 114 // |---|---|---|---|
113 sk_sp<SkImage> discardable_image[4][4]; 115 PaintImage discardable_image[4][4];
114 for (int y = 0; y < 4; ++y) { 116 for (int y = 0; y < 4; ++y) {
115 for (int x = 0; x < 4; ++x) { 117 for (int x = 0; x < 4; ++x) {
116 if ((x + y) & 1) { 118 if ((x + y) & 1) {
117 discardable_image[y][x] = CreateDiscardableImage(gfx::Size(500, 500)); 119 discardable_image[y][x] =
120 CreateDiscardablePaintImage(gfx::Size(500, 500));
118 PaintFlags flags; 121 PaintFlags flags;
119 content_layer_client.add_draw_image( 122 content_layer_client.add_draw_image(
120 discardable_image[y][x], gfx::Point(x * 512 + 6, y * 512 + 6), 123 discardable_image[y][x], gfx::Point(x * 512 + 6, y * 512 + 6),
121 flags); 124 flags);
122 } 125 }
123 } 126 }
124 } 127 }
125 128
126 scoped_refptr<DisplayItemList> display_list = 129 scoped_refptr<DisplayItemList> display_list =
127 content_layer_client.PaintContentsToDisplayList( 130 content_layer_client.PaintContentsToDisplayList(
128 ContentLayerClient::PAINTING_BEHAVIOR_NORMAL); 131 ContentLayerClient::PAINTING_BEHAVIOR_NORMAL);
129 display_list->GenerateDiscardableImagesMetadata(); 132 display_list->GenerateDiscardableImagesMetadata();
130 133
131 const DiscardableImageMap& image_map = 134 const DiscardableImageMap& image_map =
132 display_list->discardable_image_map_for_testing(); 135 display_list->discardable_image_map_for_testing();
133 136
134 for (int y = 0; y < 4; ++y) { 137 for (int y = 0; y < 4; ++y) {
135 for (int x = 0; x < 4; ++x) { 138 for (int x = 0; x < 4; ++x) {
136 std::vector<PositionScaleDrawImage> images = GetDiscardableImagesInRect( 139 std::vector<PositionScaleDrawImage> images = GetDiscardableImagesInRect(
137 image_map, gfx::Rect(x * 512, y * 512, 500, 500)); 140 image_map, gfx::Rect(x * 512, y * 512, 500, 500));
138 std::vector<gfx::Rect> inset_rects = InsetImageRects(images); 141 std::vector<gfx::Rect> inset_rects = InsetImageRects(images);
139 if ((x + y) & 1) { 142 if ((x + y) & 1) {
140 EXPECT_EQ(1u, images.size()) << x << " " << y; 143 EXPECT_EQ(1u, images.size()) << x << " " << y;
141 EXPECT_TRUE(images[0].image == discardable_image[y][x]) 144 EXPECT_TRUE(images[0].image == discardable_image[y][x])
142 << x << " " << y; 145 << x << " " << y;
143 EXPECT_EQ(gfx::Rect(x * 512 + 6, y * 512 + 6, 500, 500), 146 EXPECT_EQ(gfx::Rect(x * 512 + 6, y * 512 + 6, 500, 500),
144 inset_rects[0]); 147 inset_rects[0]);
145 EXPECT_EQ(images[0].image_rect, 148 EXPECT_EQ(images[0].image_rect,
146 image_map.GetRectForImage(images[0].image->uniqueID())); 149 image_map.GetRectForImage(images[0].image.stable_id()));
147 } else { 150 } else {
148 EXPECT_EQ(0u, images.size()) << x << " " << y; 151 EXPECT_EQ(0u, images.size()) << x << " " << y;
149 } 152 }
150 } 153 }
151 } 154 }
152 155
153 // Capture 4 pixel refs. 156 // Capture 4 pixel refs.
154 std::vector<PositionScaleDrawImage> images = 157 std::vector<PositionScaleDrawImage> images =
155 GetDiscardableImagesInRect(image_map, gfx::Rect(512, 512, 2048, 2048)); 158 GetDiscardableImagesInRect(image_map, gfx::Rect(512, 512, 2048, 2048));
156 std::vector<gfx::Rect> inset_rects = InsetImageRects(images); 159 std::vector<gfx::Rect> inset_rects = InsetImageRects(images);
157 EXPECT_EQ(4u, images.size()); 160 EXPECT_EQ(4u, images.size());
158 161
159 EXPECT_TRUE(images[0].image == discardable_image[1][2]); 162 EXPECT_TRUE(images[0].image == discardable_image[1][2]);
160 EXPECT_EQ(gfx::Rect(2 * 512 + 6, 512 + 6, 500, 500), inset_rects[0]); 163 EXPECT_EQ(gfx::Rect(2 * 512 + 6, 512 + 6, 500, 500), inset_rects[0]);
161 EXPECT_EQ(images[0].image_rect, 164 EXPECT_EQ(images[0].image_rect,
162 image_map.GetRectForImage(images[0].image->uniqueID())); 165 image_map.GetRectForImage(images[0].image.stable_id()));
163 166
164 EXPECT_TRUE(images[1].image == discardable_image[2][1]); 167 EXPECT_TRUE(images[1].image == discardable_image[2][1]);
165 EXPECT_EQ(gfx::Rect(512 + 6, 2 * 512 + 6, 500, 500), inset_rects[1]); 168 EXPECT_EQ(gfx::Rect(512 + 6, 2 * 512 + 6, 500, 500), inset_rects[1]);
166 EXPECT_EQ(images[1].image_rect, 169 EXPECT_EQ(images[1].image_rect,
167 image_map.GetRectForImage(images[1].image->uniqueID())); 170 image_map.GetRectForImage(images[1].image.stable_id()));
168 171
169 EXPECT_TRUE(images[2].image == discardable_image[2][3]); 172 EXPECT_TRUE(images[2].image == discardable_image[2][3]);
170 EXPECT_EQ(gfx::Rect(3 * 512 + 6, 2 * 512 + 6, 500, 500), inset_rects[2]); 173 EXPECT_EQ(gfx::Rect(3 * 512 + 6, 2 * 512 + 6, 500, 500), inset_rects[2]);
171 EXPECT_EQ(images[2].image_rect, 174 EXPECT_EQ(images[2].image_rect,
172 image_map.GetRectForImage(images[2].image->uniqueID())); 175 image_map.GetRectForImage(images[2].image.stable_id()));
173 176
174 EXPECT_TRUE(images[3].image == discardable_image[3][2]); 177 EXPECT_TRUE(images[3].image == discardable_image[3][2]);
175 EXPECT_EQ(gfx::Rect(2 * 512 + 6, 3 * 512 + 6, 500, 500), inset_rects[3]); 178 EXPECT_EQ(gfx::Rect(2 * 512 + 6, 3 * 512 + 6, 500, 500), inset_rects[3]);
176 EXPECT_EQ(images[3].image_rect, 179 EXPECT_EQ(images[3].image_rect,
177 image_map.GetRectForImage(images[3].image->uniqueID())); 180 image_map.GetRectForImage(images[3].image.stable_id()));
178 } 181 }
179 182
180 TEST_F(DiscardableImageMapTest, GetDiscardableImagesInRectNonZeroLayer) { 183 TEST_F(DiscardableImageMapTest, GetDiscardableImagesInRectNonZeroLayer) {
181 gfx::Rect visible_rect(1024, 0, 2048, 2048); 184 gfx::Rect visible_rect(1024, 0, 2048, 2048);
182 // Make sure visible rect fits into the layer size. 185 // Make sure visible rect fits into the layer size.
183 gfx::Size layer_size(visible_rect.right(), visible_rect.bottom()); 186 gfx::Size layer_size(visible_rect.right(), visible_rect.bottom());
184 FakeContentLayerClient content_layer_client; 187 FakeContentLayerClient content_layer_client;
185 content_layer_client.set_bounds(layer_size); 188 content_layer_client.set_bounds(layer_size);
186 189
187 // Discardable pixel refs are found in the following grids: 190 // Discardable pixel refs are found in the following grids:
188 // |---|---|---|---| 191 // |---|---|---|---|
189 // | | x | | x | 192 // | | x | | x |
190 // |---|---|---|---| 193 // |---|---|---|---|
191 // | x | | x | | 194 // | x | | x | |
192 // |---|---|---|---| 195 // |---|---|---|---|
193 // | | x | | x | 196 // | | x | | x |
194 // |---|---|---|---| 197 // |---|---|---|---|
195 // | x | | x | | 198 // | x | | x | |
196 // |---|---|---|---| 199 // |---|---|---|---|
197 sk_sp<SkImage> discardable_image[4][4]; 200 PaintImage discardable_image[4][4];
198 for (int y = 0; y < 4; ++y) { 201 for (int y = 0; y < 4; ++y) {
199 for (int x = 0; x < 4; ++x) { 202 for (int x = 0; x < 4; ++x) {
200 if ((x + y) & 1) { 203 if ((x + y) & 1) {
201 discardable_image[y][x] = CreateDiscardableImage(gfx::Size(500, 500)); 204 discardable_image[y][x] =
205 CreateDiscardablePaintImage(gfx::Size(500, 500));
202 PaintFlags flags; 206 PaintFlags flags;
203 content_layer_client.add_draw_image( 207 content_layer_client.add_draw_image(
204 discardable_image[y][x], 208 discardable_image[y][x],
205 gfx::Point(1024 + x * 512 + 6, y * 512 + 6), flags); 209 gfx::Point(1024 + x * 512 + 6, y * 512 + 6), flags);
206 } 210 }
207 } 211 }
208 } 212 }
209 213
210 scoped_refptr<DisplayItemList> display_list = 214 scoped_refptr<DisplayItemList> display_list =
211 content_layer_client.PaintContentsToDisplayList( 215 content_layer_client.PaintContentsToDisplayList(
212 ContentLayerClient::PAINTING_BEHAVIOR_NORMAL); 216 ContentLayerClient::PAINTING_BEHAVIOR_NORMAL);
213 display_list->GenerateDiscardableImagesMetadata(); 217 display_list->GenerateDiscardableImagesMetadata();
214 218
215 const DiscardableImageMap& image_map = 219 const DiscardableImageMap& image_map =
216 display_list->discardable_image_map_for_testing(); 220 display_list->discardable_image_map_for_testing();
217 221
218 for (int y = 0; y < 4; ++y) { 222 for (int y = 0; y < 4; ++y) {
219 for (int x = 0; x < 4; ++x) { 223 for (int x = 0; x < 4; ++x) {
220 std::vector<PositionScaleDrawImage> images = GetDiscardableImagesInRect( 224 std::vector<PositionScaleDrawImage> images = GetDiscardableImagesInRect(
221 image_map, gfx::Rect(1024 + x * 512, y * 512, 500, 500)); 225 image_map, gfx::Rect(1024 + x * 512, y * 512, 500, 500));
222 std::vector<gfx::Rect> inset_rects = InsetImageRects(images); 226 std::vector<gfx::Rect> inset_rects = InsetImageRects(images);
223 if ((x + y) & 1) { 227 if ((x + y) & 1) {
224 EXPECT_EQ(1u, images.size()) << x << " " << y; 228 EXPECT_EQ(1u, images.size()) << x << " " << y;
225 EXPECT_TRUE(images[0].image == discardable_image[y][x]) 229 EXPECT_TRUE(images[0].image == discardable_image[y][x])
226 << x << " " << y; 230 << x << " " << y;
227 EXPECT_EQ(gfx::Rect(1024 + x * 512 + 6, y * 512 + 6, 500, 500), 231 EXPECT_EQ(gfx::Rect(1024 + x * 512 + 6, y * 512 + 6, 500, 500),
228 inset_rects[0]); 232 inset_rects[0]);
229 EXPECT_EQ(images[0].image_rect, 233 EXPECT_EQ(images[0].image_rect,
230 image_map.GetRectForImage(images[0].image->uniqueID())); 234 image_map.GetRectForImage(images[0].image.stable_id()));
231 } else { 235 } else {
232 EXPECT_EQ(0u, images.size()) << x << " " << y; 236 EXPECT_EQ(0u, images.size()) << x << " " << y;
233 } 237 }
234 } 238 }
235 } 239 }
236 // Capture 4 pixel refs. 240 // Capture 4 pixel refs.
237 { 241 {
238 std::vector<PositionScaleDrawImage> images = GetDiscardableImagesInRect( 242 std::vector<PositionScaleDrawImage> images = GetDiscardableImagesInRect(
239 image_map, gfx::Rect(1024 + 512, 512, 2048, 2048)); 243 image_map, gfx::Rect(1024 + 512, 512, 2048, 2048));
240 std::vector<gfx::Rect> inset_rects = InsetImageRects(images); 244 std::vector<gfx::Rect> inset_rects = InsetImageRects(images);
241 EXPECT_EQ(4u, images.size()); 245 EXPECT_EQ(4u, images.size());
242 246
243 EXPECT_TRUE(images[0].image == discardable_image[1][2]); 247 EXPECT_TRUE(images[0].image == discardable_image[1][2]);
244 EXPECT_EQ(gfx::Rect(1024 + 2 * 512 + 6, 512 + 6, 500, 500), inset_rects[0]); 248 EXPECT_EQ(gfx::Rect(1024 + 2 * 512 + 6, 512 + 6, 500, 500), inset_rects[0]);
245 EXPECT_EQ(images[0].image_rect, 249 EXPECT_EQ(images[0].image_rect,
246 image_map.GetRectForImage(images[0].image->uniqueID())); 250 image_map.GetRectForImage(images[0].image.stable_id()));
247 251
248 EXPECT_TRUE(images[1].image == discardable_image[2][1]); 252 EXPECT_TRUE(images[1].image == discardable_image[2][1]);
249 EXPECT_EQ(gfx::Rect(1024 + 512 + 6, 2 * 512 + 6, 500, 500), inset_rects[1]); 253 EXPECT_EQ(gfx::Rect(1024 + 512 + 6, 2 * 512 + 6, 500, 500), inset_rects[1]);
250 EXPECT_EQ(images[1].image_rect, 254 EXPECT_EQ(images[1].image_rect,
251 image_map.GetRectForImage(images[1].image->uniqueID())); 255 image_map.GetRectForImage(images[1].image.stable_id()));
252 256
253 EXPECT_TRUE(images[2].image == discardable_image[2][3]); 257 EXPECT_TRUE(images[2].image == discardable_image[2][3]);
254 EXPECT_EQ(gfx::Rect(1024 + 3 * 512 + 6, 2 * 512 + 6, 500, 500), 258 EXPECT_EQ(gfx::Rect(1024 + 3 * 512 + 6, 2 * 512 + 6, 500, 500),
255 inset_rects[2]); 259 inset_rects[2]);
256 EXPECT_EQ(images[2].image_rect, 260 EXPECT_EQ(images[2].image_rect,
257 image_map.GetRectForImage(images[2].image->uniqueID())); 261 image_map.GetRectForImage(images[2].image.stable_id()));
258 262
259 EXPECT_TRUE(images[3].image == discardable_image[3][2]); 263 EXPECT_TRUE(images[3].image == discardable_image[3][2]);
260 EXPECT_EQ(gfx::Rect(1024 + 2 * 512 + 6, 3 * 512 + 6, 500, 500), 264 EXPECT_EQ(gfx::Rect(1024 + 2 * 512 + 6, 3 * 512 + 6, 500, 500),
261 inset_rects[3]); 265 inset_rects[3]);
262 EXPECT_EQ(images[3].image_rect, 266 EXPECT_EQ(images[3].image_rect,
263 image_map.GetRectForImage(images[3].image->uniqueID())); 267 image_map.GetRectForImage(images[3].image.stable_id()));
264 } 268 }
265 269
266 // Non intersecting rects 270 // Non intersecting rects
267 { 271 {
268 std::vector<PositionScaleDrawImage> images = 272 std::vector<PositionScaleDrawImage> images =
269 GetDiscardableImagesInRect(image_map, gfx::Rect(0, 0, 1000, 1000)); 273 GetDiscardableImagesInRect(image_map, gfx::Rect(0, 0, 1000, 1000));
270 EXPECT_EQ(0u, images.size()); 274 EXPECT_EQ(0u, images.size());
271 } 275 }
272 { 276 {
273 std::vector<PositionScaleDrawImage> images = 277 std::vector<PositionScaleDrawImage> images =
274 GetDiscardableImagesInRect(image_map, gfx::Rect(3500, 0, 1000, 1000)); 278 GetDiscardableImagesInRect(image_map, gfx::Rect(3500, 0, 1000, 1000));
275 EXPECT_EQ(0u, images.size()); 279 EXPECT_EQ(0u, images.size());
276 } 280 }
277 { 281 {
278 std::vector<PositionScaleDrawImage> images = 282 std::vector<PositionScaleDrawImage> images =
279 GetDiscardableImagesInRect(image_map, gfx::Rect(0, 1100, 1000, 1000)); 283 GetDiscardableImagesInRect(image_map, gfx::Rect(0, 1100, 1000, 1000));
280 EXPECT_EQ(0u, images.size()); 284 EXPECT_EQ(0u, images.size());
281 } 285 }
282 { 286 {
283 std::vector<PositionScaleDrawImage> images = GetDiscardableImagesInRect( 287 std::vector<PositionScaleDrawImage> images = GetDiscardableImagesInRect(
284 image_map, gfx::Rect(3500, 1100, 1000, 1000)); 288 image_map, gfx::Rect(3500, 1100, 1000, 1000));
285 EXPECT_EQ(0u, images.size()); 289 EXPECT_EQ(0u, images.size());
286 } 290 }
287 291
288 // Image not present in the list. 292 // Image not present in the list.
289 { 293 {
290 sk_sp<SkImage> image = CreateDiscardableImage(gfx::Size(500, 500)); 294 PaintImage image = CreateDiscardablePaintImage(gfx::Size(500, 500));
291 EXPECT_EQ(gfx::Rect(), image_map.GetRectForImage(image->uniqueID())); 295 EXPECT_EQ(gfx::Rect(), image_map.GetRectForImage(image.stable_id()));
292 } 296 }
293 } 297 }
294 298
295 TEST_F(DiscardableImageMapTest, GetDiscardableImagesInRectOnePixelQuery) { 299 TEST_F(DiscardableImageMapTest, GetDiscardableImagesInRectOnePixelQuery) {
296 gfx::Rect visible_rect(2048, 2048); 300 gfx::Rect visible_rect(2048, 2048);
297 FakeContentLayerClient content_layer_client; 301 FakeContentLayerClient content_layer_client;
298 content_layer_client.set_bounds(visible_rect.size()); 302 content_layer_client.set_bounds(visible_rect.size());
299 303
300 // Discardable pixel refs are found in the following grids: 304 // Discardable pixel refs are found in the following grids:
301 // |---|---|---|---| 305 // |---|---|---|---|
302 // | | x | | x | 306 // | | x | | x |
303 // |---|---|---|---| 307 // |---|---|---|---|
304 // | x | | x | | 308 // | x | | x | |
305 // |---|---|---|---| 309 // |---|---|---|---|
306 // | | x | | x | 310 // | | x | | x |
307 // |---|---|---|---| 311 // |---|---|---|---|
308 // | x | | x | | 312 // | x | | x | |
309 // |---|---|---|---| 313 // |---|---|---|---|
310 sk_sp<SkImage> discardable_image[4][4]; 314 PaintImage discardable_image[4][4];
311 for (int y = 0; y < 4; ++y) { 315 for (int y = 0; y < 4; ++y) {
312 for (int x = 0; x < 4; ++x) { 316 for (int x = 0; x < 4; ++x) {
313 if ((x + y) & 1) { 317 if ((x + y) & 1) {
314 discardable_image[y][x] = CreateDiscardableImage(gfx::Size(500, 500)); 318 discardable_image[y][x] =
319 CreateDiscardablePaintImage(gfx::Size(500, 500));
315 PaintFlags flags; 320 PaintFlags flags;
316 content_layer_client.add_draw_image( 321 content_layer_client.add_draw_image(
317 discardable_image[y][x], gfx::Point(x * 512 + 6, y * 512 + 6), 322 discardable_image[y][x], gfx::Point(x * 512 + 6, y * 512 + 6),
318 flags); 323 flags);
319 } 324 }
320 } 325 }
321 } 326 }
322 327
323 scoped_refptr<DisplayItemList> display_list = 328 scoped_refptr<DisplayItemList> display_list =
324 content_layer_client.PaintContentsToDisplayList( 329 content_layer_client.PaintContentsToDisplayList(
325 ContentLayerClient::PAINTING_BEHAVIOR_NORMAL); 330 ContentLayerClient::PAINTING_BEHAVIOR_NORMAL);
326 display_list->GenerateDiscardableImagesMetadata(); 331 display_list->GenerateDiscardableImagesMetadata();
327 332
328 const DiscardableImageMap& image_map = 333 const DiscardableImageMap& image_map =
329 display_list->discardable_image_map_for_testing(); 334 display_list->discardable_image_map_for_testing();
330 335
331 for (int y = 0; y < 4; ++y) { 336 for (int y = 0; y < 4; ++y) {
332 for (int x = 0; x < 4; ++x) { 337 for (int x = 0; x < 4; ++x) {
333 std::vector<PositionScaleDrawImage> images = GetDiscardableImagesInRect( 338 std::vector<PositionScaleDrawImage> images = GetDiscardableImagesInRect(
334 image_map, gfx::Rect(x * 512 + 256, y * 512 + 256, 1, 1)); 339 image_map, gfx::Rect(x * 512 + 256, y * 512 + 256, 1, 1));
335 std::vector<gfx::Rect> inset_rects = InsetImageRects(images); 340 std::vector<gfx::Rect> inset_rects = InsetImageRects(images);
336 if ((x + y) & 1) { 341 if ((x + y) & 1) {
337 EXPECT_EQ(1u, images.size()) << x << " " << y; 342 EXPECT_EQ(1u, images.size()) << x << " " << y;
338 EXPECT_TRUE(images[0].image == discardable_image[y][x]) 343 EXPECT_TRUE(images[0].image == discardable_image[y][x])
339 << x << " " << y; 344 << x << " " << y;
340 EXPECT_EQ(gfx::Rect(x * 512 + 6, y * 512 + 6, 500, 500), 345 EXPECT_EQ(gfx::Rect(x * 512 + 6, y * 512 + 6, 500, 500),
341 inset_rects[0]); 346 inset_rects[0]);
342 EXPECT_EQ(images[0].image_rect, 347 EXPECT_EQ(images[0].image_rect,
343 image_map.GetRectForImage(images[0].image->uniqueID())); 348 image_map.GetRectForImage(images[0].image.stable_id()));
344 } else { 349 } else {
345 EXPECT_EQ(0u, images.size()) << x << " " << y; 350 EXPECT_EQ(0u, images.size()) << x << " " << y;
346 } 351 }
347 } 352 }
348 } 353 }
349 } 354 }
350 355
351 TEST_F(DiscardableImageMapTest, GetDiscardableImagesInRectMassiveImage) { 356 TEST_F(DiscardableImageMapTest, GetDiscardableImagesInRectMassiveImage) {
352 gfx::Rect visible_rect(2048, 2048); 357 gfx::Rect visible_rect(2048, 2048);
353 FakeContentLayerClient content_layer_client; 358 FakeContentLayerClient content_layer_client;
354 content_layer_client.set_bounds(visible_rect.size()); 359 content_layer_client.set_bounds(visible_rect.size());
355 360
356 sk_sp<SkImage> discardable_image = 361 PaintImage discardable_image =
357 CreateDiscardableImage(gfx::Size(1 << 25, 1 << 25)); 362 CreateDiscardablePaintImage(gfx::Size(1 << 25, 1 << 25));
358 PaintFlags flags; 363 PaintFlags flags;
359 content_layer_client.add_draw_image(discardable_image, gfx::Point(0, 0), 364 content_layer_client.add_draw_image(discardable_image, gfx::Point(0, 0),
360 flags); 365 flags);
361 366
362 scoped_refptr<DisplayItemList> display_list = 367 scoped_refptr<DisplayItemList> display_list =
363 content_layer_client.PaintContentsToDisplayList( 368 content_layer_client.PaintContentsToDisplayList(
364 ContentLayerClient::PAINTING_BEHAVIOR_NORMAL); 369 ContentLayerClient::PAINTING_BEHAVIOR_NORMAL);
365 display_list->GenerateDiscardableImagesMetadata(); 370 display_list->GenerateDiscardableImagesMetadata();
366 371
367 const DiscardableImageMap& image_map = 372 const DiscardableImageMap& image_map =
368 display_list->discardable_image_map_for_testing(); 373 display_list->discardable_image_map_for_testing();
369 std::vector<PositionScaleDrawImage> images = 374 std::vector<PositionScaleDrawImage> images =
370 GetDiscardableImagesInRect(image_map, gfx::Rect(0, 0, 1, 1)); 375 GetDiscardableImagesInRect(image_map, gfx::Rect(0, 0, 1, 1));
371 std::vector<gfx::Rect> inset_rects = InsetImageRects(images); 376 std::vector<gfx::Rect> inset_rects = InsetImageRects(images);
372 EXPECT_EQ(1u, images.size()); 377 EXPECT_EQ(1u, images.size());
373 EXPECT_TRUE(images[0].image == discardable_image); 378 EXPECT_TRUE(images[0].image == discardable_image);
374 EXPECT_EQ(gfx::Rect(0, 0, 2048, 2048), inset_rects[0]); 379 EXPECT_EQ(gfx::Rect(0, 0, 2048, 2048), inset_rects[0]);
375 EXPECT_EQ(images[0].image_rect, 380 EXPECT_EQ(images[0].image_rect,
376 image_map.GetRectForImage(images[0].image->uniqueID())); 381 image_map.GetRectForImage(images[0].image.stable_id()));
377 } 382 }
378 383
379 TEST_F(DiscardableImageMapTest, PaintDestroyedWhileImageIsDrawn) { 384 TEST_F(DiscardableImageMapTest, PaintDestroyedWhileImageIsDrawn) {
380 gfx::Rect visible_rect(2048, 2048); 385 gfx::Rect visible_rect(2048, 2048);
381 FakeContentLayerClient content_layer_client; 386 FakeContentLayerClient content_layer_client;
382 content_layer_client.set_bounds(visible_rect.size()); 387 content_layer_client.set_bounds(visible_rect.size());
383 388
384 sk_sp<SkImage> discardable_image = CreateDiscardableImage(gfx::Size(10, 10)); 389 PaintImage discardable_image = CreateDiscardablePaintImage(gfx::Size(10, 10));
385 sk_sp<PaintRecord> record = CreateRecording(discardable_image, visible_rect); 390 sk_sp<PaintRecord> record = CreateRecording(discardable_image, visible_rect);
386 391
387 DiscardableImageMap image_map; 392 DiscardableImageMap image_map;
388 { 393 {
389 DiscardableImageMap::ScopedMetadataGenerator generator(&image_map, 394 DiscardableImageMap::ScopedMetadataGenerator generator(&image_map,
390 visible_rect.size()); 395 visible_rect.size());
391 DiscardableImageStore* image_store = generator.image_store(); 396 DiscardableImageStore* image_store = generator.image_store();
392 { 397 {
393 std::unique_ptr<SkPaint> paint(new SkPaint()); 398 std::unique_ptr<SkPaint> paint(new SkPaint());
394 image_store->GetNoDrawCanvas()->saveLayer(gfx::RectToSkRect(visible_rect), 399 image_store->GetNoDrawCanvas()->saveLayer(gfx::RectToSkRect(visible_rect),
395 paint.get()); 400 paint.get());
396 } 401 }
397 image_store->GatherDiscardableImages(record.get()); 402 image_store->GatherDiscardableImages(record.get());
398 image_store->GetNoDrawCanvas()->restore(); 403 image_store->GetNoDrawCanvas()->restore();
399 } 404 }
400 405
401 std::vector<PositionScaleDrawImage> images = 406 std::vector<PositionScaleDrawImage> images =
402 GetDiscardableImagesInRect(image_map, gfx::Rect(0, 0, 1, 1)); 407 GetDiscardableImagesInRect(image_map, gfx::Rect(0, 0, 1, 1));
403 EXPECT_EQ(1u, images.size()); 408 EXPECT_EQ(1u, images.size());
404 EXPECT_TRUE(images[0].image == discardable_image); 409 EXPECT_TRUE(images[0].image == discardable_image);
405 } 410 }
406 411
407 TEST_F(DiscardableImageMapTest, NullPaintOnSaveLayer) { 412 TEST_F(DiscardableImageMapTest, NullPaintOnSaveLayer) {
408 gfx::Rect visible_rect(2048, 2048); 413 gfx::Rect visible_rect(2048, 2048);
409 FakeContentLayerClient content_layer_client; 414 FakeContentLayerClient content_layer_client;
410 content_layer_client.set_bounds(visible_rect.size()); 415 content_layer_client.set_bounds(visible_rect.size());
411 416
412 sk_sp<SkImage> discardable_image = CreateDiscardableImage(gfx::Size(10, 10)); 417 PaintImage discardable_image = CreateDiscardablePaintImage(gfx::Size(10, 10));
413 sk_sp<PaintRecord> record = CreateRecording(discardable_image, visible_rect); 418 sk_sp<PaintRecord> record = CreateRecording(discardable_image, visible_rect);
414 419
415 DiscardableImageMap image_map; 420 DiscardableImageMap image_map;
416 { 421 {
417 DiscardableImageMap::ScopedMetadataGenerator generator(&image_map, 422 DiscardableImageMap::ScopedMetadataGenerator generator(&image_map,
418 visible_rect.size()); 423 visible_rect.size());
419 DiscardableImageStore* image_store = generator.image_store(); 424 DiscardableImageStore* image_store = generator.image_store();
420 SkPaint* null_paint = nullptr; 425 SkPaint* null_paint = nullptr;
421 image_store->GetNoDrawCanvas()->saveLayer(gfx::RectToSkRect(visible_rect), 426 image_store->GetNoDrawCanvas()->saveLayer(gfx::RectToSkRect(visible_rect),
422 null_paint); 427 null_paint);
423 image_store->GatherDiscardableImages(record.get()); 428 image_store->GatherDiscardableImages(record.get());
424 image_store->GetNoDrawCanvas()->restore(); 429 image_store->GetNoDrawCanvas()->restore();
425 } 430 }
426 431
427 std::vector<PositionScaleDrawImage> images = 432 std::vector<PositionScaleDrawImage> images =
428 GetDiscardableImagesInRect(image_map, gfx::Rect(0, 0, 1, 1)); 433 GetDiscardableImagesInRect(image_map, gfx::Rect(0, 0, 1, 1));
429 EXPECT_EQ(1u, images.size()); 434 EXPECT_EQ(1u, images.size());
430 EXPECT_TRUE(images[0].image == discardable_image); 435 EXPECT_TRUE(images[0].image == discardable_image);
431 } 436 }
432 437
433 TEST_F(DiscardableImageMapTest, GetDiscardableImagesInRectMaxImage) { 438 TEST_F(DiscardableImageMapTest, GetDiscardableImagesInRectMaxImage) {
434 gfx::Rect visible_rect(2048, 2048); 439 gfx::Rect visible_rect(2048, 2048);
435 FakeContentLayerClient content_layer_client; 440 FakeContentLayerClient content_layer_client;
436 content_layer_client.set_bounds(visible_rect.size()); 441 content_layer_client.set_bounds(visible_rect.size());
437 442
438 int dimension = std::numeric_limits<int>::max(); 443 int dimension = std::numeric_limits<int>::max();
439 sk_sp<SkImage> discardable_image = 444 PaintImage discardable_image =
440 CreateDiscardableImage(gfx::Size(dimension, dimension)); 445 CreateDiscardablePaintImage(gfx::Size(dimension, dimension));
441 PaintFlags flags; 446 PaintFlags flags;
442 content_layer_client.add_draw_image(discardable_image, gfx::Point(42, 42), 447 content_layer_client.add_draw_image(discardable_image, gfx::Point(42, 42),
443 flags); 448 flags);
444 449
445 scoped_refptr<DisplayItemList> display_list = 450 scoped_refptr<DisplayItemList> display_list =
446 content_layer_client.PaintContentsToDisplayList( 451 content_layer_client.PaintContentsToDisplayList(
447 ContentLayerClient::PAINTING_BEHAVIOR_NORMAL); 452 ContentLayerClient::PAINTING_BEHAVIOR_NORMAL);
448 display_list->GenerateDiscardableImagesMetadata(); 453 display_list->GenerateDiscardableImagesMetadata();
449 454
450 const DiscardableImageMap& image_map = 455 const DiscardableImageMap& image_map =
451 display_list->discardable_image_map_for_testing(); 456 display_list->discardable_image_map_for_testing();
452 std::vector<PositionScaleDrawImage> images = 457 std::vector<PositionScaleDrawImage> images =
453 GetDiscardableImagesInRect(image_map, gfx::Rect(42, 42, 1, 1)); 458 GetDiscardableImagesInRect(image_map, gfx::Rect(42, 42, 1, 1));
454 std::vector<gfx::Rect> inset_rects = InsetImageRects(images); 459 std::vector<gfx::Rect> inset_rects = InsetImageRects(images);
455 EXPECT_EQ(1u, images.size()); 460 EXPECT_EQ(1u, images.size());
456 EXPECT_TRUE(images[0].image == discardable_image); 461 EXPECT_TRUE(images[0].image == discardable_image);
457 EXPECT_EQ(gfx::Rect(42, 42, 2006, 2006), inset_rects[0]); 462 EXPECT_EQ(gfx::Rect(42, 42, 2006, 2006), inset_rects[0]);
458 EXPECT_EQ(images[0].image_rect, 463 EXPECT_EQ(images[0].image_rect,
459 image_map.GetRectForImage(images[0].image->uniqueID())); 464 image_map.GetRectForImage(images[0].image.stable_id()));
460 } 465 }
461 466
462 TEST_F(DiscardableImageMapTest, GetDiscardableImagesInRectMaxImageMaxLayer) { 467 TEST_F(DiscardableImageMapTest, GetDiscardableImagesInRectMaxImageMaxLayer) {
463 // At large values of integer x, x != static_cast<int>(static_cast<float>(x)). 468 // At large values of integer x, x != static_cast<int>(static_cast<float>(x)).
464 // So, make sure the dimension can be converted back and forth for the 469 // So, make sure the dimension can be converted back and forth for the
465 // purposes of the unittest. Also, at near max int values, Skia seems to skip 470 // purposes of the unittest. Also, at near max int values, Skia seems to skip
466 // some draw calls, so we subtract 64 since we only care about "really large" 471 // some draw calls, so we subtract 64 since we only care about "really large"
467 // values, not necessarily max int values. 472 // values, not necessarily max int values.
468 int dimension = static_cast<int>( 473 int dimension = static_cast<int>(
469 static_cast<float>(std::numeric_limits<int>::max() - 64)); 474 static_cast<float>(std::numeric_limits<int>::max() - 64));
470 gfx::Rect visible_rect(dimension, dimension); 475 gfx::Rect visible_rect(dimension, dimension);
471 FakeContentLayerClient content_layer_client; 476 FakeContentLayerClient content_layer_client;
472 content_layer_client.set_bounds(visible_rect.size()); 477 content_layer_client.set_bounds(visible_rect.size());
473 478
474 sk_sp<SkImage> discardable_image = 479 PaintImage discardable_image =
475 CreateDiscardableImage(gfx::Size(dimension, dimension)); 480 CreateDiscardablePaintImage(gfx::Size(dimension, dimension));
476 PaintFlags flags; 481 PaintFlags flags;
477 content_layer_client.add_draw_image(discardable_image, gfx::Point(0, 0), 482 content_layer_client.add_draw_image(discardable_image, gfx::Point(0, 0),
478 flags); 483 flags);
479 content_layer_client.add_draw_image(discardable_image, gfx::Point(10000, 0), 484 content_layer_client.add_draw_image(discardable_image, gfx::Point(10000, 0),
480 flags); 485 flags);
481 content_layer_client.add_draw_image(discardable_image, 486 content_layer_client.add_draw_image(discardable_image,
482 gfx::Point(-10000, 500), flags); 487 gfx::Point(-10000, 500), flags);
483 488
484 scoped_refptr<DisplayItemList> display_list = 489 scoped_refptr<DisplayItemList> display_list =
485 content_layer_client.PaintContentsToDisplayList( 490 content_layer_client.PaintContentsToDisplayList(
(...skipping 19 matching lines...) Expand all
505 // The expected value is whatever the value is converted to float and then 510 // The expected value is whatever the value is converted to float and then
506 // back to int. 511 // back to int.
507 int expected10k = static_cast<int>(static_cast<float>(dimension - 10000)); 512 int expected10k = static_cast<int>(static_cast<float>(dimension - 10000));
508 images = GetDiscardableImagesInRect(image_map, gfx::Rect(0, 500, 1, 1)); 513 images = GetDiscardableImagesInRect(image_map, gfx::Rect(0, 500, 1, 1));
509 inset_rects = InsetImageRects(images); 514 inset_rects = InsetImageRects(images);
510 EXPECT_EQ(2u, images.size()); 515 EXPECT_EQ(2u, images.size());
511 EXPECT_EQ(gfx::Rect(0, 500, expected10k, dimension - 500), inset_rects[1]); 516 EXPECT_EQ(gfx::Rect(0, 500, expected10k, dimension - 500), inset_rects[1]);
512 EXPECT_EQ(gfx::Rect(0, 0, dimension, dimension), inset_rects[0]); 517 EXPECT_EQ(gfx::Rect(0, 0, dimension, dimension), inset_rects[0]);
513 518
514 EXPECT_EQ(images[0].image_rect, 519 EXPECT_EQ(images[0].image_rect,
515 image_map.GetRectForImage(discardable_image->uniqueID())); 520 image_map.GetRectForImage(discardable_image.stable_id()));
516 } 521 }
517 522
518 TEST_F(DiscardableImageMapTest, GetDiscardableImagesRectInBounds) { 523 TEST_F(DiscardableImageMapTest, GetDiscardableImagesRectInBounds) {
519 gfx::Rect visible_rect(1000, 1000); 524 gfx::Rect visible_rect(1000, 1000);
520 FakeContentLayerClient content_layer_client; 525 FakeContentLayerClient content_layer_client;
521 content_layer_client.set_bounds(visible_rect.size()); 526 content_layer_client.set_bounds(visible_rect.size());
522 527
523 sk_sp<SkImage> discardable_image = 528 PaintImage discardable_image =
524 CreateDiscardableImage(gfx::Size(100, 100)); 529 CreateDiscardablePaintImage(gfx::Size(100, 100));
525 sk_sp<SkImage> long_discardable_image = 530 PaintImage long_discardable_image =
526 CreateDiscardableImage(gfx::Size(10000, 100)); 531 CreateDiscardablePaintImage(gfx::Size(10000, 100));
527 532
528 PaintFlags flags; 533 PaintFlags flags;
529 content_layer_client.add_draw_image(discardable_image, gfx::Point(-10, -11), 534 content_layer_client.add_draw_image(discardable_image, gfx::Point(-10, -11),
530 flags); 535 flags);
531 content_layer_client.add_draw_image(discardable_image, gfx::Point(950, 951), 536 content_layer_client.add_draw_image(discardable_image, gfx::Point(950, 951),
532 flags); 537 flags);
533 content_layer_client.add_draw_image(long_discardable_image, 538 content_layer_client.add_draw_image(long_discardable_image,
534 gfx::Point(-100, 500), flags); 539 gfx::Point(-100, 500), flags);
535 540
536 scoped_refptr<DisplayItemList> display_list = 541 scoped_refptr<DisplayItemList> display_list =
(...skipping 17 matching lines...) Expand all
554 images = GetDiscardableImagesInRect(image_map, gfx::Rect(0, 500, 1, 1)); 559 images = GetDiscardableImagesInRect(image_map, gfx::Rect(0, 500, 1, 1));
555 inset_rects = InsetImageRects(images); 560 inset_rects = InsetImageRects(images);
556 EXPECT_EQ(1u, images.size()); 561 EXPECT_EQ(1u, images.size());
557 EXPECT_EQ(gfx::Rect(0, 500, 1000, 100), inset_rects[0]); 562 EXPECT_EQ(gfx::Rect(0, 500, 1000, 100), inset_rects[0]);
558 563
559 gfx::Rect discardable_image_rect; 564 gfx::Rect discardable_image_rect;
560 discardable_image_rect.Union(gfx::Rect(0, 0, 90, 89)); 565 discardable_image_rect.Union(gfx::Rect(0, 0, 90, 89));
561 discardable_image_rect.Union(gfx::Rect(950, 951, 50, 49)); 566 discardable_image_rect.Union(gfx::Rect(950, 951, 50, 49));
562 discardable_image_rect.Inset(-1, -1, -1, -1); 567 discardable_image_rect.Inset(-1, -1, -1, -1);
563 EXPECT_EQ(discardable_image_rect, 568 EXPECT_EQ(discardable_image_rect,
564 image_map.GetRectForImage(discardable_image->uniqueID())); 569 image_map.GetRectForImage(discardable_image.stable_id()));
565 570
566 EXPECT_EQ(gfx::Rect(-1, 499, 1002, 102), 571 EXPECT_EQ(gfx::Rect(-1, 499, 1002, 102),
567 image_map.GetRectForImage(long_discardable_image->uniqueID())); 572 image_map.GetRectForImage(long_discardable_image.stable_id()));
568 } 573 }
569 574
570 TEST_F(DiscardableImageMapTest, GetDiscardableImagesInShader) { 575 TEST_F(DiscardableImageMapTest, GetDiscardableImagesInShader) {
571 gfx::Rect visible_rect(2048, 2048); 576 gfx::Rect visible_rect(2048, 2048);
572 FakeContentLayerClient content_layer_client; 577 FakeContentLayerClient content_layer_client;
573 content_layer_client.set_bounds(visible_rect.size()); 578 content_layer_client.set_bounds(visible_rect.size());
574 579
575 // Discardable pixel refs are found in the following grids: 580 // Discardable pixel refs are found in the following grids:
576 // |---|---|---|---| 581 // |---|---|---|---|
577 // | | x | | x | 582 // | | x | | x |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
611 const DiscardableImageMap& image_map = 616 const DiscardableImageMap& image_map =
612 display_list->discardable_image_map_for_testing(); 617 display_list->discardable_image_map_for_testing();
613 618
614 for (int y = 0; y < 4; ++y) { 619 for (int y = 0; y < 4; ++y) {
615 for (int x = 0; x < 4; ++x) { 620 for (int x = 0; x < 4; ++x) {
616 std::vector<PositionScaleDrawImage> images = GetDiscardableImagesInRect( 621 std::vector<PositionScaleDrawImage> images = GetDiscardableImagesInRect(
617 image_map, gfx::Rect(x * 512, y * 512, 500, 500)); 622 image_map, gfx::Rect(x * 512, y * 512, 500, 500));
618 std::vector<gfx::Rect> inset_rects = InsetImageRects(images); 623 std::vector<gfx::Rect> inset_rects = InsetImageRects(images);
619 if ((x + y) & 1) { 624 if ((x + y) & 1) {
620 EXPECT_EQ(1u, images.size()) << x << " " << y; 625 EXPECT_EQ(1u, images.size()) << x << " " << y;
621 EXPECT_TRUE(images[0].image == discardable_image[y][x]) 626 EXPECT_TRUE(images[0].image.sk_image() == discardable_image[y][x])
622 << x << " " << y; 627 << x << " " << y;
623 EXPECT_EQ(gfx::Rect(x * 512 + 6, y * 512 + 6, 500, 500), 628 EXPECT_EQ(gfx::Rect(x * 512 + 6, y * 512 + 6, 500, 500),
624 inset_rects[0]); 629 inset_rects[0]);
625 EXPECT_EQ(std::max(x * 0.5f, kMinScale), images[0].scale.fWidth); 630 EXPECT_EQ(std::max(x * 0.5f, kMinScale), images[0].scale.fWidth);
626 EXPECT_EQ(std::max(y * 0.5f, kMinScale), images[0].scale.fHeight); 631 EXPECT_EQ(std::max(y * 0.5f, kMinScale), images[0].scale.fHeight);
627 } else { 632 } else {
628 EXPECT_EQ(0u, images.size()) << x << " " << y; 633 EXPECT_EQ(0u, images.size()) << x << " " << y;
629 } 634 }
630 } 635 }
631 } 636 }
632 637
633 // Capture 4 pixel refs. 638 // Capture 4 pixel refs.
634 std::vector<PositionScaleDrawImage> images = 639 std::vector<PositionScaleDrawImage> images =
635 GetDiscardableImagesInRect(image_map, gfx::Rect(512, 512, 2048, 2048)); 640 GetDiscardableImagesInRect(image_map, gfx::Rect(512, 512, 2048, 2048));
636 std::vector<gfx::Rect> inset_rects = InsetImageRects(images); 641 std::vector<gfx::Rect> inset_rects = InsetImageRects(images);
637 EXPECT_EQ(4u, images.size()); 642 EXPECT_EQ(4u, images.size());
638 EXPECT_TRUE(images[0].image == discardable_image[1][2]); 643 EXPECT_TRUE(images[0].image.sk_image() == discardable_image[1][2]);
639 EXPECT_EQ(gfx::Rect(2 * 512 + 6, 512 + 6, 500, 500), inset_rects[0]); 644 EXPECT_EQ(gfx::Rect(2 * 512 + 6, 512 + 6, 500, 500), inset_rects[0]);
640 EXPECT_TRUE(images[1].image == discardable_image[2][1]); 645 EXPECT_TRUE(images[1].image.sk_image() == discardable_image[2][1]);
641 EXPECT_EQ(gfx::Rect(512 + 6, 2 * 512 + 6, 500, 500), inset_rects[1]); 646 EXPECT_EQ(gfx::Rect(512 + 6, 2 * 512 + 6, 500, 500), inset_rects[1]);
642 EXPECT_TRUE(images[2].image == discardable_image[2][3]); 647 EXPECT_TRUE(images[2].image.sk_image() == discardable_image[2][3]);
643 EXPECT_EQ(gfx::Rect(3 * 512 + 6, 2 * 512 + 6, 500, 500), inset_rects[2]); 648 EXPECT_EQ(gfx::Rect(3 * 512 + 6, 2 * 512 + 6, 500, 500), inset_rects[2]);
644 EXPECT_TRUE(images[3].image == discardable_image[3][2]); 649 EXPECT_TRUE(images[3].image.sk_image() == discardable_image[3][2]);
645 EXPECT_EQ(gfx::Rect(2 * 512 + 6, 3 * 512 + 6, 500, 500), inset_rects[3]); 650 EXPECT_EQ(gfx::Rect(2 * 512 + 6, 3 * 512 + 6, 500, 500), inset_rects[3]);
646 } 651 }
647 652
648 TEST_F(DiscardableImageMapTest, ClipsImageRects) { 653 TEST_F(DiscardableImageMapTest, ClipsImageRects) {
649 gfx::Rect visible_rect(500, 500); 654 gfx::Rect visible_rect(500, 500);
650 655
651 sk_sp<SkImage> discardable_image = 656 PaintImage discardable_image =
652 CreateDiscardableImage(gfx::Size(500, 500)); 657 CreateDiscardablePaintImage(gfx::Size(500, 500));
653 sk_sp<PaintRecord> record = CreateRecording(discardable_image, visible_rect); 658 sk_sp<PaintRecord> record = CreateRecording(discardable_image, visible_rect);
654 659
655 scoped_refptr<DisplayItemList> display_list = new DisplayItemList; 660 scoped_refptr<DisplayItemList> display_list = new DisplayItemList;
656 display_list->CreateAndAppendPairedBeginItem<ClipDisplayItem>( 661 display_list->CreateAndAppendPairedBeginItem<ClipDisplayItem>(
657 gfx::Rect(250, 250), std::vector<SkRRect>(), false); 662 gfx::Rect(250, 250), std::vector<SkRRect>(), false);
658 display_list->CreateAndAppendDrawingItem<DrawingDisplayItem>( 663 display_list->CreateAndAppendDrawingItem<DrawingDisplayItem>(
659 gfx::Rect(500, 500), record); 664 gfx::Rect(500, 500), record);
660 display_list->CreateAndAppendPairedEndItem<EndClipDisplayItem>(); 665 display_list->CreateAndAppendPairedEndItem<EndClipDisplayItem>();
661 display_list->Finalize(); 666 display_list->Finalize();
662 display_list->GenerateDiscardableImagesMetadata(); 667 display_list->GenerateDiscardableImagesMetadata();
663 668
664 const DiscardableImageMap& image_map = 669 const DiscardableImageMap& image_map =
665 display_list->discardable_image_map_for_testing(); 670 display_list->discardable_image_map_for_testing();
666 std::vector<PositionScaleDrawImage> images = 671 std::vector<PositionScaleDrawImage> images =
667 GetDiscardableImagesInRect(image_map, visible_rect); 672 GetDiscardableImagesInRect(image_map, visible_rect);
668 std::vector<gfx::Rect> inset_rects = InsetImageRects(images); 673 std::vector<gfx::Rect> inset_rects = InsetImageRects(images);
669 EXPECT_EQ(1u, images.size()); 674 EXPECT_EQ(1u, images.size());
670 EXPECT_TRUE(images[0].image == discardable_image); 675 EXPECT_TRUE(images[0].image == discardable_image);
671 EXPECT_EQ(gfx::Rect(250, 250), inset_rects[0]); 676 EXPECT_EQ(gfx::Rect(250, 250), inset_rects[0]);
672 } 677 }
673 678
674 TEST_F(DiscardableImageMapTest, GathersDiscardableImagesFromNestedOps) { 679 TEST_F(DiscardableImageMapTest, GathersDiscardableImagesFromNestedOps) {
675 sk_sp<PaintRecord> internal_record = sk_make_sp<PaintRecord>(); 680 sk_sp<PaintRecord> internal_record = sk_make_sp<PaintRecord>();
676 sk_sp<SkImage> discardable_image = 681 PaintImage discardable_image =
677 CreateDiscardableImage(gfx::Size(100, 100)); 682 CreateDiscardablePaintImage(gfx::Size(100, 100));
678 internal_record->push<DrawImageOp>( 683 internal_record->push<DrawImageOp>(discardable_image, 0.f, 0.f, nullptr);
679 PaintImage(PaintImage::GetNextId(), discardable_image,
680 PaintImage::AnimationType::STATIC,
681 PaintImage::CompletionState::DONE),
682 0.f, 0.f, nullptr);
683 684
684 sk_sp<PaintRecord> list_record = sk_make_sp<PaintRecord>(); 685 sk_sp<PaintRecord> list_record = sk_make_sp<PaintRecord>();
685 sk_sp<SkImage> discardable_image2 = 686 PaintImage discardable_image2 =
686 CreateDiscardableImage(gfx::Size(100, 100)); 687 CreateDiscardablePaintImage(gfx::Size(100, 100));
687 list_record->push<DrawImageOp>( 688 list_record->push<DrawImageOp>(discardable_image2, 100.f, 100.f, nullptr);
688 PaintImage(PaintImage::GetNextId(), discardable_image2,
689 PaintImage::AnimationType::STATIC,
690 PaintImage::CompletionState::DONE),
691 100.f, 100.f, nullptr);
692 scoped_refptr<DisplayItemList> display_list = new DisplayItemList; 689 scoped_refptr<DisplayItemList> display_list = new DisplayItemList;
693 display_list->CreateAndAppendDrawingItem<DrawingDisplayItem>( 690 display_list->CreateAndAppendDrawingItem<DrawingDisplayItem>(
694 gfx::Rect(100, 100, 100, 100), list_record); 691 gfx::Rect(100, 100, 100, 100), list_record);
695 display_list->Finalize(); 692 display_list->Finalize();
696 693
697 PaintOpBuffer buffer; 694 PaintOpBuffer buffer;
698 buffer.push<DrawRecordOp>(internal_record); 695 buffer.push<DrawRecordOp>(internal_record);
699 buffer.push<DrawDisplayItemListOp>(display_list); 696 buffer.push<DrawDisplayItemListOp>(display_list);
700 DiscardableImageMap image_map_; 697 DiscardableImageMap image_map_;
701 { 698 {
702 DiscardableImageMap::ScopedMetadataGenerator generator(&image_map_, 699 DiscardableImageMap::ScopedMetadataGenerator generator(&image_map_,
703 gfx::Size(200, 200)); 700 gfx::Size(200, 200));
704 generator.image_store()->GatherDiscardableImages(&buffer); 701 generator.image_store()->GatherDiscardableImages(&buffer);
705 } 702 }
706 703
707 gfx::ColorSpace target_color_space; 704 gfx::ColorSpace target_color_space;
708 std::vector<DrawImage> images; 705 std::vector<DrawImage> images;
709 image_map_.GetDiscardableImagesInRect(gfx::Rect(0, 0, 5, 95), 1.f, 706 image_map_.GetDiscardableImagesInRect(gfx::Rect(0, 0, 5, 95), 1.f,
710 target_color_space, &images); 707 target_color_space, &images);
711 EXPECT_EQ(1u, images.size()); 708 EXPECT_EQ(1u, images.size());
712 EXPECT_TRUE(discardable_image == images[0].image()); 709 EXPECT_TRUE(discardable_image == images[0].paint_image());
713 710
714 images.clear(); 711 images.clear();
715 image_map_.GetDiscardableImagesInRect(gfx::Rect(105, 105, 5, 95), 1.f, 712 image_map_.GetDiscardableImagesInRect(gfx::Rect(105, 105, 5, 95), 1.f,
716 target_color_space, &images); 713 target_color_space, &images);
717 EXPECT_EQ(1u, images.size()); 714 EXPECT_EQ(1u, images.size());
718 EXPECT_TRUE(discardable_image2 == images[0].image()); 715 EXPECT_TRUE(discardable_image2 == images[0].paint_image());
719 } 716 }
720 717
721 } // namespace cc 718 } // namespace cc
OLDNEW
« 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