Index: cc/paint/display_item_list_unittest.cc |
diff --git a/cc/paint/display_item_list_unittest.cc b/cc/paint/display_item_list_unittest.cc |
index b166229c6624607acc70823604748d344496fa65..f1b9e759f9b1c3aa65992a7ad22017d25176df28 100644 |
--- a/cc/paint/display_item_list_unittest.cc |
+++ b/cc/paint/display_item_list_unittest.cc |
@@ -17,17 +17,16 @@ |
#include "cc/paint/compositing_display_item.h" |
#include "cc/paint/drawing_display_item.h" |
#include "cc/paint/filter_display_item.h" |
+ |
#include "cc/paint/float_clip_display_item.h" |
#include "cc/paint/paint_canvas.h" |
#include "cc/paint/paint_flags.h" |
#include "cc/paint/paint_record.h" |
#include "cc/paint/paint_recorder.h" |
-#include "cc/paint/skia_paint_canvas.h" |
#include "cc/paint/transform_display_item.h" |
#include "cc/test/geometry_test_utils.h" |
#include "cc/test/pixel_test_utils.h" |
#include "cc/test/skia_common.h" |
-#include "cc/test/test_skcanvas.h" |
#include "testing/gmock/include/gmock/gmock.h" |
#include "testing/gtest/include/gtest/gtest.h" |
#include "third_party/skia/include/core/SkBitmap.h" |
@@ -78,19 +77,6 @@ |
canvas->drawRect( |
SkRect::MakeXYWH(bounds.x(), bounds.y(), bounds.width(), bounds.height()), |
PaintFlags()); |
- return recorder.finishRecordingAsPicture(); |
-} |
- |
-sk_sp<const PaintRecord> CreateRectPictureWithAlpha(const gfx::Rect& bounds, |
- uint8_t alpha) { |
- PaintRecorder recorder; |
- PaintCanvas* canvas = |
- recorder.beginRecording(bounds.width(), bounds.height()); |
- PaintFlags flags; |
- flags.setAlpha(alpha); |
- canvas->drawRect( |
- SkRect::MakeXYWH(bounds.x(), bounds.y(), bounds.width(), bounds.height()), |
- flags); |
return recorder.finishRecordingAsPicture(); |
} |
@@ -718,110 +704,4 @@ |
EXPECT_RECT_EQ(filter_bounds, list->VisualRectForTesting(3)); |
} |
-// Verify that raster time optimizations for compositing item / draw single op / |
-// end compositing item can be collapsed together into a single draw op |
-// with the opacity from the compositing item folded in. |
-TEST(DisplayItemListTest, SaveDrawRestore) { |
- auto list = make_scoped_refptr(new DisplayItemList); |
- |
- list->CreateAndAppendPairedBeginItem<CompositingDisplayItem>( |
- 80, SkBlendMode::kSrcOver, nullptr, nullptr, false); |
- list->CreateAndAppendDrawingItem<DrawingDisplayItem>( |
- kVisualRect, CreateRectPictureWithAlpha(kVisualRect, 40)); |
- list->CreateAndAppendPairedEndItem<EndCompositingDisplayItem>(); |
- list->Finalize(); |
- |
- SaveCountingCanvas canvas; |
- list->Raster(&canvas, nullptr); |
- |
- EXPECT_EQ(0, canvas.save_count_); |
- EXPECT_EQ(0, canvas.restore_count_); |
- EXPECT_EQ(gfx::RectToSkRect(kVisualRect), canvas.draw_rect_); |
- |
- float expected_alpha = 80 * 40 / 255.f; |
- EXPECT_LE(std::abs(expected_alpha - canvas.paint_.getAlpha()), 1.f); |
-} |
- |
-// Verify that compositing item / end compositing item is a noop. |
-// Here we're testing that Skia does an optimization that skips |
-// save/restore with nothing in between. If skia stops doing this |
-// then we should reimplement this optimization in display list raster. |
-TEST(DisplayItemListTest, SaveRestoreNoops) { |
- auto list = make_scoped_refptr(new DisplayItemList); |
- |
- list->CreateAndAppendPairedBeginItem<CompositingDisplayItem>( |
- 80, SkBlendMode::kSrcOver, nullptr, nullptr, false); |
- list->CreateAndAppendPairedEndItem<EndCompositingDisplayItem>(); |
- list->CreateAndAppendPairedBeginItem<CompositingDisplayItem>( |
- 255, SkBlendMode::kSrcOver, nullptr, nullptr, false); |
- list->CreateAndAppendPairedEndItem<EndCompositingDisplayItem>(); |
- list->CreateAndAppendPairedBeginItem<CompositingDisplayItem>( |
- 255, SkBlendMode::kSrc, nullptr, nullptr, false); |
- list->CreateAndAppendPairedEndItem<EndCompositingDisplayItem>(); |
- list->Finalize(); |
- |
- SaveCountingCanvas canvas; |
- list->Raster(&canvas, nullptr); |
- |
- EXPECT_EQ(0, canvas.save_count_); |
- EXPECT_EQ(0, canvas.restore_count_); |
-} |
- |
-// The same as SaveDrawRestore, but with save flags that prevent the |
-// optimization. |
-TEST(DisplayItemListTest, SaveDrawRestoreFail_BadSaveFlags) { |
- auto list = make_scoped_refptr(new DisplayItemList); |
- |
- // Use a blend mode that's not compatible with the SaveDrawRestore |
- // optimization. |
- list->CreateAndAppendPairedBeginItem<CompositingDisplayItem>( |
- 80, SkBlendMode::kSrc, nullptr, nullptr, false); |
- list->CreateAndAppendDrawingItem<DrawingDisplayItem>( |
- kVisualRect, CreateRectPictureWithAlpha(kVisualRect, 40)); |
- list->CreateAndAppendPairedEndItem<EndCompositingDisplayItem>(); |
- list->Finalize(); |
- |
- SaveCountingCanvas canvas; |
- list->Raster(&canvas, nullptr); |
- |
- EXPECT_EQ(1, canvas.save_count_); |
- EXPECT_EQ(1, canvas.restore_count_); |
- EXPECT_EQ(gfx::RectToSkRect(kVisualRect), canvas.draw_rect_); |
- EXPECT_LE(40, canvas.paint_.getAlpha()); |
-} |
- |
-// The same as SaveDrawRestore, but with too many ops in the PaintRecord. |
-TEST(DisplayItemListTest, SaveDrawRestoreFail_TooManyOps) { |
- sk_sp<const PaintRecord> record; |
- { |
- PaintRecorder recorder; |
- PaintCanvas* canvas = |
- recorder.beginRecording(kVisualRect.width(), kVisualRect.height()); |
- PaintFlags flags; |
- flags.setAlpha(40); |
- canvas->drawRect(gfx::RectToSkRect(kVisualRect), flags); |
- // Add an extra op here. |
- canvas->drawRect(gfx::RectToSkRect(kVisualRect), flags); |
- record = recorder.finishRecordingAsPicture(); |
- } |
- EXPECT_GT(record->approximateOpCount(), 1); |
- |
- auto list = make_scoped_refptr(new DisplayItemList); |
- |
- list->CreateAndAppendPairedBeginItem<CompositingDisplayItem>( |
- 80, SkBlendMode::kSrcOver, nullptr, nullptr, false); |
- list->CreateAndAppendDrawingItem<DrawingDisplayItem>(kVisualRect, |
- std::move(record)); |
- list->CreateAndAppendPairedEndItem<EndCompositingDisplayItem>(); |
- list->Finalize(); |
- |
- SaveCountingCanvas canvas; |
- list->Raster(&canvas, nullptr); |
- |
- EXPECT_EQ(1, canvas.save_count_); |
- EXPECT_EQ(1, canvas.restore_count_); |
- EXPECT_EQ(gfx::RectToSkRect(kVisualRect), canvas.draw_rect_); |
- EXPECT_LE(40, canvas.paint_.getAlpha()); |
-} |
- |
} // namespace cc |