| 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/tiles/software_image_decode_controller.h" | 5 #include "cc/tiles/software_image_decode_controller.h" |
| 6 | 6 |
| 7 #include "cc/playback/draw_image.h" | 7 #include "cc/playback/draw_image.h" |
| 8 #include "testing/gtest/include/gtest/gtest.h" | 8 #include "testing/gtest/include/gtest/gtest.h" |
| 9 | 9 |
| 10 namespace cc { | 10 namespace cc { |
| (...skipping 341 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 352 TEST(SoftwareImageDecodeControllerTest, GetTaskForImageSameImage) { | 352 TEST(SoftwareImageDecodeControllerTest, GetTaskForImageSameImage) { |
| 353 SoftwareImageDecodeController controller; | 353 SoftwareImageDecodeController controller; |
| 354 skia::RefPtr<SkImage> image = CreateImage(100, 100); | 354 skia::RefPtr<SkImage> image = CreateImage(100, 100); |
| 355 bool is_decomposable = true; | 355 bool is_decomposable = true; |
| 356 SkFilterQuality quality = kHigh_SkFilterQuality; | 356 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 357 uint64_t prepare_tiles_id = 1; | 357 uint64_t prepare_tiles_id = 1; |
| 358 | 358 |
| 359 DrawImage draw_image( | 359 DrawImage draw_image( |
| 360 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, | 360 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, |
| 361 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 361 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| 362 scoped_refptr<ImageDecodeTask> task; | 362 scoped_refptr<Task> task; |
| 363 bool need_unref = | 363 bool need_unref = |
| 364 controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, &task); | 364 controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, &task); |
| 365 EXPECT_TRUE(need_unref); | 365 EXPECT_TRUE(need_unref); |
| 366 EXPECT_TRUE(task); | 366 EXPECT_TRUE(task); |
| 367 | 367 |
| 368 DrawImage another_draw_image( | 368 DrawImage another_draw_image( |
| 369 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, | 369 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, |
| 370 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 370 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| 371 scoped_refptr<ImageDecodeTask> another_task; | 371 scoped_refptr<Task> another_task; |
| 372 need_unref = controller.GetTaskForImageAndRef( | 372 need_unref = controller.GetTaskForImageAndRef( |
| 373 another_draw_image, prepare_tiles_id, &another_task); | 373 another_draw_image, prepare_tiles_id, &another_task); |
| 374 EXPECT_TRUE(need_unref); | 374 EXPECT_TRUE(need_unref); |
| 375 EXPECT_TRUE(task.get() == another_task.get()); | 375 EXPECT_TRUE(task.get() == another_task.get()); |
| 376 | 376 |
| 377 controller.UnrefImage(draw_image); | 377 controller.UnrefImage(draw_image); |
| 378 controller.UnrefImage(draw_image); | 378 controller.UnrefImage(draw_image); |
| 379 } | 379 } |
| 380 | 380 |
| 381 TEST(SoftwareImageDecodeControllerTest, | 381 TEST(SoftwareImageDecodeControllerTest, |
| 382 GetTaskForImageSameImageDifferentQuality) { | 382 GetTaskForImageSameImageDifferentQuality) { |
| 383 SoftwareImageDecodeController controller; | 383 SoftwareImageDecodeController controller; |
| 384 skia::RefPtr<SkImage> image = CreateImage(100, 100); | 384 skia::RefPtr<SkImage> image = CreateImage(100, 100); |
| 385 bool is_decomposable = true; | 385 bool is_decomposable = true; |
| 386 uint64_t prepare_tiles_id = 1; | 386 uint64_t prepare_tiles_id = 1; |
| 387 | 387 |
| 388 DrawImage high_quality_draw_image( | 388 DrawImage high_quality_draw_image( |
| 389 image.get(), SkIRect::MakeWH(image->width(), image->height()), | 389 image.get(), SkIRect::MakeWH(image->width(), image->height()), |
| 390 kHigh_SkFilterQuality, | 390 kHigh_SkFilterQuality, |
| 391 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 391 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| 392 scoped_refptr<ImageDecodeTask> high_quality_task; | 392 scoped_refptr<Task> high_quality_task; |
| 393 bool need_unref = controller.GetTaskForImageAndRef( | 393 bool need_unref = controller.GetTaskForImageAndRef( |
| 394 high_quality_draw_image, prepare_tiles_id, &high_quality_task); | 394 high_quality_draw_image, prepare_tiles_id, &high_quality_task); |
| 395 EXPECT_TRUE(need_unref); | 395 EXPECT_TRUE(need_unref); |
| 396 EXPECT_TRUE(high_quality_task); | 396 EXPECT_TRUE(high_quality_task); |
| 397 | 397 |
| 398 DrawImage medium_quality_draw_image( | 398 DrawImage medium_quality_draw_image( |
| 399 image.get(), SkIRect::MakeWH(image->width(), image->height()), | 399 image.get(), SkIRect::MakeWH(image->width(), image->height()), |
| 400 kMedium_SkFilterQuality, | 400 kMedium_SkFilterQuality, |
| 401 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 401 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| 402 scoped_refptr<ImageDecodeTask> medium_quality_task; | 402 scoped_refptr<Task> medium_quality_task; |
| 403 need_unref = controller.GetTaskForImageAndRef( | 403 need_unref = controller.GetTaskForImageAndRef( |
| 404 medium_quality_draw_image, prepare_tiles_id, &medium_quality_task); | 404 medium_quality_draw_image, prepare_tiles_id, &medium_quality_task); |
| 405 // Medium quality isn't handled by the controller, so it won't ref it. Note | 405 // Medium quality isn't handled by the controller, so it won't ref it. Note |
| 406 // that this will change when medium quality is handled and will need to be | 406 // that this will change when medium quality is handled and will need to be |
| 407 // updated. | 407 // updated. |
| 408 EXPECT_FALSE(need_unref); | 408 EXPECT_FALSE(need_unref); |
| 409 EXPECT_TRUE(medium_quality_task); | 409 EXPECT_TRUE(medium_quality_task); |
| 410 EXPECT_TRUE(high_quality_task.get() != medium_quality_task.get()); | 410 EXPECT_TRUE(high_quality_task.get() != medium_quality_task.get()); |
| 411 | 411 |
| 412 DrawImage low_quality_draw_image( | 412 DrawImage low_quality_draw_image( |
| 413 image.get(), SkIRect::MakeWH(image->width(), image->height()), | 413 image.get(), SkIRect::MakeWH(image->width(), image->height()), |
| 414 kLow_SkFilterQuality, | 414 kLow_SkFilterQuality, |
| 415 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 415 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| 416 scoped_refptr<ImageDecodeTask> low_quality_task; | 416 scoped_refptr<Task> low_quality_task; |
| 417 need_unref = controller.GetTaskForImageAndRef( | 417 need_unref = controller.GetTaskForImageAndRef( |
| 418 low_quality_draw_image, prepare_tiles_id, &low_quality_task); | 418 low_quality_draw_image, prepare_tiles_id, &low_quality_task); |
| 419 EXPECT_TRUE(need_unref); | 419 EXPECT_TRUE(need_unref); |
| 420 EXPECT_TRUE(low_quality_task); | 420 EXPECT_TRUE(low_quality_task); |
| 421 EXPECT_TRUE(high_quality_task.get() != low_quality_task.get()); | 421 EXPECT_TRUE(high_quality_task.get() != low_quality_task.get()); |
| 422 EXPECT_TRUE(medium_quality_task.get() != low_quality_task.get()); | 422 EXPECT_TRUE(medium_quality_task.get() != low_quality_task.get()); |
| 423 | 423 |
| 424 controller.UnrefImage(high_quality_draw_image); | 424 controller.UnrefImage(high_quality_draw_image); |
| 425 controller.UnrefImage(low_quality_draw_image); | 425 controller.UnrefImage(low_quality_draw_image); |
| 426 } | 426 } |
| 427 | 427 |
| 428 TEST(SoftwareImageDecodeControllerTest, GetTaskForImageSameImageDifferentSize) { | 428 TEST(SoftwareImageDecodeControllerTest, GetTaskForImageSameImageDifferentSize) { |
| 429 SoftwareImageDecodeController controller; | 429 SoftwareImageDecodeController controller; |
| 430 skia::RefPtr<SkImage> image = CreateImage(100, 100); | 430 skia::RefPtr<SkImage> image = CreateImage(100, 100); |
| 431 bool is_decomposable = true; | 431 bool is_decomposable = true; |
| 432 uint64_t prepare_tiles_id = 1; | 432 uint64_t prepare_tiles_id = 1; |
| 433 SkFilterQuality quality = kHigh_SkFilterQuality; | 433 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 434 | 434 |
| 435 DrawImage half_size_draw_image( | 435 DrawImage half_size_draw_image( |
| 436 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, | 436 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, |
| 437 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 437 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| 438 scoped_refptr<ImageDecodeTask> half_size_task; | 438 scoped_refptr<Task> half_size_task; |
| 439 bool need_unref = controller.GetTaskForImageAndRef( | 439 bool need_unref = controller.GetTaskForImageAndRef( |
| 440 half_size_draw_image, prepare_tiles_id, &half_size_task); | 440 half_size_draw_image, prepare_tiles_id, &half_size_task); |
| 441 EXPECT_TRUE(need_unref); | 441 EXPECT_TRUE(need_unref); |
| 442 EXPECT_TRUE(half_size_task); | 442 EXPECT_TRUE(half_size_task); |
| 443 | 443 |
| 444 DrawImage quarter_size_draw_image( | 444 DrawImage quarter_size_draw_image( |
| 445 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, | 445 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, |
| 446 CreateMatrix(SkSize::Make(0.25f, 0.25f), is_decomposable)); | 446 CreateMatrix(SkSize::Make(0.25f, 0.25f), is_decomposable)); |
| 447 scoped_refptr<ImageDecodeTask> quarter_size_task; | 447 scoped_refptr<Task> quarter_size_task; |
| 448 need_unref = controller.GetTaskForImageAndRef( | 448 need_unref = controller.GetTaskForImageAndRef( |
| 449 quarter_size_draw_image, prepare_tiles_id, &quarter_size_task); | 449 quarter_size_draw_image, prepare_tiles_id, &quarter_size_task); |
| 450 EXPECT_TRUE(need_unref); | 450 EXPECT_TRUE(need_unref); |
| 451 EXPECT_TRUE(quarter_size_task); | 451 EXPECT_TRUE(quarter_size_task); |
| 452 EXPECT_TRUE(half_size_task.get() != quarter_size_task.get()); | 452 EXPECT_TRUE(half_size_task.get() != quarter_size_task.get()); |
| 453 | 453 |
| 454 controller.UnrefImage(half_size_draw_image); | 454 controller.UnrefImage(half_size_draw_image); |
| 455 controller.UnrefImage(quarter_size_draw_image); | 455 controller.UnrefImage(quarter_size_draw_image); |
| 456 } | 456 } |
| 457 | 457 |
| 458 TEST(SoftwareImageDecodeControllerTest, GetTaskForImageDifferentImage) { | 458 TEST(SoftwareImageDecodeControllerTest, GetTaskForImageDifferentImage) { |
| 459 SoftwareImageDecodeController controller; | 459 SoftwareImageDecodeController controller; |
| 460 bool is_decomposable = true; | 460 bool is_decomposable = true; |
| 461 uint64_t prepare_tiles_id = 1; | 461 uint64_t prepare_tiles_id = 1; |
| 462 SkFilterQuality quality = kHigh_SkFilterQuality; | 462 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 463 | 463 |
| 464 skia::RefPtr<SkImage> first_image = CreateImage(100, 100); | 464 skia::RefPtr<SkImage> first_image = CreateImage(100, 100); |
| 465 DrawImage first_draw_image( | 465 DrawImage first_draw_image( |
| 466 first_image.get(), | 466 first_image.get(), |
| 467 SkIRect::MakeWH(first_image->width(), first_image->height()), quality, | 467 SkIRect::MakeWH(first_image->width(), first_image->height()), quality, |
| 468 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 468 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| 469 scoped_refptr<ImageDecodeTask> first_task; | 469 scoped_refptr<Task> first_task; |
| 470 bool need_unref = controller.GetTaskForImageAndRef( | 470 bool need_unref = controller.GetTaskForImageAndRef( |
| 471 first_draw_image, prepare_tiles_id, &first_task); | 471 first_draw_image, prepare_tiles_id, &first_task); |
| 472 EXPECT_TRUE(need_unref); | 472 EXPECT_TRUE(need_unref); |
| 473 EXPECT_TRUE(first_task); | 473 EXPECT_TRUE(first_task); |
| 474 | 474 |
| 475 skia::RefPtr<SkImage> second_image = CreateImage(100, 100); | 475 skia::RefPtr<SkImage> second_image = CreateImage(100, 100); |
| 476 DrawImage second_draw_image( | 476 DrawImage second_draw_image( |
| 477 second_image.get(), | 477 second_image.get(), |
| 478 SkIRect::MakeWH(second_image->width(), second_image->height()), quality, | 478 SkIRect::MakeWH(second_image->width(), second_image->height()), quality, |
| 479 CreateMatrix(SkSize::Make(0.25f, 0.25f), is_decomposable)); | 479 CreateMatrix(SkSize::Make(0.25f, 0.25f), is_decomposable)); |
| 480 scoped_refptr<ImageDecodeTask> second_task; | 480 scoped_refptr<Task> second_task; |
| 481 need_unref = controller.GetTaskForImageAndRef(second_draw_image, | 481 need_unref = controller.GetTaskForImageAndRef(second_draw_image, |
| 482 prepare_tiles_id, &second_task); | 482 prepare_tiles_id, &second_task); |
| 483 EXPECT_TRUE(need_unref); | 483 EXPECT_TRUE(need_unref); |
| 484 EXPECT_TRUE(second_task); | 484 EXPECT_TRUE(second_task); |
| 485 EXPECT_TRUE(first_task.get() != second_task.get()); | 485 EXPECT_TRUE(first_task.get() != second_task.get()); |
| 486 | 486 |
| 487 controller.UnrefImage(first_draw_image); | 487 controller.UnrefImage(first_draw_image); |
| 488 controller.UnrefImage(second_draw_image); | 488 controller.UnrefImage(second_draw_image); |
| 489 } | 489 } |
| 490 | 490 |
| 491 TEST(SoftwareImageDecodeControllerTest, GetTaskForImageAlreadyDecoded) { | 491 TEST(SoftwareImageDecodeControllerTest, GetTaskForImageAlreadyDecoded) { |
| 492 SoftwareImageDecodeController controller; | 492 SoftwareImageDecodeController controller; |
| 493 bool is_decomposable = true; | 493 bool is_decomposable = true; |
| 494 uint64_t prepare_tiles_id = 1; | 494 uint64_t prepare_tiles_id = 1; |
| 495 SkFilterQuality quality = kHigh_SkFilterQuality; | 495 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 496 | 496 |
| 497 skia::RefPtr<SkImage> image = CreateImage(100, 100); | 497 skia::RefPtr<SkImage> image = CreateImage(100, 100); |
| 498 DrawImage draw_image( | 498 DrawImage draw_image( |
| 499 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, | 499 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, |
| 500 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 500 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| 501 scoped_refptr<ImageDecodeTask> task; | 501 scoped_refptr<Task> task; |
| 502 bool need_unref = | 502 bool need_unref = |
| 503 controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, &task); | 503 controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, &task); |
| 504 EXPECT_TRUE(need_unref); | 504 EXPECT_TRUE(need_unref); |
| 505 EXPECT_TRUE(task); | 505 EXPECT_TRUE(task); |
| 506 | 506 |
| 507 task->RunOnWorkerThread(); | 507 task->RunOnWorkerThread(); |
| 508 | 508 |
| 509 scoped_refptr<ImageDecodeTask> another_task; | 509 scoped_refptr<Task> another_task; |
| 510 need_unref = controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, | 510 need_unref = controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, |
| 511 &another_task); | 511 &another_task); |
| 512 EXPECT_TRUE(need_unref); | 512 EXPECT_TRUE(need_unref); |
| 513 EXPECT_FALSE(another_task); | 513 EXPECT_FALSE(another_task); |
| 514 | 514 |
| 515 controller.ImageDecodeTaskCompleted(task.get()); | 515 controller.ImageDecodeTaskCompleted(task.get()); |
| 516 task->DidComplete(); | 516 task->DidComplete(); |
| 517 | 517 |
| 518 controller.UnrefImage(draw_image); | 518 controller.UnrefImage(draw_image); |
| 519 controller.UnrefImage(draw_image); | 519 controller.UnrefImage(draw_image); |
| 520 } | 520 } |
| 521 | 521 |
| 522 TEST(SoftwareImageDecodeControllerTest, GetTaskForImageAlreadyPrerolled) { | 522 TEST(SoftwareImageDecodeControllerTest, GetTaskForImageAlreadyPrerolled) { |
| 523 SoftwareImageDecodeController controller; | 523 SoftwareImageDecodeController controller; |
| 524 bool is_decomposable = true; | 524 bool is_decomposable = true; |
| 525 uint64_t prepare_tiles_id = 1; | 525 uint64_t prepare_tiles_id = 1; |
| 526 SkFilterQuality quality = kLow_SkFilterQuality; | 526 SkFilterQuality quality = kLow_SkFilterQuality; |
| 527 | 527 |
| 528 skia::RefPtr<SkImage> image = CreateImage(100, 100); | 528 skia::RefPtr<SkImage> image = CreateImage(100, 100); |
| 529 DrawImage draw_image( | 529 DrawImage draw_image( |
| 530 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, | 530 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, |
| 531 CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable)); | 531 CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable)); |
| 532 scoped_refptr<ImageDecodeTask> task; | 532 scoped_refptr<Task> task; |
| 533 bool need_unref = | 533 bool need_unref = |
| 534 controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, &task); | 534 controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, &task); |
| 535 EXPECT_TRUE(need_unref); | 535 EXPECT_TRUE(need_unref); |
| 536 EXPECT_TRUE(task); | 536 EXPECT_TRUE(task); |
| 537 | 537 |
| 538 task->RunOnWorkerThread(); | 538 task->RunOnWorkerThread(); |
| 539 | 539 |
| 540 scoped_refptr<ImageDecodeTask> another_task; | 540 scoped_refptr<Task> another_task; |
| 541 need_unref = controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, | 541 need_unref = controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, |
| 542 &another_task); | 542 &another_task); |
| 543 EXPECT_TRUE(need_unref); | 543 EXPECT_TRUE(need_unref); |
| 544 EXPECT_FALSE(another_task); | 544 EXPECT_FALSE(another_task); |
| 545 | 545 |
| 546 controller.ImageDecodeTaskCompleted(task.get()); | 546 controller.ImageDecodeTaskCompleted(task.get()); |
| 547 task->DidComplete(); | 547 task->DidComplete(); |
| 548 | 548 |
| 549 scoped_refptr<ImageDecodeTask> third_task; | 549 scoped_refptr<Task> third_task; |
| 550 need_unref = controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, | 550 need_unref = controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, |
| 551 &third_task); | 551 &third_task); |
| 552 EXPECT_TRUE(need_unref); | 552 EXPECT_TRUE(need_unref); |
| 553 EXPECT_FALSE(third_task); | 553 EXPECT_FALSE(third_task); |
| 554 | 554 |
| 555 controller.UnrefImage(draw_image); | 555 controller.UnrefImage(draw_image); |
| 556 controller.UnrefImage(draw_image); | 556 controller.UnrefImage(draw_image); |
| 557 controller.UnrefImage(draw_image); | 557 controller.UnrefImage(draw_image); |
| 558 } | 558 } |
| 559 | 559 |
| 560 TEST(SoftwareImageDecodeControllerTest, GetTaskForImageCanceledGetsNewTask) { | 560 TEST(SoftwareImageDecodeControllerTest, GetTaskForImageCanceledGetsNewTask) { |
| 561 SoftwareImageDecodeController controller; | 561 SoftwareImageDecodeController controller; |
| 562 bool is_decomposable = true; | 562 bool is_decomposable = true; |
| 563 uint64_t prepare_tiles_id = 1; | 563 uint64_t prepare_tiles_id = 1; |
| 564 SkFilterQuality quality = kHigh_SkFilterQuality; | 564 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 565 | 565 |
| 566 skia::RefPtr<SkImage> image = CreateImage(100, 100); | 566 skia::RefPtr<SkImage> image = CreateImage(100, 100); |
| 567 DrawImage draw_image( | 567 DrawImage draw_image( |
| 568 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, | 568 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, |
| 569 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 569 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| 570 scoped_refptr<ImageDecodeTask> task; | 570 scoped_refptr<Task> task; |
| 571 bool need_unref = | 571 bool need_unref = |
| 572 controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, &task); | 572 controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, &task); |
| 573 EXPECT_TRUE(need_unref); | 573 EXPECT_TRUE(need_unref); |
| 574 EXPECT_TRUE(task); | 574 EXPECT_TRUE(task); |
| 575 scoped_refptr<ImageDecodeTask> another_task; | 575 scoped_refptr<Task> another_task; |
| 576 need_unref = controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, | 576 need_unref = controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, |
| 577 &another_task); | 577 &another_task); |
| 578 EXPECT_TRUE(need_unref); | 578 EXPECT_TRUE(need_unref); |
| 579 EXPECT_TRUE(another_task.get() == task.get()); | 579 EXPECT_TRUE(another_task.get() == task.get()); |
| 580 | 580 |
| 581 // Didn't run the task, complete it (it was canceled). | 581 // Didn't run the task, complete it (it was canceled). |
| 582 controller.ImageDecodeTaskCompleted(task.get()); | 582 controller.ImageDecodeTaskCompleted(task.get()); |
| 583 task->DidComplete(); | 583 task->DidComplete(); |
| 584 | 584 |
| 585 // Fully cancel everything (so the raster would unref things). | 585 // Fully cancel everything (so the raster would unref things). |
| 586 controller.UnrefImage(draw_image); | 586 controller.UnrefImage(draw_image); |
| 587 controller.UnrefImage(draw_image); | 587 controller.UnrefImage(draw_image); |
| 588 | 588 |
| 589 // Here a new task is created. | 589 // Here a new task is created. |
| 590 scoped_refptr<ImageDecodeTask> third_task; | 590 scoped_refptr<Task> third_task; |
| 591 need_unref = controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, | 591 need_unref = controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, |
| 592 &third_task); | 592 &third_task); |
| 593 EXPECT_TRUE(need_unref); | 593 EXPECT_TRUE(need_unref); |
| 594 EXPECT_TRUE(third_task); | 594 EXPECT_TRUE(third_task); |
| 595 EXPECT_FALSE(third_task.get() == task.get()); | 595 EXPECT_FALSE(third_task.get() == task.get()); |
| 596 | 596 |
| 597 controller.UnrefImage(draw_image); | 597 controller.UnrefImage(draw_image); |
| 598 } | 598 } |
| 599 | 599 |
| 600 TEST(SoftwareImageDecodeControllerTest, | 600 TEST(SoftwareImageDecodeControllerTest, |
| 601 GetTaskForImageCanceledWhileReffedGetsNewTask) { | 601 GetTaskForImageCanceledWhileReffedGetsNewTask) { |
| 602 SoftwareImageDecodeController controller; | 602 SoftwareImageDecodeController controller; |
| 603 bool is_decomposable = true; | 603 bool is_decomposable = true; |
| 604 uint64_t prepare_tiles_id = 1; | 604 uint64_t prepare_tiles_id = 1; |
| 605 SkFilterQuality quality = kHigh_SkFilterQuality; | 605 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 606 | 606 |
| 607 skia::RefPtr<SkImage> image = CreateImage(100, 100); | 607 skia::RefPtr<SkImage> image = CreateImage(100, 100); |
| 608 DrawImage draw_image( | 608 DrawImage draw_image( |
| 609 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, | 609 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, |
| 610 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 610 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| 611 scoped_refptr<ImageDecodeTask> task; | 611 scoped_refptr<Task> task; |
| 612 bool need_unref = | 612 bool need_unref = |
| 613 controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, &task); | 613 controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, &task); |
| 614 EXPECT_TRUE(need_unref); | 614 EXPECT_TRUE(need_unref); |
| 615 EXPECT_TRUE(task); | 615 EXPECT_TRUE(task); |
| 616 | 616 |
| 617 scoped_refptr<ImageDecodeTask> another_task; | 617 scoped_refptr<Task> another_task; |
| 618 need_unref = controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, | 618 need_unref = controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, |
| 619 &another_task); | 619 &another_task); |
| 620 EXPECT_TRUE(need_unref); | 620 EXPECT_TRUE(need_unref); |
| 621 EXPECT_TRUE(another_task.get() == task.get()); | 621 EXPECT_TRUE(another_task.get() == task.get()); |
| 622 | 622 |
| 623 // Didn't run the task, complete it (it was canceled). | 623 // Didn't run the task, complete it (it was canceled). |
| 624 controller.ImageDecodeTaskCompleted(task.get()); | 624 controller.ImageDecodeTaskCompleted(task.get()); |
| 625 task->DidComplete(); | 625 task->DidComplete(); |
| 626 | 626 |
| 627 // Note that here, everything is reffed, but a new task is created. This is | 627 // Note that here, everything is reffed, but a new task is created. This is |
| 628 // possible with repeated schedule/cancel operations. | 628 // possible with repeated schedule/cancel operations. |
| 629 scoped_refptr<ImageDecodeTask> third_task; | 629 scoped_refptr<Task> third_task; |
| 630 need_unref = controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, | 630 need_unref = controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, |
| 631 &third_task); | 631 &third_task); |
| 632 EXPECT_TRUE(need_unref); | 632 EXPECT_TRUE(need_unref); |
| 633 EXPECT_TRUE(third_task); | 633 EXPECT_TRUE(third_task); |
| 634 EXPECT_FALSE(third_task.get() == task.get()); | 634 EXPECT_FALSE(third_task.get() == task.get()); |
| 635 | 635 |
| 636 // 3 Unrefs! | 636 // 3 Unrefs! |
| 637 controller.UnrefImage(draw_image); | 637 controller.UnrefImage(draw_image); |
| 638 controller.UnrefImage(draw_image); | 638 controller.UnrefImage(draw_image); |
| 639 controller.UnrefImage(draw_image); | 639 controller.UnrefImage(draw_image); |
| 640 } | 640 } |
| 641 | 641 |
| 642 TEST(SoftwareImageDecodeControllerTest, GetDecodedImageForDraw) { | 642 TEST(SoftwareImageDecodeControllerTest, GetDecodedImageForDraw) { |
| 643 SoftwareImageDecodeController controller; | 643 SoftwareImageDecodeController controller; |
| 644 bool is_decomposable = true; | 644 bool is_decomposable = true; |
| 645 uint64_t prepare_tiles_id = 1; | 645 uint64_t prepare_tiles_id = 1; |
| 646 SkFilterQuality quality = kHigh_SkFilterQuality; | 646 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 647 | 647 |
| 648 skia::RefPtr<SkImage> image = CreateImage(100, 100); | 648 skia::RefPtr<SkImage> image = CreateImage(100, 100); |
| 649 DrawImage draw_image( | 649 DrawImage draw_image( |
| 650 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, | 650 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, |
| 651 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 651 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| 652 scoped_refptr<ImageDecodeTask> task; | 652 scoped_refptr<Task> task; |
| 653 bool need_unref = | 653 bool need_unref = |
| 654 controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, &task); | 654 controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, &task); |
| 655 EXPECT_TRUE(need_unref); | 655 EXPECT_TRUE(need_unref); |
| 656 EXPECT_TRUE(task); | 656 EXPECT_TRUE(task); |
| 657 | 657 |
| 658 task->RunOnWorkerThread(); | 658 task->RunOnWorkerThread(); |
| 659 | 659 |
| 660 controller.ImageDecodeTaskCompleted(task.get()); | 660 controller.ImageDecodeTaskCompleted(task.get()); |
| 661 task->DidComplete(); | 661 task->DidComplete(); |
| 662 | 662 |
| (...skipping 16 matching lines...) Expand all Loading... |
| 679 GetDecodedImageForDrawWithNonContainedSrcRect) { | 679 GetDecodedImageForDrawWithNonContainedSrcRect) { |
| 680 SoftwareImageDecodeController controller; | 680 SoftwareImageDecodeController controller; |
| 681 bool is_decomposable = true; | 681 bool is_decomposable = true; |
| 682 uint64_t prepare_tiles_id = 1; | 682 uint64_t prepare_tiles_id = 1; |
| 683 SkFilterQuality quality = kHigh_SkFilterQuality; | 683 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 684 | 684 |
| 685 skia::RefPtr<SkImage> image = CreateImage(100, 100); | 685 skia::RefPtr<SkImage> image = CreateImage(100, 100); |
| 686 DrawImage draw_image( | 686 DrawImage draw_image( |
| 687 image.get(), SkIRect::MakeXYWH(20, 30, image->width(), image->height()), | 687 image.get(), SkIRect::MakeXYWH(20, 30, image->width(), image->height()), |
| 688 quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 688 quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| 689 scoped_refptr<ImageDecodeTask> task; | 689 scoped_refptr<Task> task; |
| 690 bool need_unref = | 690 bool need_unref = |
| 691 controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, &task); | 691 controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, &task); |
| 692 EXPECT_TRUE(need_unref); | 692 EXPECT_TRUE(need_unref); |
| 693 EXPECT_TRUE(task); | 693 EXPECT_TRUE(task); |
| 694 | 694 |
| 695 task->RunOnWorkerThread(); | 695 task->RunOnWorkerThread(); |
| 696 | 696 |
| 697 controller.ImageDecodeTaskCompleted(task.get()); | 697 controller.ImageDecodeTaskCompleted(task.get()); |
| 698 task->DidComplete(); | 698 task->DidComplete(); |
| 699 | 699 |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 783 controller.GetDecodedImageForDraw(draw_image); | 783 controller.GetDecodedImageForDraw(draw_image); |
| 784 EXPECT_TRUE(decoded_draw_image.image()); | 784 EXPECT_TRUE(decoded_draw_image.image()); |
| 785 EXPECT_EQ(50, decoded_draw_image.image()->width()); | 785 EXPECT_EQ(50, decoded_draw_image.image()->width()); |
| 786 EXPECT_EQ(50, decoded_draw_image.image()->height()); | 786 EXPECT_EQ(50, decoded_draw_image.image()->height()); |
| 787 EXPECT_FLOAT_EQ(0.5f, decoded_draw_image.scale_adjustment().width()); | 787 EXPECT_FLOAT_EQ(0.5f, decoded_draw_image.scale_adjustment().width()); |
| 788 EXPECT_FLOAT_EQ(0.5f, decoded_draw_image.scale_adjustment().height()); | 788 EXPECT_FLOAT_EQ(0.5f, decoded_draw_image.scale_adjustment().height()); |
| 789 EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality()); | 789 EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality()); |
| 790 EXPECT_FALSE(decoded_draw_image.is_scale_adjustment_identity()); | 790 EXPECT_FALSE(decoded_draw_image.is_scale_adjustment_identity()); |
| 791 EXPECT_TRUE(decoded_draw_image.is_at_raster_decode()); | 791 EXPECT_TRUE(decoded_draw_image.is_at_raster_decode()); |
| 792 | 792 |
| 793 scoped_refptr<ImageDecodeTask> task; | 793 scoped_refptr<Task> task; |
| 794 bool need_unref = | 794 bool need_unref = |
| 795 controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, &task); | 795 controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, &task); |
| 796 EXPECT_TRUE(need_unref); | 796 EXPECT_TRUE(need_unref); |
| 797 EXPECT_TRUE(task); | 797 EXPECT_TRUE(task); |
| 798 | 798 |
| 799 task->RunOnWorkerThread(); | 799 task->RunOnWorkerThread(); |
| 800 | 800 |
| 801 controller.ImageDecodeTaskCompleted(task.get()); | 801 controller.ImageDecodeTaskCompleted(task.get()); |
| 802 task->DidComplete(); | 802 task->DidComplete(); |
| 803 | 803 |
| (...skipping 28 matching lines...) Expand all Loading... |
| 832 controller.GetDecodedImageForDraw(draw_image); | 832 controller.GetDecodedImageForDraw(draw_image); |
| 833 EXPECT_TRUE(decoded_draw_image.image()); | 833 EXPECT_TRUE(decoded_draw_image.image()); |
| 834 EXPECT_EQ(50, decoded_draw_image.image()->width()); | 834 EXPECT_EQ(50, decoded_draw_image.image()->width()); |
| 835 EXPECT_EQ(50, decoded_draw_image.image()->height()); | 835 EXPECT_EQ(50, decoded_draw_image.image()->height()); |
| 836 EXPECT_FLOAT_EQ(0.5f, decoded_draw_image.scale_adjustment().width()); | 836 EXPECT_FLOAT_EQ(0.5f, decoded_draw_image.scale_adjustment().width()); |
| 837 EXPECT_FLOAT_EQ(0.5f, decoded_draw_image.scale_adjustment().height()); | 837 EXPECT_FLOAT_EQ(0.5f, decoded_draw_image.scale_adjustment().height()); |
| 838 EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality()); | 838 EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality()); |
| 839 EXPECT_FALSE(decoded_draw_image.is_scale_adjustment_identity()); | 839 EXPECT_FALSE(decoded_draw_image.is_scale_adjustment_identity()); |
| 840 EXPECT_TRUE(decoded_draw_image.is_at_raster_decode()); | 840 EXPECT_TRUE(decoded_draw_image.is_at_raster_decode()); |
| 841 | 841 |
| 842 scoped_refptr<ImageDecodeTask> task; | 842 scoped_refptr<Task> task; |
| 843 bool need_unref = | 843 bool need_unref = |
| 844 controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, &task); | 844 controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, &task); |
| 845 EXPECT_TRUE(need_unref); | 845 EXPECT_TRUE(need_unref); |
| 846 EXPECT_TRUE(task); | 846 EXPECT_TRUE(task); |
| 847 | 847 |
| 848 // If we finish the draw here, then we will use it for the locked decode | 848 // If we finish the draw here, then we will use it for the locked decode |
| 849 // instead of decoding again. | 849 // instead of decoding again. |
| 850 controller.DrawWithImageFinished(draw_image, decoded_draw_image); | 850 controller.DrawWithImageFinished(draw_image, decoded_draw_image); |
| 851 | 851 |
| 852 task->RunOnWorkerThread(); | 852 task->RunOnWorkerThread(); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 870 SoftwareImageDecodeController controller; | 870 SoftwareImageDecodeController controller; |
| 871 bool is_decomposable = true; | 871 bool is_decomposable = true; |
| 872 uint64_t prepare_tiles_id = 1; | 872 uint64_t prepare_tiles_id = 1; |
| 873 SkFilterQuality quality = kHigh_SkFilterQuality; | 873 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 874 | 874 |
| 875 skia::RefPtr<SkImage> image = CreateImage(100, 100); | 875 skia::RefPtr<SkImage> image = CreateImage(100, 100); |
| 876 DrawImage draw_image( | 876 DrawImage draw_image( |
| 877 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, | 877 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, |
| 878 CreateMatrix(SkSize::Make(0.f, 0.f), is_decomposable)); | 878 CreateMatrix(SkSize::Make(0.f, 0.f), is_decomposable)); |
| 879 | 879 |
| 880 scoped_refptr<ImageDecodeTask> task; | 880 scoped_refptr<Task> task; |
| 881 bool need_unref = | 881 bool need_unref = |
| 882 controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, &task); | 882 controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, &task); |
| 883 EXPECT_FALSE(task); | 883 EXPECT_FALSE(task); |
| 884 EXPECT_FALSE(need_unref); | 884 EXPECT_FALSE(need_unref); |
| 885 | 885 |
| 886 DecodedDrawImage decoded_draw_image = | 886 DecodedDrawImage decoded_draw_image = |
| 887 controller.GetDecodedImageForDraw(draw_image); | 887 controller.GetDecodedImageForDraw(draw_image); |
| 888 EXPECT_FALSE(decoded_draw_image.image()); | 888 EXPECT_FALSE(decoded_draw_image.image()); |
| 889 | 889 |
| 890 controller.DrawWithImageFinished(draw_image, decoded_draw_image); | 890 controller.DrawWithImageFinished(draw_image, decoded_draw_image); |
| 891 } | 891 } |
| 892 | 892 |
| 893 TEST(SoftwareImageDecodeControllerTest, NonOverlappingSrcRectImagesAreSkipped) { | 893 TEST(SoftwareImageDecodeControllerTest, NonOverlappingSrcRectImagesAreSkipped) { |
| 894 SoftwareImageDecodeController controller; | 894 SoftwareImageDecodeController controller; |
| 895 bool is_decomposable = true; | 895 bool is_decomposable = true; |
| 896 uint64_t prepare_tiles_id = 1; | 896 uint64_t prepare_tiles_id = 1; |
| 897 SkFilterQuality quality = kHigh_SkFilterQuality; | 897 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 898 | 898 |
| 899 skia::RefPtr<SkImage> image = CreateImage(100, 100); | 899 skia::RefPtr<SkImage> image = CreateImage(100, 100); |
| 900 DrawImage draw_image( | 900 DrawImage draw_image( |
| 901 image.get(), SkIRect::MakeXYWH(150, 150, image->width(), image->height()), | 901 image.get(), SkIRect::MakeXYWH(150, 150, image->width(), image->height()), |
| 902 quality, CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable)); | 902 quality, CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable)); |
| 903 | 903 |
| 904 scoped_refptr<ImageDecodeTask> task; | 904 scoped_refptr<Task> task; |
| 905 bool need_unref = | 905 bool need_unref = |
| 906 controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, &task); | 906 controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, &task); |
| 907 EXPECT_FALSE(task); | 907 EXPECT_FALSE(task); |
| 908 EXPECT_FALSE(need_unref); | 908 EXPECT_FALSE(need_unref); |
| 909 | 909 |
| 910 DecodedDrawImage decoded_draw_image = | 910 DecodedDrawImage decoded_draw_image = |
| 911 controller.GetDecodedImageForDraw(draw_image); | 911 controller.GetDecodedImageForDraw(draw_image); |
| 912 EXPECT_FALSE(decoded_draw_image.image()); | 912 EXPECT_FALSE(decoded_draw_image.image()); |
| 913 | 913 |
| 914 controller.DrawWithImageFinished(draw_image, decoded_draw_image); | 914 controller.DrawWithImageFinished(draw_image, decoded_draw_image); |
| 915 } | 915 } |
| 916 | 916 |
| 917 TEST(SoftwareImageDecodeControllerTest, LowQualityFilterIsHandled) { | 917 TEST(SoftwareImageDecodeControllerTest, LowQualityFilterIsHandled) { |
| 918 SoftwareImageDecodeController controller; | 918 SoftwareImageDecodeController controller; |
| 919 bool is_decomposable = true; | 919 bool is_decomposable = true; |
| 920 uint64_t prepare_tiles_id = 1; | 920 uint64_t prepare_tiles_id = 1; |
| 921 SkFilterQuality quality = kLow_SkFilterQuality; | 921 SkFilterQuality quality = kLow_SkFilterQuality; |
| 922 | 922 |
| 923 skia::RefPtr<SkImage> image = CreateImage(100, 100); | 923 skia::RefPtr<SkImage> image = CreateImage(100, 100); |
| 924 DrawImage draw_image( | 924 DrawImage draw_image( |
| 925 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, | 925 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, |
| 926 CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable)); | 926 CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable)); |
| 927 | 927 |
| 928 scoped_refptr<ImageDecodeTask> task; | 928 scoped_refptr<Task> task; |
| 929 bool need_unref = | 929 bool need_unref = |
| 930 controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, &task); | 930 controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, &task); |
| 931 EXPECT_TRUE(task); | 931 EXPECT_TRUE(task); |
| 932 EXPECT_TRUE(need_unref); | 932 EXPECT_TRUE(need_unref); |
| 933 | 933 |
| 934 DecodedDrawImage decoded_draw_image = | 934 DecodedDrawImage decoded_draw_image = |
| 935 controller.GetDecodedImageForDraw(draw_image); | 935 controller.GetDecodedImageForDraw(draw_image); |
| 936 EXPECT_TRUE(decoded_draw_image.image()); | 936 EXPECT_TRUE(decoded_draw_image.image()); |
| 937 // If we decoded the image and cached it, it would be stored in a different | 937 // If we decoded the image and cached it, it would be stored in a different |
| 938 // SkImage object. | 938 // SkImage object. |
| 939 EXPECT_TRUE(decoded_draw_image.image() != image.get()); | 939 EXPECT_TRUE(decoded_draw_image.image() != image.get()); |
| 940 | 940 |
| 941 controller.DrawWithImageFinished(draw_image, decoded_draw_image); | 941 controller.DrawWithImageFinished(draw_image, decoded_draw_image); |
| 942 controller.UnrefImage(draw_image); | 942 controller.UnrefImage(draw_image); |
| 943 } | 943 } |
| 944 | 944 |
| 945 TEST(SoftwareImageDecodeControllerTest, LowQualityScaledSubrectIsHandled) { | 945 TEST(SoftwareImageDecodeControllerTest, LowQualityScaledSubrectIsHandled) { |
| 946 SoftwareImageDecodeController controller; | 946 SoftwareImageDecodeController controller; |
| 947 bool is_decomposable = true; | 947 bool is_decomposable = true; |
| 948 uint64_t prepare_tiles_id = 1; | 948 uint64_t prepare_tiles_id = 1; |
| 949 SkFilterQuality quality = kLow_SkFilterQuality; | 949 SkFilterQuality quality = kLow_SkFilterQuality; |
| 950 | 950 |
| 951 skia::RefPtr<SkImage> image = CreateImage(100, 100); | 951 skia::RefPtr<SkImage> image = CreateImage(100, 100); |
| 952 DrawImage draw_image(image.get(), SkIRect::MakeXYWH(10, 10, 80, 80), quality, | 952 DrawImage draw_image(image.get(), SkIRect::MakeXYWH(10, 10, 80, 80), quality, |
| 953 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 953 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| 954 | 954 |
| 955 scoped_refptr<ImageDecodeTask> task; | 955 scoped_refptr<Task> task; |
| 956 bool need_unref = | 956 bool need_unref = |
| 957 controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, &task); | 957 controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, &task); |
| 958 EXPECT_TRUE(task); | 958 EXPECT_TRUE(task); |
| 959 EXPECT_TRUE(need_unref); | 959 EXPECT_TRUE(need_unref); |
| 960 | 960 |
| 961 DecodedDrawImage decoded_draw_image = | 961 DecodedDrawImage decoded_draw_image = |
| 962 controller.GetDecodedImageForDraw(draw_image); | 962 controller.GetDecodedImageForDraw(draw_image); |
| 963 EXPECT_TRUE(decoded_draw_image.image()); | 963 EXPECT_TRUE(decoded_draw_image.image()); |
| 964 // If we decoded the image and cached it, it would be stored in a different | 964 // If we decoded the image and cached it, it would be stored in a different |
| 965 // SkImage object. | 965 // SkImage object. |
| 966 EXPECT_TRUE(decoded_draw_image.image() != image.get()); | 966 EXPECT_TRUE(decoded_draw_image.image() != image.get()); |
| 967 EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality()); | 967 EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality()); |
| 968 EXPECT_TRUE(decoded_draw_image.is_scale_adjustment_identity()); | 968 EXPECT_TRUE(decoded_draw_image.is_scale_adjustment_identity()); |
| 969 | 969 |
| 970 controller.DrawWithImageFinished(draw_image, decoded_draw_image); | 970 controller.DrawWithImageFinished(draw_image, decoded_draw_image); |
| 971 controller.UnrefImage(draw_image); | 971 controller.UnrefImage(draw_image); |
| 972 } | 972 } |
| 973 | 973 |
| 974 TEST(SoftwareImageDecodeControllerTest, NoneQualityScaledSubrectIsHandled) { | 974 TEST(SoftwareImageDecodeControllerTest, NoneQualityScaledSubrectIsHandled) { |
| 975 SoftwareImageDecodeController controller; | 975 SoftwareImageDecodeController controller; |
| 976 bool is_decomposable = true; | 976 bool is_decomposable = true; |
| 977 uint64_t prepare_tiles_id = 1; | 977 uint64_t prepare_tiles_id = 1; |
| 978 SkFilterQuality quality = kNone_SkFilterQuality; | 978 SkFilterQuality quality = kNone_SkFilterQuality; |
| 979 | 979 |
| 980 skia::RefPtr<SkImage> image = CreateImage(100, 100); | 980 skia::RefPtr<SkImage> image = CreateImage(100, 100); |
| 981 DrawImage draw_image(image.get(), SkIRect::MakeXYWH(10, 10, 80, 80), quality, | 981 DrawImage draw_image(image.get(), SkIRect::MakeXYWH(10, 10, 80, 80), quality, |
| 982 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 982 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| 983 | 983 |
| 984 scoped_refptr<ImageDecodeTask> task; | 984 scoped_refptr<Task> task; |
| 985 bool need_unref = | 985 bool need_unref = |
| 986 controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, &task); | 986 controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, &task); |
| 987 EXPECT_TRUE(task); | 987 EXPECT_TRUE(task); |
| 988 EXPECT_TRUE(need_unref); | 988 EXPECT_TRUE(need_unref); |
| 989 | 989 |
| 990 DecodedDrawImage decoded_draw_image = | 990 DecodedDrawImage decoded_draw_image = |
| 991 controller.GetDecodedImageForDraw(draw_image); | 991 controller.GetDecodedImageForDraw(draw_image); |
| 992 EXPECT_TRUE(decoded_draw_image.image()); | 992 EXPECT_TRUE(decoded_draw_image.image()); |
| 993 // If we decoded the image and cached it, it would be stored in a different | 993 // If we decoded the image and cached it, it would be stored in a different |
| 994 // SkImage object. | 994 // SkImage object. |
| 995 EXPECT_TRUE(decoded_draw_image.image() != image.get()); | 995 EXPECT_TRUE(decoded_draw_image.image() != image.get()); |
| 996 EXPECT_EQ(kNone_SkFilterQuality, decoded_draw_image.filter_quality()); | 996 EXPECT_EQ(kNone_SkFilterQuality, decoded_draw_image.filter_quality()); |
| 997 EXPECT_TRUE(decoded_draw_image.is_scale_adjustment_identity()); | 997 EXPECT_TRUE(decoded_draw_image.is_scale_adjustment_identity()); |
| 998 | 998 |
| 999 controller.DrawWithImageFinished(draw_image, decoded_draw_image); | 999 controller.DrawWithImageFinished(draw_image, decoded_draw_image); |
| 1000 controller.UnrefImage(draw_image); | 1000 controller.UnrefImage(draw_image); |
| 1001 } | 1001 } |
| 1002 } // namespace | 1002 } // namespace |
| 1003 } // namespace cc | 1003 } // namespace cc |
| OLD | NEW |