OLD | NEW |
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 <vector> | 5 #include <vector> |
6 | 6 |
7 #include "base/memory/ptr_util.h" | 7 #include "base/memory/ptr_util.h" |
8 #include "cc/base/region.h" | 8 #include "cc/base/region.h" |
9 #include "cc/raster/raster_source.h" | 9 #include "cc/raster/raster_source.h" |
10 #include "cc/test/fake_content_layer_client.h" | 10 #include "cc/test/fake_content_layer_client.h" |
11 #include "cc/test/fake_recording_source.h" | 11 #include "cc/test/fake_recording_source.h" |
12 #include "cc/test/skia_common.h" | 12 #include "cc/test/skia_common.h" |
13 #include "testing/gmock/include/gmock/gmock.h" | 13 #include "testing/gmock/include/gmock/gmock.h" |
14 #include "testing/gtest/include/gtest/gtest.h" | 14 #include "testing/gtest/include/gtest/gtest.h" |
15 #include "third_party/skia/include/core/SkRefCnt.h" | 15 #include "third_party/skia/include/core/SkRefCnt.h" |
16 | 16 |
17 namespace cc { | 17 namespace cc { |
18 namespace { | 18 namespace { |
19 | 19 |
| 20 gfx::ColorSpace DefaultColorSpace() { |
| 21 return gfx::ColorSpace::CreateSRGB(); |
| 22 } |
| 23 |
20 std::unique_ptr<FakeRecordingSource> CreateRecordingSource( | 24 std::unique_ptr<FakeRecordingSource> CreateRecordingSource( |
21 const gfx::Rect& viewport) { | 25 const gfx::Rect& viewport) { |
22 gfx::Rect layer_rect(viewport.right(), viewport.bottom()); | 26 gfx::Rect layer_rect(viewport.right(), viewport.bottom()); |
23 std::unique_ptr<FakeRecordingSource> recording_source = | 27 std::unique_ptr<FakeRecordingSource> recording_source = |
24 FakeRecordingSource::CreateRecordingSource(viewport, layer_rect.size()); | 28 FakeRecordingSource::CreateRecordingSource(viewport, layer_rect.size()); |
25 return recording_source; | 29 return recording_source; |
26 } | 30 } |
27 | 31 |
28 scoped_refptr<RasterSource> CreateRasterSource( | 32 scoped_refptr<RasterSource> CreateRasterSource( |
29 FakeRecordingSource* recording_source) { | 33 FakeRecordingSource* recording_source) { |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
69 | 73 |
70 bool can_use_lcd_text = true; | 74 bool can_use_lcd_text = true; |
71 scoped_refptr<RasterSource> raster_source = | 75 scoped_refptr<RasterSource> raster_source = |
72 RasterSource::CreateFromRecordingSource(recording_source.get(), | 76 RasterSource::CreateFromRecordingSource(recording_source.get(), |
73 can_use_lcd_text); | 77 can_use_lcd_text); |
74 | 78 |
75 // Tile sized iterators. These should find only one pixel ref. | 79 // Tile sized iterators. These should find only one pixel ref. |
76 { | 80 { |
77 std::vector<DrawImage> images; | 81 std::vector<DrawImage> images; |
78 raster_source->GetDiscardableImagesInRect(gfx::Rect(0, 0, 128, 128), 1.f, | 82 raster_source->GetDiscardableImagesInRect(gfx::Rect(0, 0, 128, 128), 1.f, |
79 &images); | 83 DefaultColorSpace(), &images); |
80 EXPECT_EQ(2u, images.size()); | 84 EXPECT_EQ(2u, images.size()); |
81 EXPECT_TRUE(images[0].image() == discardable_image[0][0]); | 85 EXPECT_TRUE(images[0].image() == discardable_image[0][0]); |
82 EXPECT_TRUE(images[1].image() == discardable_image[1][1]); | 86 EXPECT_TRUE(images[1].image() == discardable_image[1][1]); |
83 } | 87 } |
84 | 88 |
85 // Shifted tile sized iterators. These should find only one pixel ref. | 89 // Shifted tile sized iterators. These should find only one pixel ref. |
86 { | 90 { |
87 std::vector<DrawImage> images; | 91 std::vector<DrawImage> images; |
88 raster_source->GetDiscardableImagesInRect(gfx::Rect(130, 140, 128, 128), | 92 raster_source->GetDiscardableImagesInRect( |
89 1.f, &images); | 93 gfx::Rect(130, 140, 128, 128), 1.f, DefaultColorSpace(), &images); |
90 EXPECT_EQ(1u, images.size()); | 94 EXPECT_EQ(1u, images.size()); |
91 EXPECT_TRUE(images[0].image() == discardable_image[1][1]); | 95 EXPECT_TRUE(images[0].image() == discardable_image[1][1]); |
92 } | 96 } |
93 | 97 |
94 // The rotated bitmap would still be in the top right tile. | 98 // The rotated bitmap would still be in the top right tile. |
95 { | 99 { |
96 std::vector<DrawImage> images; | 100 std::vector<DrawImage> images; |
97 raster_source->GetDiscardableImagesInRect(gfx::Rect(130, 0, 128, 128), 1.f, | 101 raster_source->GetDiscardableImagesInRect(gfx::Rect(130, 0, 128, 128), 1.f, |
98 &images); | 102 DefaultColorSpace(), &images); |
99 EXPECT_EQ(1u, images.size()); | 103 EXPECT_EQ(1u, images.size()); |
100 EXPECT_TRUE(images[0].image() == discardable_image[1][1]); | 104 EXPECT_TRUE(images[0].image() == discardable_image[1][1]); |
101 } | 105 } |
102 | 106 |
103 // Layer sized iterators. These should find all pixel refs. | 107 // Layer sized iterators. These should find all pixel refs. |
104 { | 108 { |
105 std::vector<DrawImage> images; | 109 std::vector<DrawImage> images; |
106 raster_source->GetDiscardableImagesInRect(gfx::Rect(0, 0, 256, 256), 1.f, | 110 raster_source->GetDiscardableImagesInRect(gfx::Rect(0, 0, 256, 256), 1.f, |
107 &images); | 111 DefaultColorSpace(), &images); |
108 EXPECT_EQ(3u, images.size()); | 112 EXPECT_EQ(3u, images.size()); |
109 // Top left tile with bitmap[0][0] and bitmap[1][1]. | 113 // Top left tile with bitmap[0][0] and bitmap[1][1]. |
110 EXPECT_TRUE(images[0].image() == discardable_image[0][0]); | 114 EXPECT_TRUE(images[0].image() == discardable_image[0][0]); |
111 EXPECT_TRUE(images[1].image() == discardable_image[1][0]); | 115 EXPECT_TRUE(images[1].image() == discardable_image[1][0]); |
112 EXPECT_TRUE(images[2].image() == discardable_image[1][1]); | 116 EXPECT_TRUE(images[2].image() == discardable_image[1][1]); |
113 } | 117 } |
114 | 118 |
115 // Verify different raster scales | 119 // Verify different raster scales |
116 for (float scale = 1.f; scale <= 5.f; scale += 0.5f) { | 120 for (float scale = 1.f; scale <= 5.f; scale += 0.5f) { |
117 std::vector<DrawImage> images; | 121 std::vector<DrawImage> images; |
118 raster_source->GetDiscardableImagesInRect(gfx::Rect(130, 0, 128, 128), | 122 raster_source->GetDiscardableImagesInRect( |
119 scale, &images); | 123 gfx::Rect(130, 0, 128, 128), scale, DefaultColorSpace(), &images); |
120 EXPECT_EQ(1u, images.size()); | 124 EXPECT_EQ(1u, images.size()); |
121 EXPECT_FLOAT_EQ(scale, images[0].scale().width()); | 125 EXPECT_FLOAT_EQ(scale, images[0].scale().width()); |
122 EXPECT_FLOAT_EQ(scale, images[0].scale().height()); | 126 EXPECT_FLOAT_EQ(scale, images[0].scale().height()); |
123 } | 127 } |
124 } | 128 } |
125 | 129 |
126 TEST(RecordingSourceTest, NoGatherImageEmptyImages) { | 130 TEST(RecordingSourceTest, NoGatherImageEmptyImages) { |
127 gfx::Rect recorded_viewport(0, 0, 256, 256); | 131 gfx::Rect recorded_viewport(0, 0, 256, 256); |
128 | 132 |
129 std::unique_ptr<FakeRecordingSource> recording_source = | 133 std::unique_ptr<FakeRecordingSource> recording_source = |
130 CreateRecordingSource(recorded_viewport); | 134 CreateRecordingSource(recorded_viewport); |
131 recording_source->SetGenerateDiscardableImagesMetadata(false); | 135 recording_source->SetGenerateDiscardableImagesMetadata(false); |
132 recording_source->Rerecord(); | 136 recording_source->Rerecord(); |
133 | 137 |
134 scoped_refptr<RasterSource> raster_source = | 138 scoped_refptr<RasterSource> raster_source = |
135 CreateRasterSource(recording_source.get()); | 139 CreateRasterSource(recording_source.get()); |
136 | 140 |
137 // If recording source do not gather images, raster source is not going to | 141 // If recording source do not gather images, raster source is not going to |
138 // get images. | 142 // get images. |
139 { | 143 { |
140 std::vector<DrawImage> images; | 144 std::vector<DrawImage> images; |
141 raster_source->GetDiscardableImagesInRect(recorded_viewport, 1.f, &images); | 145 raster_source->GetDiscardableImagesInRect(recorded_viewport, 1.f, |
| 146 DefaultColorSpace(), &images); |
142 EXPECT_TRUE(images.empty()); | 147 EXPECT_TRUE(images.empty()); |
143 } | 148 } |
144 } | 149 } |
145 | 150 |
146 TEST(RecordingSourceTest, EmptyImages) { | 151 TEST(RecordingSourceTest, EmptyImages) { |
147 gfx::Rect recorded_viewport(0, 0, 256, 256); | 152 gfx::Rect recorded_viewport(0, 0, 256, 256); |
148 | 153 |
149 std::unique_ptr<FakeRecordingSource> recording_source = | 154 std::unique_ptr<FakeRecordingSource> recording_source = |
150 CreateRecordingSource(recorded_viewport); | 155 CreateRecordingSource(recorded_viewport); |
151 recording_source->SetGenerateDiscardableImagesMetadata(true); | 156 recording_source->SetGenerateDiscardableImagesMetadata(true); |
152 recording_source->Rerecord(); | 157 recording_source->Rerecord(); |
153 | 158 |
154 scoped_refptr<RasterSource> raster_source = | 159 scoped_refptr<RasterSource> raster_source = |
155 CreateRasterSource(recording_source.get()); | 160 CreateRasterSource(recording_source.get()); |
156 | 161 |
157 // Tile sized iterators. | 162 // Tile sized iterators. |
158 { | 163 { |
159 std::vector<DrawImage> images; | 164 std::vector<DrawImage> images; |
160 raster_source->GetDiscardableImagesInRect(gfx::Rect(0, 0, 128, 128), 1.f, | 165 raster_source->GetDiscardableImagesInRect(gfx::Rect(0, 0, 128, 128), 1.f, |
161 &images); | 166 DefaultColorSpace(), &images); |
162 EXPECT_TRUE(images.empty()); | 167 EXPECT_TRUE(images.empty()); |
163 } | 168 } |
164 // Shifted tile sized iterators. | 169 // Shifted tile sized iterators. |
165 { | 170 { |
166 std::vector<DrawImage> images; | 171 std::vector<DrawImage> images; |
167 raster_source->GetDiscardableImagesInRect(gfx::Rect(140, 140, 128, 128), | 172 raster_source->GetDiscardableImagesInRect( |
168 1.f, &images); | 173 gfx::Rect(140, 140, 128, 128), 1.f, DefaultColorSpace(), &images); |
169 EXPECT_TRUE(images.empty()); | 174 EXPECT_TRUE(images.empty()); |
170 } | 175 } |
171 // Layer sized iterators. | 176 // Layer sized iterators. |
172 { | 177 { |
173 std::vector<DrawImage> images; | 178 std::vector<DrawImage> images; |
174 raster_source->GetDiscardableImagesInRect(gfx::Rect(0, 0, 256, 256), 1.f, | 179 raster_source->GetDiscardableImagesInRect(gfx::Rect(0, 0, 256, 256), 1.f, |
175 &images); | 180 DefaultColorSpace(), &images); |
176 EXPECT_TRUE(images.empty()); | 181 EXPECT_TRUE(images.empty()); |
177 } | 182 } |
178 } | 183 } |
179 | 184 |
180 TEST(RecordingSourceTest, NoDiscardableImages) { | 185 TEST(RecordingSourceTest, NoDiscardableImages) { |
181 gfx::Rect recorded_viewport(0, 0, 256, 256); | 186 gfx::Rect recorded_viewport(0, 0, 256, 256); |
182 | 187 |
183 std::unique_ptr<FakeRecordingSource> recording_source = | 188 std::unique_ptr<FakeRecordingSource> recording_source = |
184 CreateRecordingSource(recorded_viewport); | 189 CreateRecordingSource(recorded_viewport); |
185 | 190 |
(...skipping 20 matching lines...) Expand all Loading... |
206 recording_source->SetGenerateDiscardableImagesMetadata(true); | 211 recording_source->SetGenerateDiscardableImagesMetadata(true); |
207 recording_source->Rerecord(); | 212 recording_source->Rerecord(); |
208 | 213 |
209 scoped_refptr<RasterSource> raster_source = | 214 scoped_refptr<RasterSource> raster_source = |
210 CreateRasterSource(recording_source.get()); | 215 CreateRasterSource(recording_source.get()); |
211 | 216 |
212 // Tile sized iterators. | 217 // Tile sized iterators. |
213 { | 218 { |
214 std::vector<DrawImage> images; | 219 std::vector<DrawImage> images; |
215 raster_source->GetDiscardableImagesInRect(gfx::Rect(0, 0, 128, 128), 1.f, | 220 raster_source->GetDiscardableImagesInRect(gfx::Rect(0, 0, 128, 128), 1.f, |
216 &images); | 221 DefaultColorSpace(), &images); |
217 EXPECT_TRUE(images.empty()); | 222 EXPECT_TRUE(images.empty()); |
218 } | 223 } |
219 // Shifted tile sized iterators. | 224 // Shifted tile sized iterators. |
220 { | 225 { |
221 std::vector<DrawImage> images; | 226 std::vector<DrawImage> images; |
222 raster_source->GetDiscardableImagesInRect(gfx::Rect(140, 140, 128, 128), | 227 raster_source->GetDiscardableImagesInRect( |
223 1.f, &images); | 228 gfx::Rect(140, 140, 128, 128), 1.f, DefaultColorSpace(), &images); |
224 EXPECT_TRUE(images.empty()); | 229 EXPECT_TRUE(images.empty()); |
225 } | 230 } |
226 // Layer sized iterators. | 231 // Layer sized iterators. |
227 { | 232 { |
228 std::vector<DrawImage> images; | 233 std::vector<DrawImage> images; |
229 raster_source->GetDiscardableImagesInRect(gfx::Rect(0, 0, 256, 256), 1.f, | 234 raster_source->GetDiscardableImagesInRect(gfx::Rect(0, 0, 256, 256), 1.f, |
230 &images); | 235 DefaultColorSpace(), &images); |
231 EXPECT_TRUE(images.empty()); | 236 EXPECT_TRUE(images.empty()); |
232 } | 237 } |
233 } | 238 } |
234 | 239 |
235 TEST(RecordingSourceTest, DiscardableImages) { | 240 TEST(RecordingSourceTest, DiscardableImages) { |
236 gfx::Rect recorded_viewport(0, 0, 256, 256); | 241 gfx::Rect recorded_viewport(0, 0, 256, 256); |
237 | 242 |
238 std::unique_ptr<FakeRecordingSource> recording_source = | 243 std::unique_ptr<FakeRecordingSource> recording_source = |
239 CreateRecordingSource(recorded_viewport); | 244 CreateRecordingSource(recorded_viewport); |
240 | 245 |
(...skipping 15 matching lines...) Expand all Loading... |
256 recording_source->SetGenerateDiscardableImagesMetadata(true); | 261 recording_source->SetGenerateDiscardableImagesMetadata(true); |
257 recording_source->Rerecord(); | 262 recording_source->Rerecord(); |
258 | 263 |
259 scoped_refptr<RasterSource> raster_source = | 264 scoped_refptr<RasterSource> raster_source = |
260 CreateRasterSource(recording_source.get()); | 265 CreateRasterSource(recording_source.get()); |
261 | 266 |
262 // Tile sized iterators. These should find only one image. | 267 // Tile sized iterators. These should find only one image. |
263 { | 268 { |
264 std::vector<DrawImage> images; | 269 std::vector<DrawImage> images; |
265 raster_source->GetDiscardableImagesInRect(gfx::Rect(0, 0, 128, 128), 1.f, | 270 raster_source->GetDiscardableImagesInRect(gfx::Rect(0, 0, 128, 128), 1.f, |
266 &images); | 271 DefaultColorSpace(), &images); |
267 EXPECT_EQ(1u, images.size()); | 272 EXPECT_EQ(1u, images.size()); |
268 EXPECT_TRUE(images[0].image() == discardable_image[0][0]); | 273 EXPECT_TRUE(images[0].image() == discardable_image[0][0]); |
269 } | 274 } |
270 | 275 |
271 // Shifted tile sized iterators. These should find only one image. | 276 // Shifted tile sized iterators. These should find only one image. |
272 { | 277 { |
273 std::vector<DrawImage> images; | 278 std::vector<DrawImage> images; |
274 raster_source->GetDiscardableImagesInRect(gfx::Rect(140, 140, 128, 128), | 279 raster_source->GetDiscardableImagesInRect( |
275 1.f, &images); | 280 gfx::Rect(140, 140, 128, 128), 1.f, DefaultColorSpace(), &images); |
276 EXPECT_EQ(1u, images.size()); | 281 EXPECT_EQ(1u, images.size()); |
277 EXPECT_TRUE(images[0].image() == discardable_image[1][1]); | 282 EXPECT_TRUE(images[0].image() == discardable_image[1][1]); |
278 } | 283 } |
279 | 284 |
280 // Ensure there's no discardable images in the empty cell | 285 // Ensure there's no discardable images in the empty cell |
281 { | 286 { |
282 std::vector<DrawImage> images; | 287 std::vector<DrawImage> images; |
283 raster_source->GetDiscardableImagesInRect(gfx::Rect(140, 0, 128, 128), 1.f, | 288 raster_source->GetDiscardableImagesInRect(gfx::Rect(140, 0, 128, 128), 1.f, |
284 &images); | 289 DefaultColorSpace(), &images); |
285 EXPECT_TRUE(images.empty()); | 290 EXPECT_TRUE(images.empty()); |
286 } | 291 } |
287 | 292 |
288 // Layer sized iterators. These should find all 3 images. | 293 // Layer sized iterators. These should find all 3 images. |
289 { | 294 { |
290 std::vector<DrawImage> images; | 295 std::vector<DrawImage> images; |
291 raster_source->GetDiscardableImagesInRect(gfx::Rect(0, 0, 256, 256), 1.f, | 296 raster_source->GetDiscardableImagesInRect(gfx::Rect(0, 0, 256, 256), 1.f, |
292 &images); | 297 DefaultColorSpace(), &images); |
293 EXPECT_EQ(3u, images.size()); | 298 EXPECT_EQ(3u, images.size()); |
294 EXPECT_TRUE(images[0].image() == discardable_image[0][0]); | 299 EXPECT_TRUE(images[0].image() == discardable_image[0][0]); |
295 EXPECT_TRUE(images[1].image() == discardable_image[1][0]); | 300 EXPECT_TRUE(images[1].image() == discardable_image[1][0]); |
296 EXPECT_TRUE(images[2].image() == discardable_image[1][1]); | 301 EXPECT_TRUE(images[2].image() == discardable_image[1][1]); |
297 } | 302 } |
298 } | 303 } |
299 | 304 |
300 TEST(RecordingSourceTest, DiscardableImagesBaseNonDiscardable) { | 305 TEST(RecordingSourceTest, DiscardableImagesBaseNonDiscardable) { |
301 gfx::Rect recorded_viewport(0, 0, 512, 512); | 306 gfx::Rect recorded_viewport(0, 0, 512, 512); |
302 | 307 |
(...skipping 26 matching lines...) Expand all Loading... |
329 recording_source->SetGenerateDiscardableImagesMetadata(true); | 334 recording_source->SetGenerateDiscardableImagesMetadata(true); |
330 recording_source->Rerecord(); | 335 recording_source->Rerecord(); |
331 | 336 |
332 scoped_refptr<RasterSource> raster_source = | 337 scoped_refptr<RasterSource> raster_source = |
333 CreateRasterSource(recording_source.get()); | 338 CreateRasterSource(recording_source.get()); |
334 | 339 |
335 // Tile sized iterators. These should find only one image. | 340 // Tile sized iterators. These should find only one image. |
336 { | 341 { |
337 std::vector<DrawImage> images; | 342 std::vector<DrawImage> images; |
338 raster_source->GetDiscardableImagesInRect(gfx::Rect(0, 0, 256, 256), 1.f, | 343 raster_source->GetDiscardableImagesInRect(gfx::Rect(0, 0, 256, 256), 1.f, |
339 &images); | 344 DefaultColorSpace(), &images); |
340 EXPECT_EQ(1u, images.size()); | 345 EXPECT_EQ(1u, images.size()); |
341 EXPECT_TRUE(images[0].image() == discardable_image[0][0]); | 346 EXPECT_TRUE(images[0].image() == discardable_image[0][0]); |
342 } | 347 } |
343 // Shifted tile sized iterators. These should find only one image. | 348 // Shifted tile sized iterators. These should find only one image. |
344 { | 349 { |
345 std::vector<DrawImage> images; | 350 std::vector<DrawImage> images; |
346 raster_source->GetDiscardableImagesInRect(gfx::Rect(260, 260, 256, 256), | 351 raster_source->GetDiscardableImagesInRect( |
347 1.f, &images); | 352 gfx::Rect(260, 260, 256, 256), 1.f, DefaultColorSpace(), &images); |
348 EXPECT_EQ(1u, images.size()); | 353 EXPECT_EQ(1u, images.size()); |
349 EXPECT_TRUE(images[0].image() == discardable_image[1][1]); | 354 EXPECT_TRUE(images[0].image() == discardable_image[1][1]); |
350 } | 355 } |
351 // Ensure there's no discardable images in the empty cell | 356 // Ensure there's no discardable images in the empty cell |
352 { | 357 { |
353 std::vector<DrawImage> images; | 358 std::vector<DrawImage> images; |
354 raster_source->GetDiscardableImagesInRect(gfx::Rect(0, 256, 256, 256), 1.f, | 359 raster_source->GetDiscardableImagesInRect(gfx::Rect(0, 256, 256, 256), 1.f, |
355 &images); | 360 DefaultColorSpace(), &images); |
356 EXPECT_TRUE(images.empty()); | 361 EXPECT_TRUE(images.empty()); |
357 } | 362 } |
358 // Layer sized iterators. These should find three images. | 363 // Layer sized iterators. These should find three images. |
359 { | 364 { |
360 std::vector<DrawImage> images; | 365 std::vector<DrawImage> images; |
361 raster_source->GetDiscardableImagesInRect(gfx::Rect(0, 0, 512, 512), 1.f, | 366 raster_source->GetDiscardableImagesInRect(gfx::Rect(0, 0, 512, 512), 1.f, |
362 &images); | 367 DefaultColorSpace(), &images); |
363 EXPECT_EQ(3u, images.size()); | 368 EXPECT_EQ(3u, images.size()); |
364 EXPECT_TRUE(images[0].image() == discardable_image[0][0]); | 369 EXPECT_TRUE(images[0].image() == discardable_image[0][0]); |
365 EXPECT_TRUE(images[1].image() == discardable_image[0][1]); | 370 EXPECT_TRUE(images[1].image() == discardable_image[0][1]); |
366 EXPECT_TRUE(images[2].image() == discardable_image[1][1]); | 371 EXPECT_TRUE(images[2].image() == discardable_image[1][1]); |
367 } | 372 } |
368 } | 373 } |
369 | 374 |
370 } // namespace | 375 } // namespace |
371 } // namespace cc | 376 } // namespace cc |
OLD | NEW |