|
7 | 7 | #include "flutter/flow/layers/clip_rect_layer.h"
|
8 | 8 | #include "flutter/flow/layers/image_filter_layer.h"
|
9 | 9 | #include "flutter/flow/layers/layer_tree.h"
|
| 10 | +#include "flutter/flow/layers/platform_view_layer.h" |
10 | 11 | #include "flutter/flow/layers/transform_layer.h"
|
11 | 12 | #include "flutter/flow/raster_cache_util.h"
|
12 | 13 | #include "flutter/flow/testing/diff_context_test.h"
|
13 | 14 | #include "flutter/flow/testing/layer_test.h"
|
| 15 | +#include "flutter/flow/testing/mock_embedder.h" |
14 | 16 | #include "flutter/flow/testing/mock_layer.h"
|
15 | 17 | #include "flutter/fml/macros.h"
|
16 | 18 | #include "flutter/testing/display_list_testing.h"
|
@@ -274,11 +276,16 @@ TEST_F(OpacityLayerTest, FullyTransparent) {
|
274 | 276 | mock_layer->parent_mutators(),
|
275 | 277 | std::vector({Mutator(layer_transform), Mutator(SK_AlphaTRANSPARENT)}));
|
276 | 278 |
|
277 |
| - auto expected_draw_calls = |
278 |
| - std::vector({MockCanvas::DrawCall{0, MockCanvas::SaveData{1}}, |
279 |
| - MockCanvas::DrawCall{ |
280 |
| - 1, MockCanvas::ConcatMatrixData{SkM44(layer_transform)}}, |
281 |
| - MockCanvas::DrawCall{1, MockCanvas::RestoreData{0}}}); |
| 279 | + auto expected_draw_calls = std::vector( |
| 280 | + {MockCanvas::DrawCall{0, MockCanvas::SaveData{1}}, |
| 281 | + MockCanvas::DrawCall{ |
| 282 | + 1, MockCanvas::ConcatMatrixData{SkM44(layer_transform)}}, |
| 283 | + MockCanvas::DrawCall{1, MockCanvas::SaveData{2}}, |
| 284 | + MockCanvas::DrawCall{ |
| 285 | + 2, MockCanvas::ClipRectData{kEmptyRect, SkClipOp::kIntersect, |
| 286 | + MockCanvas::kHard_ClipEdgeStyle}}, |
| 287 | + MockCanvas::DrawCall{2, MockCanvas::RestoreData{1}}, |
| 288 | + MockCanvas::DrawCall{1, MockCanvas::RestoreData{0}}}); |
282 | 289 | layer->Paint(paint_context());
|
283 | 290 | EXPECT_EQ(mock_canvas().draw_calls(), expected_draw_calls);
|
284 | 291 | }
|
@@ -686,5 +693,30 @@ TEST_F(OpacityLayerTest, FullyOpaqueWithFractionalValues) {
|
686 | 693 | EXPECT_EQ(mock_canvas().draw_calls(), expected_draw_calls);
|
687 | 694 | }
|
688 | 695 |
|
| 696 | +TEST_F(OpacityLayerTest, FullyTransparentDoesNotCullPlatformView) { |
| 697 | + const SkPoint opacity_offset = SkPoint::Make(0.5f, 1.5f); |
| 698 | + const SkPoint view_offset = SkPoint::Make(0.0f, 0.0f); |
| 699 | + const SkSize view_size = SkSize::Make(8.0f, 8.0f); |
| 700 | + const int64_t view_id = 42; |
| 701 | + auto platform_view = |
| 702 | + std::make_shared<PlatformViewLayer>(view_offset, view_size, view_id); |
| 703 | + |
| 704 | + auto opacity = |
| 705 | + std::make_shared<OpacityLayer>(SK_AlphaTRANSPARENT, opacity_offset); |
| 706 | + opacity->Add(platform_view); |
| 707 | + |
| 708 | + auto embedder = MockViewEmbedder(); |
| 709 | + SkCanvas fake_overlay_canvas; |
| 710 | + embedder.AddCanvas(&fake_overlay_canvas); |
| 711 | + preroll_context()->view_embedder = &embedder; |
| 712 | + paint_context().view_embedder = &embedder; |
| 713 | + |
| 714 | + opacity->Preroll(preroll_context()); |
| 715 | + EXPECT_EQ(embedder.prerolled_views(), std::vector<int64_t>({view_id})); |
| 716 | + |
| 717 | + opacity->Paint(paint_context()); |
| 718 | + EXPECT_EQ(embedder.painted_views(), std::vector<int64_t>({view_id})); |
| 719 | +} |
| 720 | + |
689 | 721 | } // namespace testing
|
690 | 722 | } // namespace flutter
|
0 commit comments