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 "cc/playback/discardable_image_map.h" | 5 #include "cc/playback/discardable_image_map.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <memory> | 9 #include <memory> |
10 | 10 |
11 #include "base/memory/ref_counted.h" | 11 #include "base/memory/ref_counted.h" |
12 #include "base/values.h" | 12 #include "base/values.h" |
13 #include "cc/base/region.h" | 13 #include "cc/base/region.h" |
| 14 #include "cc/paint/paint_canvas.h" |
14 #include "cc/test/fake_content_layer_client.h" | 15 #include "cc/test/fake_content_layer_client.h" |
15 #include "cc/test/fake_recording_source.h" | 16 #include "cc/test/fake_recording_source.h" |
16 #include "cc/test/skia_common.h" | 17 #include "cc/test/skia_common.h" |
17 #include "testing/gtest/include/gtest/gtest.h" | 18 #include "testing/gtest/include/gtest/gtest.h" |
18 #include "third_party/skia/include/core/SkCanvas.h" | |
19 #include "third_party/skia/include/core/SkGraphics.h" | 19 #include "third_party/skia/include/core/SkGraphics.h" |
20 #include "third_party/skia/include/core/SkImageGenerator.h" | 20 #include "third_party/skia/include/core/SkImageGenerator.h" |
21 #include "third_party/skia/include/core/SkRefCnt.h" | 21 #include "third_party/skia/include/core/SkRefCnt.h" |
22 #include "ui/gfx/geometry/rect.h" | 22 #include "ui/gfx/geometry/rect.h" |
23 #include "ui/gfx/skia_util.h" | 23 #include "ui/gfx/skia_util.h" |
24 | 24 |
25 namespace cc { | 25 namespace cc { |
26 namespace { | 26 namespace { |
27 | 27 |
28 struct PositionScaleDrawImage { | 28 struct PositionScaleDrawImage { |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
75 // |---|---|---|---| | 75 // |---|---|---|---| |
76 // | | x | | x | | 76 // | | x | | x | |
77 // |---|---|---|---| | 77 // |---|---|---|---| |
78 // | x | | x | | | 78 // | x | | x | | |
79 // |---|---|---|---| | 79 // |---|---|---|---| |
80 sk_sp<SkImage> discardable_image[4][4]; | 80 sk_sp<SkImage> discardable_image[4][4]; |
81 for (int y = 0; y < 4; ++y) { | 81 for (int y = 0; y < 4; ++y) { |
82 for (int x = 0; x < 4; ++x) { | 82 for (int x = 0; x < 4; ++x) { |
83 if ((x + y) & 1) { | 83 if ((x + y) & 1) { |
84 discardable_image[y][x] = CreateDiscardableImage(gfx::Size(500, 500)); | 84 discardable_image[y][x] = CreateDiscardableImage(gfx::Size(500, 500)); |
85 SkPaint paint; | 85 PaintFlags paint; |
86 content_layer_client.add_draw_image( | 86 content_layer_client.add_draw_image( |
87 discardable_image[y][x], gfx::Point(x * 512 + 6, y * 512 + 6), | 87 discardable_image[y][x], gfx::Point(x * 512 + 6, y * 512 + 6), |
88 paint); | 88 paint); |
89 } | 89 } |
90 } | 90 } |
91 } | 91 } |
92 | 92 |
93 scoped_refptr<DisplayItemList> display_list = | 93 scoped_refptr<DisplayItemList> display_list = |
94 content_layer_client.PaintContentsToDisplayList( | 94 content_layer_client.PaintContentsToDisplayList( |
95 ContentLayerClient::PAINTING_BEHAVIOR_NORMAL); | 95 ContentLayerClient::PAINTING_BEHAVIOR_NORMAL); |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
148 // |---|---|---|---| | 148 // |---|---|---|---| |
149 // | | x | | x | | 149 // | | x | | x | |
150 // |---|---|---|---| | 150 // |---|---|---|---| |
151 // | x | | x | | | 151 // | x | | x | | |
152 // |---|---|---|---| | 152 // |---|---|---|---| |
153 sk_sp<SkImage> discardable_image[4][4]; | 153 sk_sp<SkImage> discardable_image[4][4]; |
154 for (int y = 0; y < 4; ++y) { | 154 for (int y = 0; y < 4; ++y) { |
155 for (int x = 0; x < 4; ++x) { | 155 for (int x = 0; x < 4; ++x) { |
156 if ((x + y) & 1) { | 156 if ((x + y) & 1) { |
157 discardable_image[y][x] = CreateDiscardableImage(gfx::Size(500, 500)); | 157 discardable_image[y][x] = CreateDiscardableImage(gfx::Size(500, 500)); |
158 SkPaint paint; | 158 PaintFlags paint; |
159 content_layer_client.add_draw_image( | 159 content_layer_client.add_draw_image( |
160 discardable_image[y][x], | 160 discardable_image[y][x], |
161 gfx::Point(1024 + x * 512 + 6, y * 512 + 6), paint); | 161 gfx::Point(1024 + x * 512 + 6, y * 512 + 6), paint); |
162 } | 162 } |
163 } | 163 } |
164 } | 164 } |
165 | 165 |
166 scoped_refptr<DisplayItemList> display_list = | 166 scoped_refptr<DisplayItemList> display_list = |
167 content_layer_client.PaintContentsToDisplayList( | 167 content_layer_client.PaintContentsToDisplayList( |
168 ContentLayerClient::PAINTING_BEHAVIOR_NORMAL); | 168 ContentLayerClient::PAINTING_BEHAVIOR_NORMAL); |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
244 // |---|---|---|---| | 244 // |---|---|---|---| |
245 // | | x | | x | | 245 // | | x | | x | |
246 // |---|---|---|---| | 246 // |---|---|---|---| |
247 // | x | | x | | | 247 // | x | | x | | |
248 // |---|---|---|---| | 248 // |---|---|---|---| |
249 sk_sp<SkImage> discardable_image[4][4]; | 249 sk_sp<SkImage> discardable_image[4][4]; |
250 for (int y = 0; y < 4; ++y) { | 250 for (int y = 0; y < 4; ++y) { |
251 for (int x = 0; x < 4; ++x) { | 251 for (int x = 0; x < 4; ++x) { |
252 if ((x + y) & 1) { | 252 if ((x + y) & 1) { |
253 discardable_image[y][x] = CreateDiscardableImage(gfx::Size(500, 500)); | 253 discardable_image[y][x] = CreateDiscardableImage(gfx::Size(500, 500)); |
254 SkPaint paint; | 254 PaintFlags paint; |
255 content_layer_client.add_draw_image( | 255 content_layer_client.add_draw_image( |
256 discardable_image[y][x], gfx::Point(x * 512 + 6, y * 512 + 6), | 256 discardable_image[y][x], gfx::Point(x * 512 + 6, y * 512 + 6), |
257 paint); | 257 paint); |
258 } | 258 } |
259 } | 259 } |
260 } | 260 } |
261 | 261 |
262 scoped_refptr<DisplayItemList> display_list = | 262 scoped_refptr<DisplayItemList> display_list = |
263 content_layer_client.PaintContentsToDisplayList( | 263 content_layer_client.PaintContentsToDisplayList( |
264 ContentLayerClient::PAINTING_BEHAVIOR_NORMAL); | 264 ContentLayerClient::PAINTING_BEHAVIOR_NORMAL); |
(...skipping 22 matching lines...) Expand all Loading... |
287 } | 287 } |
288 } | 288 } |
289 | 289 |
290 TEST_F(DiscardableImageMapTest, GetDiscardableImagesInRectMassiveImage) { | 290 TEST_F(DiscardableImageMapTest, GetDiscardableImagesInRectMassiveImage) { |
291 gfx::Rect visible_rect(2048, 2048); | 291 gfx::Rect visible_rect(2048, 2048); |
292 FakeContentLayerClient content_layer_client; | 292 FakeContentLayerClient content_layer_client; |
293 content_layer_client.set_bounds(visible_rect.size()); | 293 content_layer_client.set_bounds(visible_rect.size()); |
294 | 294 |
295 sk_sp<SkImage> discardable_image = | 295 sk_sp<SkImage> discardable_image = |
296 CreateDiscardableImage(gfx::Size(1 << 25, 1 << 25)); | 296 CreateDiscardableImage(gfx::Size(1 << 25, 1 << 25)); |
297 SkPaint paint; | 297 PaintFlags paint; |
298 content_layer_client.add_draw_image(discardable_image, gfx::Point(0, 0), | 298 content_layer_client.add_draw_image(discardable_image, gfx::Point(0, 0), |
299 paint); | 299 paint); |
300 | 300 |
301 scoped_refptr<DisplayItemList> display_list = | 301 scoped_refptr<DisplayItemList> display_list = |
302 content_layer_client.PaintContentsToDisplayList( | 302 content_layer_client.PaintContentsToDisplayList( |
303 ContentLayerClient::PAINTING_BEHAVIOR_NORMAL); | 303 ContentLayerClient::PAINTING_BEHAVIOR_NORMAL); |
304 | 304 |
305 DiscardableImageMap image_map; | 305 DiscardableImageMap image_map; |
306 { | 306 { |
307 DiscardableImageMap::ScopedMetadataGenerator generator(&image_map, | 307 DiscardableImageMap::ScopedMetadataGenerator generator(&image_map, |
(...skipping 12 matching lines...) Expand all Loading... |
320 FakeContentLayerClient content_layer_client; | 320 FakeContentLayerClient content_layer_client; |
321 content_layer_client.set_bounds(visible_rect.size()); | 321 content_layer_client.set_bounds(visible_rect.size()); |
322 | 322 |
323 sk_sp<SkImage> discardable_image = CreateDiscardableImage(gfx::Size(10, 10)); | 323 sk_sp<SkImage> discardable_image = CreateDiscardableImage(gfx::Size(10, 10)); |
324 | 324 |
325 DiscardableImageMap image_map; | 325 DiscardableImageMap image_map; |
326 { | 326 { |
327 DiscardableImageMap::ScopedMetadataGenerator generator(&image_map, | 327 DiscardableImageMap::ScopedMetadataGenerator generator(&image_map, |
328 visible_rect.size()); | 328 visible_rect.size()); |
329 { | 329 { |
330 std::unique_ptr<SkPaint> paint(new SkPaint()); | 330 std::unique_ptr<PaintFlags> paint(new PaintFlags()); |
331 generator.canvas()->saveLayer(gfx::RectToSkRect(visible_rect), | 331 generator.canvas()->saveLayer(gfx::RectToSkRect(visible_rect), |
332 paint.get()); | 332 paint.get()); |
333 } | 333 } |
334 generator.canvas()->drawImage(discardable_image, 0, 0, nullptr); | 334 generator.canvas()->drawImage(discardable_image, 0, 0, nullptr); |
335 generator.canvas()->restore(); | 335 generator.canvas()->restore(); |
336 } | 336 } |
337 | 337 |
338 std::vector<PositionScaleDrawImage> images = | 338 std::vector<PositionScaleDrawImage> images = |
339 GetDiscardableImagesInRect(image_map, gfx::Rect(0, 0, 1, 1)); | 339 GetDiscardableImagesInRect(image_map, gfx::Rect(0, 0, 1, 1)); |
340 EXPECT_EQ(1u, images.size()); | 340 EXPECT_EQ(1u, images.size()); |
341 EXPECT_TRUE(images[0].image == discardable_image); | 341 EXPECT_TRUE(images[0].image == discardable_image); |
342 } | 342 } |
343 | 343 |
344 TEST_F(DiscardableImageMapTest, GetDiscardableImagesInRectMaxImage) { | 344 TEST_F(DiscardableImageMapTest, GetDiscardableImagesInRectMaxImage) { |
345 gfx::Rect visible_rect(2048, 2048); | 345 gfx::Rect visible_rect(2048, 2048); |
346 FakeContentLayerClient content_layer_client; | 346 FakeContentLayerClient content_layer_client; |
347 content_layer_client.set_bounds(visible_rect.size()); | 347 content_layer_client.set_bounds(visible_rect.size()); |
348 | 348 |
349 int dimension = std::numeric_limits<int>::max(); | 349 int dimension = std::numeric_limits<int>::max(); |
350 sk_sp<SkImage> discardable_image = | 350 sk_sp<SkImage> discardable_image = |
351 CreateDiscardableImage(gfx::Size(dimension, dimension)); | 351 CreateDiscardableImage(gfx::Size(dimension, dimension)); |
352 SkPaint paint; | 352 PaintFlags paint; |
353 content_layer_client.add_draw_image(discardable_image, gfx::Point(42, 42), | 353 content_layer_client.add_draw_image(discardable_image, gfx::Point(42, 42), |
354 paint); | 354 paint); |
355 | 355 |
356 scoped_refptr<DisplayItemList> display_list = | 356 scoped_refptr<DisplayItemList> display_list = |
357 content_layer_client.PaintContentsToDisplayList( | 357 content_layer_client.PaintContentsToDisplayList( |
358 ContentLayerClient::PAINTING_BEHAVIOR_NORMAL); | 358 ContentLayerClient::PAINTING_BEHAVIOR_NORMAL); |
359 | 359 |
360 DiscardableImageMap image_map; | 360 DiscardableImageMap image_map; |
361 { | 361 { |
362 DiscardableImageMap::ScopedMetadataGenerator generator(&image_map, | 362 DiscardableImageMap::ScopedMetadataGenerator generator(&image_map, |
(...skipping 14 matching lines...) Expand all Loading... |
377 // some draw calls, so we subtract 64 since we only care about "really large" | 377 // some draw calls, so we subtract 64 since we only care about "really large" |
378 // values, not necessarily max int values. | 378 // values, not necessarily max int values. |
379 int dimension = static_cast<int>( | 379 int dimension = static_cast<int>( |
380 static_cast<float>(std::numeric_limits<int>::max() - 64)); | 380 static_cast<float>(std::numeric_limits<int>::max() - 64)); |
381 gfx::Rect visible_rect(dimension, dimension); | 381 gfx::Rect visible_rect(dimension, dimension); |
382 FakeContentLayerClient content_layer_client; | 382 FakeContentLayerClient content_layer_client; |
383 content_layer_client.set_bounds(visible_rect.size()); | 383 content_layer_client.set_bounds(visible_rect.size()); |
384 | 384 |
385 sk_sp<SkImage> discardable_image = | 385 sk_sp<SkImage> discardable_image = |
386 CreateDiscardableImage(gfx::Size(dimension, dimension)); | 386 CreateDiscardableImage(gfx::Size(dimension, dimension)); |
387 SkPaint paint; | 387 PaintFlags paint; |
388 content_layer_client.add_draw_image(discardable_image, gfx::Point(0, 0), | 388 content_layer_client.add_draw_image(discardable_image, gfx::Point(0, 0), |
389 paint); | 389 paint); |
390 content_layer_client.add_draw_image(discardable_image, gfx::Point(10000, 0), | 390 content_layer_client.add_draw_image(discardable_image, gfx::Point(10000, 0), |
391 paint); | 391 paint); |
392 content_layer_client.add_draw_image(discardable_image, | 392 content_layer_client.add_draw_image(discardable_image, |
393 gfx::Point(-10000, 500), paint); | 393 gfx::Point(-10000, 500), paint); |
394 | 394 |
395 scoped_refptr<DisplayItemList> display_list = | 395 scoped_refptr<DisplayItemList> display_list = |
396 content_layer_client.PaintContentsToDisplayList( | 396 content_layer_client.PaintContentsToDisplayList( |
397 ContentLayerClient::PAINTING_BEHAVIOR_NORMAL); | 397 ContentLayerClient::PAINTING_BEHAVIOR_NORMAL); |
(...skipping 30 matching lines...) Expand all Loading... |
428 TEST_F(DiscardableImageMapTest, GetDiscardableImagesRectInBounds) { | 428 TEST_F(DiscardableImageMapTest, GetDiscardableImagesRectInBounds) { |
429 gfx::Rect visible_rect(1000, 1000); | 429 gfx::Rect visible_rect(1000, 1000); |
430 FakeContentLayerClient content_layer_client; | 430 FakeContentLayerClient content_layer_client; |
431 content_layer_client.set_bounds(visible_rect.size()); | 431 content_layer_client.set_bounds(visible_rect.size()); |
432 | 432 |
433 sk_sp<SkImage> discardable_image = | 433 sk_sp<SkImage> discardable_image = |
434 CreateDiscardableImage(gfx::Size(100, 100)); | 434 CreateDiscardableImage(gfx::Size(100, 100)); |
435 sk_sp<SkImage> long_discardable_image = | 435 sk_sp<SkImage> long_discardable_image = |
436 CreateDiscardableImage(gfx::Size(10000, 100)); | 436 CreateDiscardableImage(gfx::Size(10000, 100)); |
437 | 437 |
438 SkPaint paint; | 438 PaintFlags paint; |
439 content_layer_client.add_draw_image(discardable_image, gfx::Point(-10, -11), | 439 content_layer_client.add_draw_image(discardable_image, gfx::Point(-10, -11), |
440 paint); | 440 paint); |
441 content_layer_client.add_draw_image(discardable_image, gfx::Point(950, 951), | 441 content_layer_client.add_draw_image(discardable_image, gfx::Point(950, 951), |
442 paint); | 442 paint); |
443 content_layer_client.add_draw_image(long_discardable_image, | 443 content_layer_client.add_draw_image(long_discardable_image, |
444 gfx::Point(-100, 500), paint); | 444 gfx::Point(-100, 500), paint); |
445 | 445 |
446 scoped_refptr<DisplayItemList> display_list = | 446 scoped_refptr<DisplayItemList> display_list = |
447 content_layer_client.PaintContentsToDisplayList( | 447 content_layer_client.PaintContentsToDisplayList( |
448 ContentLayerClient::PAINTING_BEHAVIOR_NORMAL); | 448 ContentLayerClient::PAINTING_BEHAVIOR_NORMAL); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
481 // | | x | | x | | 481 // | | x | | x | |
482 // |---|---|---|---| | 482 // |---|---|---|---| |
483 // | x | | x | | | 483 // | x | | x | | |
484 // |---|---|---|---| | 484 // |---|---|---|---| |
485 sk_sp<SkImage> discardable_image[4][4]; | 485 sk_sp<SkImage> discardable_image[4][4]; |
486 for (int y = 0; y < 4; ++y) { | 486 for (int y = 0; y < 4; ++y) { |
487 for (int x = 0; x < 4; ++x) { | 487 for (int x = 0; x < 4; ++x) { |
488 if ((x + y) & 1) { | 488 if ((x + y) & 1) { |
489 discardable_image[y][x] = CreateDiscardableImage(gfx::Size(500, 500)); | 489 discardable_image[y][x] = CreateDiscardableImage(gfx::Size(500, 500)); |
490 SkMatrix scale = SkMatrix::MakeScale(x * 0.5f, y * 0.5f); | 490 SkMatrix scale = SkMatrix::MakeScale(x * 0.5f, y * 0.5f); |
491 SkPaint paint; | 491 PaintFlags paint; |
492 paint.setShader(discardable_image[y][x]->makeShader( | 492 paint.setShader(discardable_image[y][x]->makeShader( |
493 SkShader::kClamp_TileMode, SkShader::kClamp_TileMode, &scale)); | 493 SkShader::kClamp_TileMode, SkShader::kClamp_TileMode, &scale)); |
494 content_layer_client.add_draw_rect( | 494 content_layer_client.add_draw_rect( |
495 gfx::Rect(x * 512 + 6, y * 512 + 6, 500, 500), paint); | 495 gfx::Rect(x * 512 + 6, y * 512 + 6, 500, 500), paint); |
496 } | 496 } |
497 } | 497 } |
498 } | 498 } |
499 | 499 |
500 scoped_refptr<DisplayItemList> display_list = | 500 scoped_refptr<DisplayItemList> display_list = |
501 content_layer_client.PaintContentsToDisplayList( | 501 content_layer_client.PaintContentsToDisplayList( |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
536 EXPECT_EQ(gfx::Rect(512 + 6, 2 * 512 + 6, 500, 500), images[1].image_rect); | 536 EXPECT_EQ(gfx::Rect(512 + 6, 2 * 512 + 6, 500, 500), images[1].image_rect); |
537 EXPECT_TRUE(images[2].image == discardable_image[2][3]); | 537 EXPECT_TRUE(images[2].image == discardable_image[2][3]); |
538 EXPECT_EQ(gfx::Rect(3 * 512 + 6, 2 * 512 + 6, 500, 500), | 538 EXPECT_EQ(gfx::Rect(3 * 512 + 6, 2 * 512 + 6, 500, 500), |
539 images[2].image_rect); | 539 images[2].image_rect); |
540 EXPECT_TRUE(images[3].image == discardable_image[3][2]); | 540 EXPECT_TRUE(images[3].image == discardable_image[3][2]); |
541 EXPECT_EQ(gfx::Rect(2 * 512 + 6, 3 * 512 + 6, 500, 500), | 541 EXPECT_EQ(gfx::Rect(2 * 512 + 6, 3 * 512 + 6, 500, 500), |
542 images[3].image_rect); | 542 images[3].image_rect); |
543 } | 543 } |
544 | 544 |
545 } // namespace cc | 545 } // namespace cc |
OLD | NEW |