Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(101)

Side by Side Diff: cc/tiles/software_image_decode_controller_unittest.cc

Issue 1997743002: cc: Implement test task runner for tests. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@remove_schedule_complete
Patch Set: extended to SoftwareImageDecodeControllerTest Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 "cc/raster/tile_task.h" 8 #include "cc/test/simple_task_runner.h"
9 #include "testing/gtest/include/gtest/gtest.h" 9 #include "testing/gtest/include/gtest/gtest.h"
10 #include "third_party/skia/include/core/SkRefCnt.h" 10 #include "third_party/skia/include/core/SkRefCnt.h"
11 11
12 namespace cc { 12 namespace cc {
13 namespace { 13 namespace {
14 14
15 sk_sp<SkImage> CreateImage(int width, int height) { 15 sk_sp<SkImage> CreateImage(int width, int height) {
16 SkBitmap bitmap; 16 SkBitmap bitmap;
17 bitmap.allocPixels(SkImageInfo::MakeN32Premul(width, height)); 17 bitmap.allocPixels(SkImageInfo::MakeN32Premul(width, height));
18 return SkImage::MakeFromBitmap(bitmap); 18 return SkImage::MakeFromBitmap(bitmap);
(...skipping 348 matching lines...) Expand 10 before | Expand all | Expand 10 after
367 367
368 DrawImage another_draw_image( 368 DrawImage another_draw_image(
369 image, SkIRect::MakeWH(image->width(), image->height()), quality, 369 image, 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<TileTask> another_task; 371 scoped_refptr<TileTask> another_task;
372 need_unref = controller.GetTaskForImageAndRef( 372 need_unref = controller.GetTaskForImageAndRef(
373 another_draw_image, ImageDecodeController::TracingInfo(), &another_task); 373 another_draw_image, ImageDecodeController::TracingInfo(), &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 SimpleTaskRunner::ProcessTask(task.get());
378
377 controller.UnrefImage(draw_image); 379 controller.UnrefImage(draw_image);
378 controller.UnrefImage(draw_image); 380 controller.UnrefImage(draw_image);
379 } 381 }
380 382
381 TEST(SoftwareImageDecodeControllerTest, 383 TEST(SoftwareImageDecodeControllerTest,
382 GetTaskForImageSameImageDifferentQuality) { 384 GetTaskForImageSameImageDifferentQuality) {
383 SoftwareImageDecodeController controller; 385 SoftwareImageDecodeController controller;
384 sk_sp<SkImage> image = CreateImage(100, 100); 386 sk_sp<SkImage> image = CreateImage(100, 100);
385 bool is_decomposable = true; 387 bool is_decomposable = true;
386 388
(...skipping 29 matching lines...) Expand all
416 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); 418 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable));
417 scoped_refptr<TileTask> low_quality_task; 419 scoped_refptr<TileTask> low_quality_task;
418 need_unref = controller.GetTaskForImageAndRef( 420 need_unref = controller.GetTaskForImageAndRef(
419 low_quality_draw_image, ImageDecodeController::TracingInfo(), 421 low_quality_draw_image, ImageDecodeController::TracingInfo(),
420 &low_quality_task); 422 &low_quality_task);
421 EXPECT_TRUE(need_unref); 423 EXPECT_TRUE(need_unref);
422 EXPECT_TRUE(low_quality_task); 424 EXPECT_TRUE(low_quality_task);
423 EXPECT_TRUE(high_quality_task.get() != low_quality_task.get()); 425 EXPECT_TRUE(high_quality_task.get() != low_quality_task.get());
424 EXPECT_TRUE(medium_quality_task.get() != low_quality_task.get()); 426 EXPECT_TRUE(medium_quality_task.get() != low_quality_task.get());
425 427
428 SimpleTaskRunner::ProcessTask(high_quality_task.get());
429 SimpleTaskRunner::ProcessTask(medium_quality_task.get());
430 SimpleTaskRunner::ProcessTask(low_quality_task.get());
431
426 controller.UnrefImage(high_quality_draw_image); 432 controller.UnrefImage(high_quality_draw_image);
427 controller.UnrefImage(low_quality_draw_image); 433 controller.UnrefImage(low_quality_draw_image);
428 } 434 }
429 435
430 TEST(SoftwareImageDecodeControllerTest, GetTaskForImageSameImageDifferentSize) { 436 TEST(SoftwareImageDecodeControllerTest, GetTaskForImageSameImageDifferentSize) {
431 SoftwareImageDecodeController controller; 437 SoftwareImageDecodeController controller;
432 sk_sp<SkImage> image = CreateImage(100, 100); 438 sk_sp<SkImage> image = CreateImage(100, 100);
433 bool is_decomposable = true; 439 bool is_decomposable = true;
434 SkFilterQuality quality = kHigh_SkFilterQuality; 440 SkFilterQuality quality = kHigh_SkFilterQuality;
435 441
(...skipping 11 matching lines...) Expand all
447 image, SkIRect::MakeWH(image->width(), image->height()), quality, 453 image, SkIRect::MakeWH(image->width(), image->height()), quality,
448 CreateMatrix(SkSize::Make(0.25f, 0.25f), is_decomposable)); 454 CreateMatrix(SkSize::Make(0.25f, 0.25f), is_decomposable));
449 scoped_refptr<TileTask> quarter_size_task; 455 scoped_refptr<TileTask> quarter_size_task;
450 need_unref = controller.GetTaskForImageAndRef( 456 need_unref = controller.GetTaskForImageAndRef(
451 quarter_size_draw_image, ImageDecodeController::TracingInfo(), 457 quarter_size_draw_image, ImageDecodeController::TracingInfo(),
452 &quarter_size_task); 458 &quarter_size_task);
453 EXPECT_TRUE(need_unref); 459 EXPECT_TRUE(need_unref);
454 EXPECT_TRUE(quarter_size_task); 460 EXPECT_TRUE(quarter_size_task);
455 EXPECT_TRUE(half_size_task.get() != quarter_size_task.get()); 461 EXPECT_TRUE(half_size_task.get() != quarter_size_task.get());
456 462
463 SimpleTaskRunner::ProcessTask(half_size_task.get());
464 SimpleTaskRunner::ProcessTask(quarter_size_task.get());
465
457 controller.UnrefImage(half_size_draw_image); 466 controller.UnrefImage(half_size_draw_image);
458 controller.UnrefImage(quarter_size_draw_image); 467 controller.UnrefImage(quarter_size_draw_image);
459 } 468 }
460 469
461 TEST(SoftwareImageDecodeControllerTest, GetTaskForImageDifferentImage) { 470 TEST(SoftwareImageDecodeControllerTest, GetTaskForImageDifferentImage) {
462 SoftwareImageDecodeController controller; 471 SoftwareImageDecodeController controller;
463 bool is_decomposable = true; 472 bool is_decomposable = true;
464 SkFilterQuality quality = kHigh_SkFilterQuality; 473 SkFilterQuality quality = kHigh_SkFilterQuality;
465 474
466 sk_sp<SkImage> first_image = CreateImage(100, 100); 475 sk_sp<SkImage> first_image = CreateImage(100, 100);
(...skipping 11 matching lines...) Expand all
478 second_image, 487 second_image,
479 SkIRect::MakeWH(second_image->width(), second_image->height()), quality, 488 SkIRect::MakeWH(second_image->width(), second_image->height()), quality,
480 CreateMatrix(SkSize::Make(0.25f, 0.25f), is_decomposable)); 489 CreateMatrix(SkSize::Make(0.25f, 0.25f), is_decomposable));
481 scoped_refptr<TileTask> second_task; 490 scoped_refptr<TileTask> second_task;
482 need_unref = controller.GetTaskForImageAndRef( 491 need_unref = controller.GetTaskForImageAndRef(
483 second_draw_image, ImageDecodeController::TracingInfo(), &second_task); 492 second_draw_image, ImageDecodeController::TracingInfo(), &second_task);
484 EXPECT_TRUE(need_unref); 493 EXPECT_TRUE(need_unref);
485 EXPECT_TRUE(second_task); 494 EXPECT_TRUE(second_task);
486 EXPECT_TRUE(first_task.get() != second_task.get()); 495 EXPECT_TRUE(first_task.get() != second_task.get());
487 496
497 SimpleTaskRunner::ProcessTask(first_task.get());
498 SimpleTaskRunner::ProcessTask(second_task.get());
499
488 controller.UnrefImage(first_draw_image); 500 controller.UnrefImage(first_draw_image);
489 controller.UnrefImage(second_draw_image); 501 controller.UnrefImage(second_draw_image);
490 } 502 }
491 503
492 TEST(SoftwareImageDecodeControllerTest, GetTaskForImageAlreadyDecoded) { 504 TEST(SoftwareImageDecodeControllerTest, GetTaskForImageAlreadyDecoded) {
493 SoftwareImageDecodeController controller; 505 SoftwareImageDecodeController controller;
494 bool is_decomposable = true; 506 bool is_decomposable = true;
495 SkFilterQuality quality = kHigh_SkFilterQuality; 507 SkFilterQuality quality = kHigh_SkFilterQuality;
496 508
497 sk_sp<SkImage> image = CreateImage(100, 100); 509 sk_sp<SkImage> image = CreateImage(100, 100);
498 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 510 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
499 quality, 511 quality,
500 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); 512 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable));
501 scoped_refptr<TileTask> task; 513 scoped_refptr<TileTask> task;
502 bool need_unref = controller.GetTaskForImageAndRef( 514 bool need_unref = controller.GetTaskForImageAndRef(
503 draw_image, ImageDecodeController::TracingInfo(), &task); 515 draw_image, ImageDecodeController::TracingInfo(), &task);
504 EXPECT_TRUE(need_unref); 516 EXPECT_TRUE(need_unref);
505 EXPECT_TRUE(task); 517 EXPECT_TRUE(task);
506 518
507 // TODO(prashant.n): Implement proper task life cycle. crbug.com/599863. 519 SimpleTaskRunner::ScheduleTask(task.get());
508 task->RunOnWorkerThread(); 520 SimpleTaskRunner::RunTask(task.get());
509 521
510 scoped_refptr<TileTask> another_task; 522 scoped_refptr<TileTask> another_task;
511 need_unref = controller.GetTaskForImageAndRef( 523 need_unref = controller.GetTaskForImageAndRef(
512 draw_image, ImageDecodeController::TracingInfo(), &another_task); 524 draw_image, ImageDecodeController::TracingInfo(), &another_task);
513 EXPECT_TRUE(need_unref); 525 EXPECT_TRUE(need_unref);
514 EXPECT_FALSE(another_task); 526 EXPECT_FALSE(another_task);
515 527
516 task->OnTaskCompleted(); 528 SimpleTaskRunner::CompleteTask(task.get());
517 529
518 controller.UnrefImage(draw_image); 530 controller.UnrefImage(draw_image);
519 controller.UnrefImage(draw_image); 531 controller.UnrefImage(draw_image);
520 } 532 }
521 533
522 TEST(SoftwareImageDecodeControllerTest, GetTaskForImageAlreadyPrerolled) { 534 TEST(SoftwareImageDecodeControllerTest, GetTaskForImageAlreadyPrerolled) {
523 SoftwareImageDecodeController controller; 535 SoftwareImageDecodeController controller;
524 bool is_decomposable = true; 536 bool is_decomposable = true;
525 SkFilterQuality quality = kLow_SkFilterQuality; 537 SkFilterQuality quality = kLow_SkFilterQuality;
526 538
527 sk_sp<SkImage> image = CreateImage(100, 100); 539 sk_sp<SkImage> image = CreateImage(100, 100);
528 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 540 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
529 quality, 541 quality,
530 CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable)); 542 CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable));
531 scoped_refptr<TileTask> task; 543 scoped_refptr<TileTask> task;
532 bool need_unref = controller.GetTaskForImageAndRef( 544 bool need_unref = controller.GetTaskForImageAndRef(
533 draw_image, ImageDecodeController::TracingInfo(), &task); 545 draw_image, ImageDecodeController::TracingInfo(), &task);
534 EXPECT_TRUE(need_unref); 546 EXPECT_TRUE(need_unref);
535 EXPECT_TRUE(task); 547 EXPECT_TRUE(task);
536 548
537 task->RunOnWorkerThread(); 549 SimpleTaskRunner::ScheduleTask(task.get());
550 SimpleTaskRunner::RunTask(task.get());
538 551
539 scoped_refptr<TileTask> another_task; 552 scoped_refptr<TileTask> another_task;
540 need_unref = controller.GetTaskForImageAndRef( 553 need_unref = controller.GetTaskForImageAndRef(
541 draw_image, ImageDecodeController::TracingInfo(), &another_task); 554 draw_image, ImageDecodeController::TracingInfo(), &another_task);
542 EXPECT_TRUE(need_unref); 555 EXPECT_TRUE(need_unref);
543 EXPECT_FALSE(another_task); 556 EXPECT_FALSE(another_task);
544 557
545 task->OnTaskCompleted(); 558 SimpleTaskRunner::CompleteTask(task.get());
546 559
547 scoped_refptr<TileTask> third_task; 560 scoped_refptr<TileTask> third_task;
548 need_unref = controller.GetTaskForImageAndRef( 561 need_unref = controller.GetTaskForImageAndRef(
549 draw_image, ImageDecodeController::TracingInfo(), &third_task); 562 draw_image, ImageDecodeController::TracingInfo(), &third_task);
550 EXPECT_TRUE(need_unref); 563 EXPECT_TRUE(need_unref);
551 EXPECT_FALSE(third_task); 564 EXPECT_FALSE(third_task);
552 565
553 controller.UnrefImage(draw_image); 566 controller.UnrefImage(draw_image);
554 controller.UnrefImage(draw_image); 567 controller.UnrefImage(draw_image);
555 controller.UnrefImage(draw_image); 568 controller.UnrefImage(draw_image);
(...skipping 14 matching lines...) Expand all
570 EXPECT_TRUE(need_unref); 583 EXPECT_TRUE(need_unref);
571 EXPECT_TRUE(task); 584 EXPECT_TRUE(task);
572 585
573 scoped_refptr<TileTask> another_task; 586 scoped_refptr<TileTask> another_task;
574 need_unref = controller.GetTaskForImageAndRef( 587 need_unref = controller.GetTaskForImageAndRef(
575 draw_image, ImageDecodeController::TracingInfo(), &another_task); 588 draw_image, ImageDecodeController::TracingInfo(), &another_task);
576 EXPECT_TRUE(need_unref); 589 EXPECT_TRUE(need_unref);
577 EXPECT_TRUE(another_task.get() == task.get()); 590 EXPECT_TRUE(another_task.get() == task.get());
578 591
579 // Didn't run the task, complete it (it was canceled). 592 // Didn't run the task, complete it (it was canceled).
580 task->OnTaskCompleted(); 593 SimpleTaskRunner::CancelTask(task.get());
594 SimpleTaskRunner::CompleteTask(task.get());
581 595
582 // Fully cancel everything (so the raster would unref things). 596 // Fully cancel everything (so the raster would unref things).
583 controller.UnrefImage(draw_image); 597 controller.UnrefImage(draw_image);
584 controller.UnrefImage(draw_image); 598 controller.UnrefImage(draw_image);
585 599
586 // Here a new task is created. 600 // Here a new task is created.
587 scoped_refptr<TileTask> third_task; 601 scoped_refptr<TileTask> third_task;
588 need_unref = controller.GetTaskForImageAndRef( 602 need_unref = controller.GetTaskForImageAndRef(
589 draw_image, ImageDecodeController::TracingInfo(), &third_task); 603 draw_image, ImageDecodeController::TracingInfo(), &third_task);
590 EXPECT_TRUE(need_unref); 604 EXPECT_TRUE(need_unref);
591 EXPECT_TRUE(third_task); 605 EXPECT_TRUE(third_task);
592 EXPECT_FALSE(third_task.get() == task.get()); 606 EXPECT_FALSE(third_task.get() == task.get());
593 607
608 SimpleTaskRunner::ProcessTask(third_task.get());
609
594 controller.UnrefImage(draw_image); 610 controller.UnrefImage(draw_image);
595 } 611 }
596 612
597 TEST(SoftwareImageDecodeControllerTest, 613 TEST(SoftwareImageDecodeControllerTest,
598 GetTaskForImageCanceledWhileReffedGetsNewTask) { 614 GetTaskForImageCanceledWhileReffedGetsNewTask) {
599 SoftwareImageDecodeController controller; 615 SoftwareImageDecodeController controller;
600 bool is_decomposable = true; 616 bool is_decomposable = true;
601 SkFilterQuality quality = kHigh_SkFilterQuality; 617 SkFilterQuality quality = kHigh_SkFilterQuality;
602 618
603 sk_sp<SkImage> image = CreateImage(100, 100); 619 sk_sp<SkImage> image = CreateImage(100, 100);
604 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 620 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
605 quality, 621 quality,
606 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); 622 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable));
607 scoped_refptr<TileTask> task; 623 scoped_refptr<TileTask> task;
608 bool need_unref = controller.GetTaskForImageAndRef( 624 bool need_unref = controller.GetTaskForImageAndRef(
609 draw_image, ImageDecodeController::TracingInfo(), &task); 625 draw_image, ImageDecodeController::TracingInfo(), &task);
610 EXPECT_TRUE(need_unref); 626 EXPECT_TRUE(need_unref);
611 EXPECT_TRUE(task); 627 EXPECT_TRUE(task);
612 628
613 scoped_refptr<TileTask> another_task; 629 scoped_refptr<TileTask> another_task;
614 need_unref = controller.GetTaskForImageAndRef( 630 need_unref = controller.GetTaskForImageAndRef(
615 draw_image, ImageDecodeController::TracingInfo(), &another_task); 631 draw_image, ImageDecodeController::TracingInfo(), &another_task);
616 EXPECT_TRUE(need_unref); 632 EXPECT_TRUE(need_unref);
617 EXPECT_TRUE(another_task.get() == task.get()); 633 EXPECT_TRUE(another_task.get() == task.get());
618 634
619 // Didn't run the task, complete it (it was canceled). 635 // Didn't run the task, complete it (it was canceled).
620 task->OnTaskCompleted(); 636 SimpleTaskRunner::CancelTask(task.get());
637 SimpleTaskRunner::CompleteTask(task.get());
621 638
622 // Note that here, everything is reffed, but a new task is created. This is 639 // Note that here, everything is reffed, but a new task is created. This is
623 // possible with repeated schedule/cancel operations. 640 // possible with repeated schedule/cancel operations.
624 scoped_refptr<TileTask> third_task; 641 scoped_refptr<TileTask> third_task;
625 need_unref = controller.GetTaskForImageAndRef( 642 need_unref = controller.GetTaskForImageAndRef(
626 draw_image, ImageDecodeController::TracingInfo(), &third_task); 643 draw_image, ImageDecodeController::TracingInfo(), &third_task);
627 EXPECT_TRUE(need_unref); 644 EXPECT_TRUE(need_unref);
628 EXPECT_TRUE(third_task); 645 EXPECT_TRUE(third_task);
629 EXPECT_FALSE(third_task.get() == task.get()); 646 EXPECT_FALSE(third_task.get() == task.get());
630 647
648 SimpleTaskRunner::ProcessTask(third_task.get());
649
631 // 3 Unrefs! 650 // 3 Unrefs!
632 controller.UnrefImage(draw_image); 651 controller.UnrefImage(draw_image);
633 controller.UnrefImage(draw_image); 652 controller.UnrefImage(draw_image);
634 controller.UnrefImage(draw_image); 653 controller.UnrefImage(draw_image);
635 } 654 }
636 655
637 TEST(SoftwareImageDecodeControllerTest, GetDecodedImageForDraw) { 656 TEST(SoftwareImageDecodeControllerTest, GetDecodedImageForDraw) {
638 SoftwareImageDecodeController controller; 657 SoftwareImageDecodeController controller;
639 bool is_decomposable = true; 658 bool is_decomposable = true;
640 SkFilterQuality quality = kHigh_SkFilterQuality; 659 SkFilterQuality quality = kHigh_SkFilterQuality;
641 660
642 sk_sp<SkImage> image = CreateImage(100, 100); 661 sk_sp<SkImage> image = CreateImage(100, 100);
643 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 662 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
644 quality, 663 quality,
645 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); 664 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable));
646 scoped_refptr<TileTask> task; 665 scoped_refptr<TileTask> task;
647 bool need_unref = controller.GetTaskForImageAndRef( 666 bool need_unref = controller.GetTaskForImageAndRef(
648 draw_image, ImageDecodeController::TracingInfo(), &task); 667 draw_image, ImageDecodeController::TracingInfo(), &task);
649 EXPECT_TRUE(need_unref); 668 EXPECT_TRUE(need_unref);
650 EXPECT_TRUE(task); 669 EXPECT_TRUE(task);
651 670
652 task->RunOnWorkerThread(); 671 SimpleTaskRunner::ProcessTask(task.get());
653
654 task->OnTaskCompleted();
655 672
656 DecodedDrawImage decoded_draw_image = 673 DecodedDrawImage decoded_draw_image =
657 controller.GetDecodedImageForDraw(draw_image); 674 controller.GetDecodedImageForDraw(draw_image);
658 EXPECT_TRUE(decoded_draw_image.image()); 675 EXPECT_TRUE(decoded_draw_image.image());
659 EXPECT_EQ(50, decoded_draw_image.image()->width()); 676 EXPECT_EQ(50, decoded_draw_image.image()->width());
660 EXPECT_EQ(50, decoded_draw_image.image()->height()); 677 EXPECT_EQ(50, decoded_draw_image.image()->height());
661 EXPECT_FLOAT_EQ(0.5f, decoded_draw_image.scale_adjustment().width()); 678 EXPECT_FLOAT_EQ(0.5f, decoded_draw_image.scale_adjustment().width());
662 EXPECT_FLOAT_EQ(0.5f, decoded_draw_image.scale_adjustment().height()); 679 EXPECT_FLOAT_EQ(0.5f, decoded_draw_image.scale_adjustment().height());
663 EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality()); 680 EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality());
664 EXPECT_FALSE(decoded_draw_image.is_scale_adjustment_identity()); 681 EXPECT_FALSE(decoded_draw_image.is_scale_adjustment_identity());
(...skipping 12 matching lines...) Expand all
677 sk_sp<SkImage> image = CreateImage(100, 100); 694 sk_sp<SkImage> image = CreateImage(100, 100);
678 DrawImage draw_image( 695 DrawImage draw_image(
679 image, SkIRect::MakeXYWH(20, 30, image->width(), image->height()), 696 image, SkIRect::MakeXYWH(20, 30, image->width(), image->height()),
680 quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); 697 quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable));
681 scoped_refptr<TileTask> task; 698 scoped_refptr<TileTask> task;
682 bool need_unref = controller.GetTaskForImageAndRef( 699 bool need_unref = controller.GetTaskForImageAndRef(
683 draw_image, ImageDecodeController::TracingInfo(), &task); 700 draw_image, ImageDecodeController::TracingInfo(), &task);
684 EXPECT_TRUE(need_unref); 701 EXPECT_TRUE(need_unref);
685 EXPECT_TRUE(task); 702 EXPECT_TRUE(task);
686 703
687 task->RunOnWorkerThread(); 704 SimpleTaskRunner::ProcessTask(task.get());
688
689 task->OnTaskCompleted();
690 705
691 DecodedDrawImage decoded_draw_image = 706 DecodedDrawImage decoded_draw_image =
692 controller.GetDecodedImageForDraw(draw_image); 707 controller.GetDecodedImageForDraw(draw_image);
693 EXPECT_TRUE(decoded_draw_image.image()); 708 EXPECT_TRUE(decoded_draw_image.image());
694 EXPECT_EQ(40, decoded_draw_image.image()->width()); 709 EXPECT_EQ(40, decoded_draw_image.image()->width());
695 EXPECT_EQ(35, decoded_draw_image.image()->height()); 710 EXPECT_EQ(35, decoded_draw_image.image()->height());
696 EXPECT_FLOAT_EQ(0.5f, decoded_draw_image.scale_adjustment().width()); 711 EXPECT_FLOAT_EQ(0.5f, decoded_draw_image.scale_adjustment().width());
697 EXPECT_FLOAT_EQ(0.5f, decoded_draw_image.scale_adjustment().height()); 712 EXPECT_FLOAT_EQ(0.5f, decoded_draw_image.scale_adjustment().height());
698 EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality()); 713 EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality());
699 EXPECT_FALSE(decoded_draw_image.is_scale_adjustment_identity()); 714 EXPECT_FALSE(decoded_draw_image.is_scale_adjustment_identity());
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
779 EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality()); 794 EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality());
780 EXPECT_FALSE(decoded_draw_image.is_scale_adjustment_identity()); 795 EXPECT_FALSE(decoded_draw_image.is_scale_adjustment_identity());
781 EXPECT_TRUE(decoded_draw_image.is_at_raster_decode()); 796 EXPECT_TRUE(decoded_draw_image.is_at_raster_decode());
782 797
783 scoped_refptr<TileTask> task; 798 scoped_refptr<TileTask> task;
784 bool need_unref = controller.GetTaskForImageAndRef( 799 bool need_unref = controller.GetTaskForImageAndRef(
785 draw_image, ImageDecodeController::TracingInfo(), &task); 800 draw_image, ImageDecodeController::TracingInfo(), &task);
786 EXPECT_TRUE(need_unref); 801 EXPECT_TRUE(need_unref);
787 EXPECT_TRUE(task); 802 EXPECT_TRUE(task);
788 803
789 task->RunOnWorkerThread(); 804 SimpleTaskRunner::ProcessTask(task.get());
790
791 task->OnTaskCompleted();
792 805
793 DecodedDrawImage another_decoded_draw_image = 806 DecodedDrawImage another_decoded_draw_image =
794 controller.GetDecodedImageForDraw(draw_image); 807 controller.GetDecodedImageForDraw(draw_image);
795 // This should get the new decoded/locked image, not the one we're using at 808 // This should get the new decoded/locked image, not the one we're using at
796 // raster. 809 // raster.
797 // TODO(vmpstr): We can possibly optimize this so that the decode simply moves 810 // TODO(vmpstr): We can possibly optimize this so that the decode simply moves
798 // the image to the right spot. 811 // the image to the right spot.
799 EXPECT_NE(decoded_draw_image.image()->uniqueID(), 812 EXPECT_NE(decoded_draw_image.image()->uniqueID(),
800 another_decoded_draw_image.image()->uniqueID()); 813 another_decoded_draw_image.image()->uniqueID());
801 EXPECT_FALSE(another_decoded_draw_image.is_at_raster_decode()); 814 EXPECT_FALSE(another_decoded_draw_image.is_at_raster_decode());
(...skipping 28 matching lines...) Expand all
830 scoped_refptr<TileTask> task; 843 scoped_refptr<TileTask> task;
831 bool need_unref = controller.GetTaskForImageAndRef( 844 bool need_unref = controller.GetTaskForImageAndRef(
832 draw_image, ImageDecodeController::TracingInfo(), &task); 845 draw_image, ImageDecodeController::TracingInfo(), &task);
833 EXPECT_TRUE(need_unref); 846 EXPECT_TRUE(need_unref);
834 EXPECT_TRUE(task); 847 EXPECT_TRUE(task);
835 848
836 // If we finish the draw here, then we will use it for the locked decode 849 // If we finish the draw here, then we will use it for the locked decode
837 // instead of decoding again. 850 // instead of decoding again.
838 controller.DrawWithImageFinished(draw_image, decoded_draw_image); 851 controller.DrawWithImageFinished(draw_image, decoded_draw_image);
839 852
840 task->RunOnWorkerThread(); 853 SimpleTaskRunner::ProcessTask(task.get());
841
842 task->OnTaskCompleted();
843 854
844 DecodedDrawImage another_decoded_draw_image = 855 DecodedDrawImage another_decoded_draw_image =
845 controller.GetDecodedImageForDraw(draw_image); 856 controller.GetDecodedImageForDraw(draw_image);
846 // This should get the decoded/locked image which we originally decoded at 857 // This should get the decoded/locked image which we originally decoded at
847 // raster time, since it's now in the locked cache. 858 // raster time, since it's now in the locked cache.
848 EXPECT_EQ(decoded_draw_image.image()->uniqueID(), 859 EXPECT_EQ(decoded_draw_image.image()->uniqueID(),
849 another_decoded_draw_image.image()->uniqueID()); 860 another_decoded_draw_image.image()->uniqueID());
850 EXPECT_FALSE(another_decoded_draw_image.is_at_raster_decode()); 861 EXPECT_FALSE(another_decoded_draw_image.is_at_raster_decode());
851 862
852 controller.DrawWithImageFinished(draw_image, another_decoded_draw_image); 863 controller.DrawWithImageFinished(draw_image, another_decoded_draw_image);
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
908 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 919 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
909 quality, 920 quality,
910 CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable)); 921 CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable));
911 922
912 scoped_refptr<TileTask> task; 923 scoped_refptr<TileTask> task;
913 bool need_unref = controller.GetTaskForImageAndRef( 924 bool need_unref = controller.GetTaskForImageAndRef(
914 draw_image, ImageDecodeController::TracingInfo(), &task); 925 draw_image, ImageDecodeController::TracingInfo(), &task);
915 EXPECT_TRUE(task); 926 EXPECT_TRUE(task);
916 EXPECT_TRUE(need_unref); 927 EXPECT_TRUE(need_unref);
917 928
929 SimpleTaskRunner::ProcessTask(task.get());
930
918 DecodedDrawImage decoded_draw_image = 931 DecodedDrawImage decoded_draw_image =
919 controller.GetDecodedImageForDraw(draw_image); 932 controller.GetDecodedImageForDraw(draw_image);
920 EXPECT_TRUE(decoded_draw_image.image()); 933 EXPECT_TRUE(decoded_draw_image.image());
921 // If we decoded the image and cached it, it would be stored in a different 934 // If we decoded the image and cached it, it would be stored in a different
922 // SkImage object. 935 // SkImage object.
923 EXPECT_TRUE(decoded_draw_image.image() != image); 936 EXPECT_TRUE(decoded_draw_image.image() != image);
924 937
925 controller.DrawWithImageFinished(draw_image, decoded_draw_image); 938 controller.DrawWithImageFinished(draw_image, decoded_draw_image);
926 controller.UnrefImage(draw_image); 939 controller.UnrefImage(draw_image);
927 } 940 }
928 941
929 TEST(SoftwareImageDecodeControllerTest, LowQualityScaledSubrectIsHandled) { 942 TEST(SoftwareImageDecodeControllerTest, LowQualityScaledSubrectIsHandled) {
930 SoftwareImageDecodeController controller; 943 SoftwareImageDecodeController controller;
931 bool is_decomposable = true; 944 bool is_decomposable = true;
932 SkFilterQuality quality = kLow_SkFilterQuality; 945 SkFilterQuality quality = kLow_SkFilterQuality;
933 946
934 sk_sp<SkImage> image = CreateImage(100, 100); 947 sk_sp<SkImage> image = CreateImage(100, 100);
935 DrawImage draw_image(image, SkIRect::MakeXYWH(10, 10, 80, 80), quality, 948 DrawImage draw_image(image, SkIRect::MakeXYWH(10, 10, 80, 80), quality,
936 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); 949 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable));
937 950
938 scoped_refptr<TileTask> task; 951 scoped_refptr<TileTask> task;
939 bool need_unref = controller.GetTaskForImageAndRef( 952 bool need_unref = controller.GetTaskForImageAndRef(
940 draw_image, ImageDecodeController::TracingInfo(), &task); 953 draw_image, ImageDecodeController::TracingInfo(), &task);
941 EXPECT_TRUE(task); 954 EXPECT_TRUE(task);
942 EXPECT_TRUE(need_unref); 955 EXPECT_TRUE(need_unref);
943 956
957 SimpleTaskRunner::ProcessTask(task.get());
958
944 DecodedDrawImage decoded_draw_image = 959 DecodedDrawImage decoded_draw_image =
945 controller.GetDecodedImageForDraw(draw_image); 960 controller.GetDecodedImageForDraw(draw_image);
946 EXPECT_TRUE(decoded_draw_image.image()); 961 EXPECT_TRUE(decoded_draw_image.image());
947 // If we decoded the image and cached it, it would be stored in a different 962 // If we decoded the image and cached it, it would be stored in a different
948 // SkImage object. 963 // SkImage object.
949 EXPECT_TRUE(decoded_draw_image.image() != image); 964 EXPECT_TRUE(decoded_draw_image.image() != image);
950 EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality()); 965 EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality());
951 EXPECT_TRUE(decoded_draw_image.is_scale_adjustment_identity()); 966 EXPECT_TRUE(decoded_draw_image.is_scale_adjustment_identity());
952 967
953 controller.DrawWithImageFinished(draw_image, decoded_draw_image); 968 controller.DrawWithImageFinished(draw_image, decoded_draw_image);
954 controller.UnrefImage(draw_image); 969 controller.UnrefImage(draw_image);
955 } 970 }
956 971
957 TEST(SoftwareImageDecodeControllerTest, NoneQualityScaledSubrectIsHandled) { 972 TEST(SoftwareImageDecodeControllerTest, NoneQualityScaledSubrectIsHandled) {
958 SoftwareImageDecodeController controller; 973 SoftwareImageDecodeController controller;
959 bool is_decomposable = true; 974 bool is_decomposable = true;
960 SkFilterQuality quality = kNone_SkFilterQuality; 975 SkFilterQuality quality = kNone_SkFilterQuality;
961 976
962 sk_sp<SkImage> image = CreateImage(100, 100); 977 sk_sp<SkImage> image = CreateImage(100, 100);
963 DrawImage draw_image(image, SkIRect::MakeXYWH(10, 10, 80, 80), quality, 978 DrawImage draw_image(image, SkIRect::MakeXYWH(10, 10, 80, 80), quality,
964 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); 979 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable));
965 980
966 scoped_refptr<TileTask> task; 981 scoped_refptr<TileTask> task;
967 bool need_unref = controller.GetTaskForImageAndRef( 982 bool need_unref = controller.GetTaskForImageAndRef(
968 draw_image, ImageDecodeController::TracingInfo(), &task); 983 draw_image, ImageDecodeController::TracingInfo(), &task);
969 EXPECT_TRUE(task); 984 EXPECT_TRUE(task);
970 EXPECT_TRUE(need_unref); 985 EXPECT_TRUE(need_unref);
971 986
987 SimpleTaskRunner::ProcessTask(task.get());
988
972 DecodedDrawImage decoded_draw_image = 989 DecodedDrawImage decoded_draw_image =
973 controller.GetDecodedImageForDraw(draw_image); 990 controller.GetDecodedImageForDraw(draw_image);
974 EXPECT_TRUE(decoded_draw_image.image()); 991 EXPECT_TRUE(decoded_draw_image.image());
975 // If we decoded the image and cached it, it would be stored in a different 992 // If we decoded the image and cached it, it would be stored in a different
976 // SkImage object. 993 // SkImage object.
977 EXPECT_TRUE(decoded_draw_image.image() != image); 994 EXPECT_TRUE(decoded_draw_image.image() != image);
978 EXPECT_EQ(kNone_SkFilterQuality, decoded_draw_image.filter_quality()); 995 EXPECT_EQ(kNone_SkFilterQuality, decoded_draw_image.filter_quality());
979 EXPECT_TRUE(decoded_draw_image.is_scale_adjustment_identity()); 996 EXPECT_TRUE(decoded_draw_image.is_scale_adjustment_identity());
980 997
981 controller.DrawWithImageFinished(draw_image, decoded_draw_image); 998 controller.DrawWithImageFinished(draw_image, decoded_draw_image);
982 controller.UnrefImage(draw_image); 999 controller.UnrefImage(draw_image);
983 } 1000 }
984 } // namespace 1001 } // namespace
985 } // namespace cc 1002 } // namespace cc
OLDNEW
« cc/test/simple_task_runner.h ('K') | « cc/tiles/gpu_image_decode_controller_unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698