Chromium Code Reviews| 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 290 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 301 DiscardableImageMap image_map; | 301 DiscardableImageMap image_map; |
| 302 { | 302 { |
| 303 DiscardableImageMap::ScopedMetadataGenerator generator(&image_map, | 303 DiscardableImageMap::ScopedMetadataGenerator generator(&image_map, |
| 304 visible_rect.size()); | 304 visible_rect.size()); |
| 305 display_list->Raster(generator.canvas(), nullptr, visible_rect, 1.f); | 305 display_list->Raster(generator.canvas(), nullptr, visible_rect, 1.f); |
| 306 } | 306 } |
| 307 std::vector<PositionDrawImage> images = | 307 std::vector<PositionDrawImage> images = |
| 308 GetDiscardableImagesInRect(image_map, gfx::Rect(0, 0, 1, 1)); | 308 GetDiscardableImagesInRect(image_map, gfx::Rect(0, 0, 1, 1)); |
| 309 EXPECT_EQ(1u, images.size()); | 309 EXPECT_EQ(1u, images.size()); |
| 310 EXPECT_TRUE(images[0].image == discardable_image); | 310 EXPECT_TRUE(images[0].image == discardable_image); |
| 311 EXPECT_EQ(gfx::Rect(0, 0, 1 << 25, 1 << 25), images[0].image_rect); | 311 EXPECT_EQ(gfx::Rect(0, 0, 2048, 2048), images[0].image_rect); |
| 312 } | 312 } |
| 313 | 313 |
| 314 TEST_F(DiscardableImageMapTest, PaintDestroyedWhileImageIsDrawn) { | 314 TEST_F(DiscardableImageMapTest, PaintDestroyedWhileImageIsDrawn) { |
| 315 gfx::Rect visible_rect(2048, 2048); | 315 gfx::Rect visible_rect(2048, 2048); |
| 316 FakeContentLayerClient content_layer_client; | 316 FakeContentLayerClient content_layer_client; |
| 317 content_layer_client.set_bounds(visible_rect.size()); | 317 content_layer_client.set_bounds(visible_rect.size()); |
| 318 | 318 |
| 319 sk_sp<SkImage> discardable_image = CreateDiscardableImage(gfx::Size(10, 10)); | 319 sk_sp<SkImage> discardable_image = CreateDiscardableImage(gfx::Size(10, 10)); |
| 320 | 320 |
| 321 DiscardableImageMap image_map; | 321 DiscardableImageMap image_map; |
| 322 { | 322 { |
| 323 DiscardableImageMap::ScopedMetadataGenerator generator(&image_map, | 323 DiscardableImageMap::ScopedMetadataGenerator generator(&image_map, |
| 324 visible_rect.size()); | 324 visible_rect.size()); |
| 325 { | 325 { |
| 326 std::unique_ptr<SkPaint> paint(new SkPaint()); | 326 std::unique_ptr<SkPaint> paint(new SkPaint()); |
| 327 generator.canvas()->saveLayer(gfx::RectToSkRect(visible_rect), | 327 generator.canvas()->saveLayer(gfx::RectToSkRect(visible_rect), |
| 328 paint.get()); | 328 paint.get()); |
| 329 } | 329 } |
| 330 generator.canvas()->drawImage(discardable_image, 0, 0, nullptr); | 330 generator.canvas()->drawImage(discardable_image, 0, 0, nullptr); |
| 331 generator.canvas()->restore(); | 331 generator.canvas()->restore(); |
| 332 } | 332 } |
| 333 | 333 |
| 334 std::vector<PositionDrawImage> images = | 334 std::vector<PositionDrawImage> images = |
| 335 GetDiscardableImagesInRect(image_map, gfx::Rect(0, 0, 1, 1)); | 335 GetDiscardableImagesInRect(image_map, gfx::Rect(0, 0, 1, 1)); |
| 336 EXPECT_EQ(1u, images.size()); | 336 EXPECT_EQ(1u, images.size()); |
| 337 EXPECT_TRUE(images[0].image == discardable_image); | 337 EXPECT_TRUE(images[0].image == discardable_image); |
| 338 } | 338 } |
| 339 | 339 |
| 340 TEST_F(DiscardableImageMapTest, GetDiscardableImagesInRectMaxImage) { | |
| 341 gfx::Rect visible_rect(2048, 2048); | |
| 342 FakeContentLayerClient content_layer_client; | |
| 343 content_layer_client.set_bounds(visible_rect.size()); | |
| 344 | |
| 345 int dimension = std::numeric_limits<int>::max(); | |
| 346 sk_sp<SkImage> discardable_image = | |
| 347 CreateDiscardableImage(gfx::Size(dimension, dimension)); | |
| 348 SkPaint paint; | |
| 349 content_layer_client.add_draw_image(discardable_image, gfx::Point(42, 42), | |
| 350 paint); | |
| 351 | |
| 352 scoped_refptr<DisplayItemList> display_list = | |
| 353 content_layer_client.PaintContentsToDisplayList( | |
| 354 ContentLayerClient::PAINTING_BEHAVIOR_NORMAL); | |
| 355 | |
| 356 DiscardableImageMap image_map; | |
| 357 { | |
| 358 DiscardableImageMap::ScopedMetadataGenerator generator(&image_map, | |
| 359 visible_rect.size()); | |
| 360 display_list->Raster(generator.canvas(), nullptr, visible_rect, 1.f); | |
| 361 } | |
| 362 std::vector<PositionDrawImage> images = | |
| 363 GetDiscardableImagesInRect(image_map, gfx::Rect(42, 42, 1, 1)); | |
| 364 EXPECT_EQ(1u, images.size()); | |
| 365 EXPECT_TRUE(images[0].image == discardable_image); | |
| 366 EXPECT_EQ(gfx::Rect(42, 42, 2006, 2006), images[0].image_rect); | |
| 367 } | |
| 368 | |
| 369 TEST_F(DiscardableImageMapTest, GetDiscardableImagesInRectMaxImageMaxLayer) { | |
| 370 int dimension = static_cast<int>( | |
| 371 static_cast<float>(std::numeric_limits<int>::max() - 64)); | |
|
enne (OOO)
2016/08/10 00:07:12
This really needs a comment.
vmpstr
2016/08/10 19:19:39
Done.
| |
| 372 gfx::Rect visible_rect(dimension, dimension); | |
| 373 FakeContentLayerClient content_layer_client; | |
| 374 content_layer_client.set_bounds(visible_rect.size()); | |
| 375 | |
| 376 sk_sp<SkImage> discardable_image = | |
| 377 CreateDiscardableImage(gfx::Size(dimension, dimension)); | |
| 378 SkPaint paint; | |
| 379 content_layer_client.add_draw_image(discardable_image, gfx::Point(0, 0), | |
| 380 paint); | |
| 381 content_layer_client.add_draw_image(discardable_image, gfx::Point(10000, 0), | |
| 382 paint); | |
| 383 content_layer_client.add_draw_image(discardable_image, | |
| 384 gfx::Point(-10000, 500), paint); | |
| 385 | |
| 386 scoped_refptr<DisplayItemList> display_list = | |
| 387 content_layer_client.PaintContentsToDisplayList( | |
| 388 ContentLayerClient::PAINTING_BEHAVIOR_NORMAL); | |
| 389 | |
| 390 DiscardableImageMap image_map; | |
| 391 { | |
| 392 DiscardableImageMap::ScopedMetadataGenerator generator(&image_map, | |
| 393 visible_rect.size()); | |
| 394 display_list->Raster(generator.canvas(), nullptr, visible_rect, 1.f); | |
| 395 } | |
| 396 std::vector<PositionDrawImage> images = | |
| 397 GetDiscardableImagesInRect(image_map, gfx::Rect(0, 0, 1, 1)); | |
| 398 EXPECT_EQ(1u, images.size()); | |
| 399 EXPECT_EQ(gfx::Rect(0, 0, dimension, dimension), images[0].image_rect); | |
| 400 | |
| 401 images = GetDiscardableImagesInRect(image_map, gfx::Rect(10000, 0, 1, 1)); | |
| 402 EXPECT_EQ(2u, images.size()); | |
| 403 int expected10k = static_cast<int>(static_cast<float>(dimension - 10000)); | |
| 404 int expected500 = static_cast<int>(static_cast<float>(dimension - 500)); | |
| 405 EXPECT_EQ(gfx::Rect(10000, 0, expected10k, dimension), images[1].image_rect); | |
| 406 EXPECT_EQ(gfx::Rect(0, 0, dimension, dimension), images[0].image_rect); | |
| 407 | |
| 408 images = GetDiscardableImagesInRect(image_map, gfx::Rect(0, 500, 1, 1)); | |
| 409 EXPECT_EQ(2u, images.size()); | |
| 410 EXPECT_EQ(gfx::Rect(0, 500, expected10k, expected500), images[1].image_rect); | |
| 411 EXPECT_EQ(gfx::Rect(0, 0, dimension, dimension), images[0].image_rect); | |
| 412 } | |
| 413 | |
| 414 TEST_F(DiscardableImageMapTest, GetDiscardableImagesRectInBounds) { | |
| 415 gfx::Rect visible_rect(1000, 1000); | |
| 416 FakeContentLayerClient content_layer_client; | |
| 417 content_layer_client.set_bounds(visible_rect.size()); | |
| 418 | |
| 419 sk_sp<SkImage> discardable_image = | |
| 420 CreateDiscardableImage(gfx::Size(100, 100)); | |
| 421 sk_sp<SkImage> long_discardable_image = | |
| 422 CreateDiscardableImage(gfx::Size(10000, 100)); | |
| 423 | |
| 424 SkPaint paint; | |
| 425 content_layer_client.add_draw_image(discardable_image, gfx::Point(-10, -11), | |
| 426 paint); | |
| 427 content_layer_client.add_draw_image(discardable_image, gfx::Point(950, 951), | |
| 428 paint); | |
| 429 content_layer_client.add_draw_image(long_discardable_image, | |
| 430 gfx::Point(-100, 500), paint); | |
| 431 | |
| 432 scoped_refptr<DisplayItemList> display_list = | |
| 433 content_layer_client.PaintContentsToDisplayList( | |
| 434 ContentLayerClient::PAINTING_BEHAVIOR_NORMAL); | |
| 435 | |
| 436 DiscardableImageMap image_map; | |
| 437 { | |
| 438 DiscardableImageMap::ScopedMetadataGenerator generator(&image_map, | |
| 439 visible_rect.size()); | |
| 440 display_list->Raster(generator.canvas(), nullptr, visible_rect, 1.f); | |
| 441 } | |
| 442 std::vector<PositionDrawImage> images = | |
| 443 GetDiscardableImagesInRect(image_map, gfx::Rect(0, 0, 1, 1)); | |
| 444 EXPECT_EQ(1u, images.size()); | |
| 445 EXPECT_EQ(gfx::Rect(0, 0, 90, 89), images[0].image_rect); | |
| 446 | |
| 447 images = GetDiscardableImagesInRect(image_map, gfx::Rect(999, 999, 1, 1)); | |
| 448 EXPECT_EQ(1u, images.size()); | |
| 449 EXPECT_EQ(gfx::Rect(950, 951, 50, 49), images[0].image_rect); | |
| 450 | |
| 451 images = GetDiscardableImagesInRect(image_map, gfx::Rect(0, 500, 1, 1)); | |
| 452 EXPECT_EQ(1u, images.size()); | |
| 453 EXPECT_EQ(gfx::Rect(0, 500, 1000, 100), images[0].image_rect); | |
| 454 } | |
| 455 | |
| 340 } // namespace cc | 456 } // namespace cc |
| OLD | NEW |