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 |