| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/paint/display_item_list.h" | 5 #include "cc/paint/display_item_list.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 714 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 725 auto list = make_scoped_refptr(new DisplayItemList); | 725 auto list = make_scoped_refptr(new DisplayItemList); |
| 726 | 726 |
| 727 list->CreateAndAppendPairedBeginItem<CompositingDisplayItem>( | 727 list->CreateAndAppendPairedBeginItem<CompositingDisplayItem>( |
| 728 80, SkBlendMode::kSrcOver, nullptr, nullptr, false); | 728 80, SkBlendMode::kSrcOver, nullptr, nullptr, false); |
| 729 list->CreateAndAppendDrawingItem<DrawingDisplayItem>( | 729 list->CreateAndAppendDrawingItem<DrawingDisplayItem>( |
| 730 kVisualRect, CreateRectPictureWithAlpha(kVisualRect, 40)); | 730 kVisualRect, CreateRectPictureWithAlpha(kVisualRect, 40)); |
| 731 list->CreateAndAppendPairedEndItem<EndCompositingDisplayItem>(); | 731 list->CreateAndAppendPairedEndItem<EndCompositingDisplayItem>(); |
| 732 list->Finalize(); | 732 list->Finalize(); |
| 733 | 733 |
| 734 SaveCountingCanvas canvas; | 734 SaveCountingCanvas canvas; |
| 735 list->Raster(&canvas, nullptr); | 735 list->Raster(&canvas); |
| 736 | 736 |
| 737 EXPECT_EQ(0, canvas.save_count_); | 737 EXPECT_EQ(0, canvas.save_count_); |
| 738 EXPECT_EQ(0, canvas.restore_count_); | 738 EXPECT_EQ(0, canvas.restore_count_); |
| 739 EXPECT_EQ(gfx::RectToSkRect(kVisualRect), canvas.draw_rect_); | 739 EXPECT_EQ(gfx::RectToSkRect(kVisualRect), canvas.draw_rect_); |
| 740 | 740 |
| 741 float expected_alpha = 80 * 40 / 255.f; | 741 float expected_alpha = 80 * 40 / 255.f; |
| 742 EXPECT_LE(std::abs(expected_alpha - canvas.paint_.getAlpha()), 1.f); | 742 EXPECT_LE(std::abs(expected_alpha - canvas.paint_.getAlpha()), 1.f); |
| 743 } | 743 } |
| 744 | 744 |
| 745 // Verify that compositing item / end compositing item is a noop. | 745 // Verify that compositing item / end compositing item is a noop. |
| 746 // Here we're testing that Skia does an optimization that skips | 746 // Here we're testing that Skia does an optimization that skips |
| 747 // save/restore with nothing in between. If skia stops doing this | 747 // save/restore with nothing in between. If skia stops doing this |
| 748 // then we should reimplement this optimization in display list raster. | 748 // then we should reimplement this optimization in display list raster. |
| 749 TEST(DisplayItemListTest, SaveRestoreNoops) { | 749 TEST(DisplayItemListTest, SaveRestoreNoops) { |
| 750 auto list = make_scoped_refptr(new DisplayItemList); | 750 auto list = make_scoped_refptr(new DisplayItemList); |
| 751 | 751 |
| 752 list->CreateAndAppendPairedBeginItem<CompositingDisplayItem>( | 752 list->CreateAndAppendPairedBeginItem<CompositingDisplayItem>( |
| 753 80, SkBlendMode::kSrcOver, nullptr, nullptr, false); | 753 80, SkBlendMode::kSrcOver, nullptr, nullptr, false); |
| 754 list->CreateAndAppendPairedEndItem<EndCompositingDisplayItem>(); | 754 list->CreateAndAppendPairedEndItem<EndCompositingDisplayItem>(); |
| 755 list->CreateAndAppendPairedBeginItem<CompositingDisplayItem>( | 755 list->CreateAndAppendPairedBeginItem<CompositingDisplayItem>( |
| 756 255, SkBlendMode::kSrcOver, nullptr, nullptr, false); | 756 255, SkBlendMode::kSrcOver, nullptr, nullptr, false); |
| 757 list->CreateAndAppendPairedEndItem<EndCompositingDisplayItem>(); | 757 list->CreateAndAppendPairedEndItem<EndCompositingDisplayItem>(); |
| 758 list->CreateAndAppendPairedBeginItem<CompositingDisplayItem>( | 758 list->CreateAndAppendPairedBeginItem<CompositingDisplayItem>( |
| 759 255, SkBlendMode::kSrc, nullptr, nullptr, false); | 759 255, SkBlendMode::kSrc, nullptr, nullptr, false); |
| 760 list->CreateAndAppendPairedEndItem<EndCompositingDisplayItem>(); | 760 list->CreateAndAppendPairedEndItem<EndCompositingDisplayItem>(); |
| 761 list->Finalize(); | 761 list->Finalize(); |
| 762 | 762 |
| 763 SaveCountingCanvas canvas; | 763 SaveCountingCanvas canvas; |
| 764 list->Raster(&canvas, nullptr); | 764 list->Raster(&canvas); |
| 765 | 765 |
| 766 EXPECT_EQ(0, canvas.save_count_); | 766 EXPECT_EQ(0, canvas.save_count_); |
| 767 EXPECT_EQ(0, canvas.restore_count_); | 767 EXPECT_EQ(0, canvas.restore_count_); |
| 768 } | 768 } |
| 769 | 769 |
| 770 // The same as SaveDrawRestore, but with save flags that prevent the | 770 // The same as SaveDrawRestore, but with save flags that prevent the |
| 771 // optimization. | 771 // optimization. |
| 772 TEST(DisplayItemListTest, SaveDrawRestoreFail_BadSaveFlags) { | 772 TEST(DisplayItemListTest, SaveDrawRestoreFail_BadSaveFlags) { |
| 773 auto list = make_scoped_refptr(new DisplayItemList); | 773 auto list = make_scoped_refptr(new DisplayItemList); |
| 774 | 774 |
| 775 // Use a blend mode that's not compatible with the SaveDrawRestore | 775 // Use a blend mode that's not compatible with the SaveDrawRestore |
| 776 // optimization. | 776 // optimization. |
| 777 list->CreateAndAppendPairedBeginItem<CompositingDisplayItem>( | 777 list->CreateAndAppendPairedBeginItem<CompositingDisplayItem>( |
| 778 80, SkBlendMode::kSrc, nullptr, nullptr, false); | 778 80, SkBlendMode::kSrc, nullptr, nullptr, false); |
| 779 list->CreateAndAppendDrawingItem<DrawingDisplayItem>( | 779 list->CreateAndAppendDrawingItem<DrawingDisplayItem>( |
| 780 kVisualRect, CreateRectPictureWithAlpha(kVisualRect, 40)); | 780 kVisualRect, CreateRectPictureWithAlpha(kVisualRect, 40)); |
| 781 list->CreateAndAppendPairedEndItem<EndCompositingDisplayItem>(); | 781 list->CreateAndAppendPairedEndItem<EndCompositingDisplayItem>(); |
| 782 list->Finalize(); | 782 list->Finalize(); |
| 783 | 783 |
| 784 SaveCountingCanvas canvas; | 784 SaveCountingCanvas canvas; |
| 785 list->Raster(&canvas, nullptr); | 785 list->Raster(&canvas); |
| 786 | 786 |
| 787 EXPECT_EQ(1, canvas.save_count_); | 787 EXPECT_EQ(1, canvas.save_count_); |
| 788 EXPECT_EQ(1, canvas.restore_count_); | 788 EXPECT_EQ(1, canvas.restore_count_); |
| 789 EXPECT_EQ(gfx::RectToSkRect(kVisualRect), canvas.draw_rect_); | 789 EXPECT_EQ(gfx::RectToSkRect(kVisualRect), canvas.draw_rect_); |
| 790 EXPECT_LE(40, canvas.paint_.getAlpha()); | 790 EXPECT_LE(40, canvas.paint_.getAlpha()); |
| 791 } | 791 } |
| 792 | 792 |
| 793 // The same as SaveDrawRestore, but with too many ops in the PaintRecord. | 793 // The same as SaveDrawRestore, but with too many ops in the PaintRecord. |
| 794 TEST(DisplayItemListTest, SaveDrawRestoreFail_TooManyOps) { | 794 TEST(DisplayItemListTest, SaveDrawRestoreFail_TooManyOps) { |
| 795 sk_sp<const PaintRecord> record; | 795 sk_sp<const PaintRecord> record; |
| (...skipping 13 matching lines...) Expand all Loading... |
| 809 auto list = make_scoped_refptr(new DisplayItemList); | 809 auto list = make_scoped_refptr(new DisplayItemList); |
| 810 | 810 |
| 811 list->CreateAndAppendPairedBeginItem<CompositingDisplayItem>( | 811 list->CreateAndAppendPairedBeginItem<CompositingDisplayItem>( |
| 812 80, SkBlendMode::kSrcOver, nullptr, nullptr, false); | 812 80, SkBlendMode::kSrcOver, nullptr, nullptr, false); |
| 813 list->CreateAndAppendDrawingItem<DrawingDisplayItem>(kVisualRect, | 813 list->CreateAndAppendDrawingItem<DrawingDisplayItem>(kVisualRect, |
| 814 std::move(record)); | 814 std::move(record)); |
| 815 list->CreateAndAppendPairedEndItem<EndCompositingDisplayItem>(); | 815 list->CreateAndAppendPairedEndItem<EndCompositingDisplayItem>(); |
| 816 list->Finalize(); | 816 list->Finalize(); |
| 817 | 817 |
| 818 SaveCountingCanvas canvas; | 818 SaveCountingCanvas canvas; |
| 819 list->Raster(&canvas, nullptr); | 819 list->Raster(&canvas); |
| 820 | 820 |
| 821 EXPECT_EQ(1, canvas.save_count_); | 821 EXPECT_EQ(1, canvas.save_count_); |
| 822 EXPECT_EQ(1, canvas.restore_count_); | 822 EXPECT_EQ(1, canvas.restore_count_); |
| 823 EXPECT_EQ(gfx::RectToSkRect(kVisualRect), canvas.draw_rect_); | 823 EXPECT_EQ(gfx::RectToSkRect(kVisualRect), canvas.draw_rect_); |
| 824 EXPECT_LE(40, canvas.paint_.getAlpha()); | 824 EXPECT_LE(40, canvas.paint_.getAlpha()); |
| 825 } | 825 } |
| 826 | 826 |
| 827 } // namespace cc | 827 } // namespace cc |
| OLD | NEW |