| 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 |
| (...skipping 64 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 flags; |
| 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 flags); |
| 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); |
| 96 | 96 |
| 97 DiscardableImageMap image_map; | 97 DiscardableImageMap image_map; |
| 98 { | 98 { |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 162 // |---|---|---|---| | 162 // |---|---|---|---| |
| 163 // | | x | | x | | 163 // | | x | | x | |
| 164 // |---|---|---|---| | 164 // |---|---|---|---| |
| 165 // | x | | x | | | 165 // | x | | x | | |
| 166 // |---|---|---|---| | 166 // |---|---|---|---| |
| 167 sk_sp<SkImage> discardable_image[4][4]; | 167 sk_sp<SkImage> discardable_image[4][4]; |
| 168 for (int y = 0; y < 4; ++y) { | 168 for (int y = 0; y < 4; ++y) { |
| 169 for (int x = 0; x < 4; ++x) { | 169 for (int x = 0; x < 4; ++x) { |
| 170 if ((x + y) & 1) { | 170 if ((x + y) & 1) { |
| 171 discardable_image[y][x] = CreateDiscardableImage(gfx::Size(500, 500)); | 171 discardable_image[y][x] = CreateDiscardableImage(gfx::Size(500, 500)); |
| 172 SkPaint paint; | 172 PaintFlags flags; |
| 173 content_layer_client.add_draw_image( | 173 content_layer_client.add_draw_image( |
| 174 discardable_image[y][x], | 174 discardable_image[y][x], |
| 175 gfx::Point(1024 + x * 512 + 6, y * 512 + 6), paint); | 175 gfx::Point(1024 + x * 512 + 6, y * 512 + 6), flags); |
| 176 } | 176 } |
| 177 } | 177 } |
| 178 } | 178 } |
| 179 | 179 |
| 180 scoped_refptr<DisplayItemList> display_list = | 180 scoped_refptr<DisplayItemList> display_list = |
| 181 content_layer_client.PaintContentsToDisplayList( | 181 content_layer_client.PaintContentsToDisplayList( |
| 182 ContentLayerClient::PAINTING_BEHAVIOR_NORMAL); | 182 ContentLayerClient::PAINTING_BEHAVIOR_NORMAL); |
| 183 | 183 |
| 184 DiscardableImageMap image_map; | 184 DiscardableImageMap image_map; |
| 185 { | 185 { |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 278 // |---|---|---|---| | 278 // |---|---|---|---| |
| 279 // | | x | | x | | 279 // | | x | | x | |
| 280 // |---|---|---|---| | 280 // |---|---|---|---| |
| 281 // | x | | x | | | 281 // | x | | x | | |
| 282 // |---|---|---|---| | 282 // |---|---|---|---| |
| 283 sk_sp<SkImage> discardable_image[4][4]; | 283 sk_sp<SkImage> discardable_image[4][4]; |
| 284 for (int y = 0; y < 4; ++y) { | 284 for (int y = 0; y < 4; ++y) { |
| 285 for (int x = 0; x < 4; ++x) { | 285 for (int x = 0; x < 4; ++x) { |
| 286 if ((x + y) & 1) { | 286 if ((x + y) & 1) { |
| 287 discardable_image[y][x] = CreateDiscardableImage(gfx::Size(500, 500)); | 287 discardable_image[y][x] = CreateDiscardableImage(gfx::Size(500, 500)); |
| 288 SkPaint paint; | 288 PaintFlags flags; |
| 289 content_layer_client.add_draw_image( | 289 content_layer_client.add_draw_image( |
| 290 discardable_image[y][x], gfx::Point(x * 512 + 6, y * 512 + 6), | 290 discardable_image[y][x], gfx::Point(x * 512 + 6, y * 512 + 6), |
| 291 paint); | 291 flags); |
| 292 } | 292 } |
| 293 } | 293 } |
| 294 } | 294 } |
| 295 | 295 |
| 296 scoped_refptr<DisplayItemList> display_list = | 296 scoped_refptr<DisplayItemList> display_list = |
| 297 content_layer_client.PaintContentsToDisplayList( | 297 content_layer_client.PaintContentsToDisplayList( |
| 298 ContentLayerClient::PAINTING_BEHAVIOR_NORMAL); | 298 ContentLayerClient::PAINTING_BEHAVIOR_NORMAL); |
| 299 | 299 |
| 300 DiscardableImageMap image_map; | 300 DiscardableImageMap image_map; |
| 301 { | 301 { |
| (...skipping 21 matching lines...) Expand all Loading... |
| 323 } | 323 } |
| 324 } | 324 } |
| 325 | 325 |
| 326 TEST_F(DiscardableImageMapTest, GetDiscardableImagesInRectMassiveImage) { | 326 TEST_F(DiscardableImageMapTest, GetDiscardableImagesInRectMassiveImage) { |
| 327 gfx::Rect visible_rect(2048, 2048); | 327 gfx::Rect visible_rect(2048, 2048); |
| 328 FakeContentLayerClient content_layer_client; | 328 FakeContentLayerClient content_layer_client; |
| 329 content_layer_client.set_bounds(visible_rect.size()); | 329 content_layer_client.set_bounds(visible_rect.size()); |
| 330 | 330 |
| 331 sk_sp<SkImage> discardable_image = | 331 sk_sp<SkImage> discardable_image = |
| 332 CreateDiscardableImage(gfx::Size(1 << 25, 1 << 25)); | 332 CreateDiscardableImage(gfx::Size(1 << 25, 1 << 25)); |
| 333 SkPaint paint; | 333 PaintFlags flags; |
| 334 content_layer_client.add_draw_image(discardable_image, gfx::Point(0, 0), | 334 content_layer_client.add_draw_image(discardable_image, gfx::Point(0, 0), |
| 335 paint); | 335 flags); |
| 336 | 336 |
| 337 scoped_refptr<DisplayItemList> display_list = | 337 scoped_refptr<DisplayItemList> display_list = |
| 338 content_layer_client.PaintContentsToDisplayList( | 338 content_layer_client.PaintContentsToDisplayList( |
| 339 ContentLayerClient::PAINTING_BEHAVIOR_NORMAL); | 339 ContentLayerClient::PAINTING_BEHAVIOR_NORMAL); |
| 340 | 340 |
| 341 DiscardableImageMap image_map; | 341 DiscardableImageMap image_map; |
| 342 { | 342 { |
| 343 DiscardableImageMap::ScopedMetadataGenerator generator(&image_map, | 343 DiscardableImageMap::ScopedMetadataGenerator generator(&image_map, |
| 344 visible_rect.size()); | 344 visible_rect.size()); |
| 345 display_list->Raster(generator.canvas(), nullptr, gfx::Rect(), 1.f); | 345 display_list->Raster(generator.canvas(), nullptr, gfx::Rect(), 1.f); |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 380 } | 380 } |
| 381 | 381 |
| 382 TEST_F(DiscardableImageMapTest, GetDiscardableImagesInRectMaxImage) { | 382 TEST_F(DiscardableImageMapTest, GetDiscardableImagesInRectMaxImage) { |
| 383 gfx::Rect visible_rect(2048, 2048); | 383 gfx::Rect visible_rect(2048, 2048); |
| 384 FakeContentLayerClient content_layer_client; | 384 FakeContentLayerClient content_layer_client; |
| 385 content_layer_client.set_bounds(visible_rect.size()); | 385 content_layer_client.set_bounds(visible_rect.size()); |
| 386 | 386 |
| 387 int dimension = std::numeric_limits<int>::max(); | 387 int dimension = std::numeric_limits<int>::max(); |
| 388 sk_sp<SkImage> discardable_image = | 388 sk_sp<SkImage> discardable_image = |
| 389 CreateDiscardableImage(gfx::Size(dimension, dimension)); | 389 CreateDiscardableImage(gfx::Size(dimension, dimension)); |
| 390 SkPaint paint; | 390 PaintFlags flags; |
| 391 content_layer_client.add_draw_image(discardable_image, gfx::Point(42, 42), | 391 content_layer_client.add_draw_image(discardable_image, gfx::Point(42, 42), |
| 392 paint); | 392 flags); |
| 393 | 393 |
| 394 scoped_refptr<DisplayItemList> display_list = | 394 scoped_refptr<DisplayItemList> display_list = |
| 395 content_layer_client.PaintContentsToDisplayList( | 395 content_layer_client.PaintContentsToDisplayList( |
| 396 ContentLayerClient::PAINTING_BEHAVIOR_NORMAL); | 396 ContentLayerClient::PAINTING_BEHAVIOR_NORMAL); |
| 397 | 397 |
| 398 DiscardableImageMap image_map; | 398 DiscardableImageMap image_map; |
| 399 { | 399 { |
| 400 DiscardableImageMap::ScopedMetadataGenerator generator(&image_map, | 400 DiscardableImageMap::ScopedMetadataGenerator generator(&image_map, |
| 401 visible_rect.size()); | 401 visible_rect.size()); |
| 402 display_list->Raster(generator.canvas(), nullptr, visible_rect, 1.f); | 402 display_list->Raster(generator.canvas(), nullptr, visible_rect, 1.f); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 417 // some draw calls, so we subtract 64 since we only care about "really large" | 417 // some draw calls, so we subtract 64 since we only care about "really large" |
| 418 // values, not necessarily max int values. | 418 // values, not necessarily max int values. |
| 419 int dimension = static_cast<int>( | 419 int dimension = static_cast<int>( |
| 420 static_cast<float>(std::numeric_limits<int>::max() - 64)); | 420 static_cast<float>(std::numeric_limits<int>::max() - 64)); |
| 421 gfx::Rect visible_rect(dimension, dimension); | 421 gfx::Rect visible_rect(dimension, dimension); |
| 422 FakeContentLayerClient content_layer_client; | 422 FakeContentLayerClient content_layer_client; |
| 423 content_layer_client.set_bounds(visible_rect.size()); | 423 content_layer_client.set_bounds(visible_rect.size()); |
| 424 | 424 |
| 425 sk_sp<SkImage> discardable_image = | 425 sk_sp<SkImage> discardable_image = |
| 426 CreateDiscardableImage(gfx::Size(dimension, dimension)); | 426 CreateDiscardableImage(gfx::Size(dimension, dimension)); |
| 427 SkPaint paint; | 427 PaintFlags flags; |
| 428 content_layer_client.add_draw_image(discardable_image, gfx::Point(0, 0), | 428 content_layer_client.add_draw_image(discardable_image, gfx::Point(0, 0), |
| 429 paint); | 429 flags); |
| 430 content_layer_client.add_draw_image(discardable_image, gfx::Point(10000, 0), | 430 content_layer_client.add_draw_image(discardable_image, gfx::Point(10000, 0), |
| 431 paint); | 431 flags); |
| 432 content_layer_client.add_draw_image(discardable_image, | 432 content_layer_client.add_draw_image(discardable_image, |
| 433 gfx::Point(-10000, 500), paint); | 433 gfx::Point(-10000, 500), flags); |
| 434 | 434 |
| 435 scoped_refptr<DisplayItemList> display_list = | 435 scoped_refptr<DisplayItemList> display_list = |
| 436 content_layer_client.PaintContentsToDisplayList( | 436 content_layer_client.PaintContentsToDisplayList( |
| 437 ContentLayerClient::PAINTING_BEHAVIOR_NORMAL); | 437 ContentLayerClient::PAINTING_BEHAVIOR_NORMAL); |
| 438 | 438 |
| 439 DiscardableImageMap image_map; | 439 DiscardableImageMap image_map; |
| 440 { | 440 { |
| 441 DiscardableImageMap::ScopedMetadataGenerator generator(&image_map, | 441 DiscardableImageMap::ScopedMetadataGenerator generator(&image_map, |
| 442 visible_rect.size()); | 442 visible_rect.size()); |
| 443 display_list->Raster(generator.canvas(), nullptr, visible_rect, 1.f); | 443 display_list->Raster(generator.canvas(), nullptr, visible_rect, 1.f); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 471 TEST_F(DiscardableImageMapTest, GetDiscardableImagesRectInBounds) { | 471 TEST_F(DiscardableImageMapTest, GetDiscardableImagesRectInBounds) { |
| 472 gfx::Rect visible_rect(1000, 1000); | 472 gfx::Rect visible_rect(1000, 1000); |
| 473 FakeContentLayerClient content_layer_client; | 473 FakeContentLayerClient content_layer_client; |
| 474 content_layer_client.set_bounds(visible_rect.size()); | 474 content_layer_client.set_bounds(visible_rect.size()); |
| 475 | 475 |
| 476 sk_sp<SkImage> discardable_image = | 476 sk_sp<SkImage> discardable_image = |
| 477 CreateDiscardableImage(gfx::Size(100, 100)); | 477 CreateDiscardableImage(gfx::Size(100, 100)); |
| 478 sk_sp<SkImage> long_discardable_image = | 478 sk_sp<SkImage> long_discardable_image = |
| 479 CreateDiscardableImage(gfx::Size(10000, 100)); | 479 CreateDiscardableImage(gfx::Size(10000, 100)); |
| 480 | 480 |
| 481 SkPaint paint; | 481 PaintFlags flags; |
| 482 content_layer_client.add_draw_image(discardable_image, gfx::Point(-10, -11), | 482 content_layer_client.add_draw_image(discardable_image, gfx::Point(-10, -11), |
| 483 paint); | 483 flags); |
| 484 content_layer_client.add_draw_image(discardable_image, gfx::Point(950, 951), | 484 content_layer_client.add_draw_image(discardable_image, gfx::Point(950, 951), |
| 485 paint); | 485 flags); |
| 486 content_layer_client.add_draw_image(long_discardable_image, | 486 content_layer_client.add_draw_image(long_discardable_image, |
| 487 gfx::Point(-100, 500), paint); | 487 gfx::Point(-100, 500), flags); |
| 488 | 488 |
| 489 scoped_refptr<DisplayItemList> display_list = | 489 scoped_refptr<DisplayItemList> display_list = |
| 490 content_layer_client.PaintContentsToDisplayList( | 490 content_layer_client.PaintContentsToDisplayList( |
| 491 ContentLayerClient::PAINTING_BEHAVIOR_NORMAL); | 491 ContentLayerClient::PAINTING_BEHAVIOR_NORMAL); |
| 492 | 492 |
| 493 DiscardableImageMap image_map; | 493 DiscardableImageMap image_map; |
| 494 { | 494 { |
| 495 DiscardableImageMap::ScopedMetadataGenerator generator(&image_map, | 495 DiscardableImageMap::ScopedMetadataGenerator generator(&image_map, |
| 496 visible_rect.size()); | 496 visible_rect.size()); |
| 497 display_list->Raster(generator.canvas(), nullptr, visible_rect, 1.f); | 497 display_list->Raster(generator.canvas(), nullptr, visible_rect, 1.f); |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 539 // Skia doesn't allow shader instantiation with non-invertible local | 539 // Skia doesn't allow shader instantiation with non-invertible local |
| 540 // transforms, so we can't let the scale drop all the way to 0. | 540 // transforms, so we can't let the scale drop all the way to 0. |
| 541 static constexpr float kMinScale = 0.1f; | 541 static constexpr float kMinScale = 0.1f; |
| 542 | 542 |
| 543 for (int y = 0; y < 4; ++y) { | 543 for (int y = 0; y < 4; ++y) { |
| 544 for (int x = 0; x < 4; ++x) { | 544 for (int x = 0; x < 4; ++x) { |
| 545 if ((x + y) & 1) { | 545 if ((x + y) & 1) { |
| 546 discardable_image[y][x] = CreateDiscardableImage(gfx::Size(500, 500)); | 546 discardable_image[y][x] = CreateDiscardableImage(gfx::Size(500, 500)); |
| 547 SkMatrix scale = SkMatrix::MakeScale(std::max(x * 0.5f, kMinScale), | 547 SkMatrix scale = SkMatrix::MakeScale(std::max(x * 0.5f, kMinScale), |
| 548 std::max(y * 0.5f, kMinScale)); | 548 std::max(y * 0.5f, kMinScale)); |
| 549 SkPaint paint; | 549 PaintFlags flags; |
| 550 paint.setShader(discardable_image[y][x]->makeShader( | 550 flags.setShader(discardable_image[y][x]->makeShader( |
| 551 SkShader::kClamp_TileMode, SkShader::kClamp_TileMode, &scale)); | 551 SkShader::kClamp_TileMode, SkShader::kClamp_TileMode, &scale)); |
| 552 content_layer_client.add_draw_rect( | 552 content_layer_client.add_draw_rect( |
| 553 gfx::Rect(x * 512 + 6, y * 512 + 6, 500, 500), paint); | 553 gfx::Rect(x * 512 + 6, y * 512 + 6, 500, 500), flags); |
| 554 } | 554 } |
| 555 } | 555 } |
| 556 } | 556 } |
| 557 | 557 |
| 558 scoped_refptr<DisplayItemList> display_list = | 558 scoped_refptr<DisplayItemList> display_list = |
| 559 content_layer_client.PaintContentsToDisplayList( | 559 content_layer_client.PaintContentsToDisplayList( |
| 560 ContentLayerClient::PAINTING_BEHAVIOR_NORMAL); | 560 ContentLayerClient::PAINTING_BEHAVIOR_NORMAL); |
| 561 | 561 |
| 562 DiscardableImageMap image_map; | 562 DiscardableImageMap image_map; |
| 563 { | 563 { |
| (...skipping 30 matching lines...) Expand all Loading... |
| 594 EXPECT_EQ(gfx::Rect(512 + 6, 2 * 512 + 6, 500, 500), images[1].image_rect); | 594 EXPECT_EQ(gfx::Rect(512 + 6, 2 * 512 + 6, 500, 500), images[1].image_rect); |
| 595 EXPECT_TRUE(images[2].image == discardable_image[2][3]); | 595 EXPECT_TRUE(images[2].image == discardable_image[2][3]); |
| 596 EXPECT_EQ(gfx::Rect(3 * 512 + 6, 2 * 512 + 6, 500, 500), | 596 EXPECT_EQ(gfx::Rect(3 * 512 + 6, 2 * 512 + 6, 500, 500), |
| 597 images[2].image_rect); | 597 images[2].image_rect); |
| 598 EXPECT_TRUE(images[3].image == discardable_image[3][2]); | 598 EXPECT_TRUE(images[3].image == discardable_image[3][2]); |
| 599 EXPECT_EQ(gfx::Rect(2 * 512 + 6, 3 * 512 + 6, 500, 500), | 599 EXPECT_EQ(gfx::Rect(2 * 512 + 6, 3 * 512 + 6, 500, 500), |
| 600 images[3].image_rect); | 600 images[3].image_rect); |
| 601 } | 601 } |
| 602 | 602 |
| 603 } // namespace cc | 603 } // namespace cc |
| OLD | NEW |