Flutter Engine
 
Loading...
Searching...
No Matches
mock_layer_unittests.cc
Go to the documentation of this file.
1// Copyright 2013 The Flutter Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
6
9
10namespace flutter {
11namespace testing {
12
14
15#ifndef NDEBUG
16TEST_F(MockLayerTest, PaintBeforePrerollDies) {
17 DlPath path = DlPath::MakeRectLTRB(5.0f, 6.0f, 20.5f, 21.5f);
18 auto layer = std::make_shared<MockLayer>(path, DlPaint());
19
20 EXPECT_DEATH_IF_SUPPORTED(layer->Paint(paint_context()),
21 "needs_painting\\(context\\)");
22}
23
24TEST_F(MockLayerTest, PaintingEmptyLayerDies) {
25 auto layer = std::make_shared<MockLayer>(DlPath(), DlPaint());
26
27 layer->Preroll(preroll_context());
28 EXPECT_EQ(layer->paint_bounds(), DlPath().GetBounds());
29
30 EXPECT_DEATH_IF_SUPPORTED(layer->Paint(paint_context()),
31 "needs_painting\\(context\\)");
32}
33#endif
34
35TEST_F(MockLayerTest, SimpleParams) {
36 const DlPath path = DlPath::MakeRectLTRB(5.0f, 6.0f, 20.5f, 21.5f);
37 const DlPaint paint = DlPaint(DlColor::kBlue());
38 const DlMatrix start_matrix = DlMatrix::MakeTranslation({1.0f, 2.0f});
39 const DlMatrix scale_matrix = DlMatrix::MakeScale({0.5f, 0.5f, 1.0f});
40 const DlMatrix combined_matrix = start_matrix * scale_matrix;
41 const DlRect local_cull_rect = DlRect::MakeWH(5.0f, 5.0f);
42 const DlRect device_cull_rect =
43 local_cull_rect.TransformBounds(combined_matrix);
44 const bool parent_has_platform_view = true;
45 auto layer = std::make_shared<MockLayer>(path, paint);
46
47 preroll_context()->state_stack.set_preroll_delegate(device_cull_rect,
48 start_matrix);
49 auto mutator = preroll_context()->state_stack.save();
50 mutator.transform(scale_matrix);
51 preroll_context()->has_platform_view = parent_has_platform_view;
52 layer->Preroll(preroll_context());
53 EXPECT_EQ(preroll_context()->has_platform_view, false);
54 EXPECT_EQ(layer->paint_bounds(), path.GetBounds());
55 EXPECT_TRUE(layer->needs_painting(paint_context()));
56 EXPECT_EQ(layer->parent_mutators(), std::vector{Mutator(scale_matrix)});
57 EXPECT_EQ(layer->parent_matrix(), combined_matrix);
58 EXPECT_EQ(layer->parent_cull_rect(), local_cull_rect);
59 EXPECT_EQ(layer->parent_has_platform_view(), parent_has_platform_view);
60
61 layer->Paint(display_list_paint_context());
62
63 DisplayListBuilder expected_builder;
64 expected_builder.DrawPath(DlPath(path), paint);
65 auto expected_dl = expected_builder.Build();
66
67 EXPECT_TRUE(DisplayListsEQ_Verbose(display_list(), expected_dl));
68}
69
70TEST_F(MockLayerTest, FakePlatformView) {
71 auto layer = std::make_shared<MockLayer>(DlPath(), DlPaint());
72 layer->set_fake_has_platform_view(true);
73 EXPECT_EQ(preroll_context()->has_platform_view, false);
74
75 layer->Preroll(preroll_context());
76 EXPECT_EQ(preroll_context()->has_platform_view, true);
77}
78
79TEST_F(MockLayerTest, SaveLayerOnLeafNodesCanvas) {
80 auto layer = std::make_shared<MockLayer>(DlPath(), DlPaint());
81 layer->set_fake_has_platform_view(true);
82 EXPECT_EQ(preroll_context()->has_platform_view, false);
83
84 layer->Preroll(preroll_context());
85 EXPECT_EQ(preroll_context()->has_platform_view, true);
86}
87
88TEST_F(MockLayerTest, OpacityInheritance) {
89 auto path1 = DlPath::MakeRectLTRB(10, 10, 30, 30);
90 PrerollContext* context = preroll_context();
91
92 auto mock1 = std::make_shared<MockLayer>(path1);
93 mock1->Preroll(context);
94 EXPECT_EQ(context->renderable_state_flags, 0);
95
96 auto mock2 = MockLayer::MakeOpacityCompatible(path1);
97 mock2->Preroll(context);
98 EXPECT_EQ(context->renderable_state_flags,
100}
101
102TEST_F(MockLayerTest, FlagGetSet) {
103 auto mock_layer = std::make_shared<MockLayer>(DlPath());
104
105 EXPECT_EQ(mock_layer->parent_has_platform_view(), false);
106 mock_layer->set_parent_has_platform_view(true);
107 EXPECT_EQ(mock_layer->parent_has_platform_view(), true);
108
109 EXPECT_EQ(mock_layer->parent_has_texture_layer(), false);
110 mock_layer->set_parent_has_texture_layer(true);
111 EXPECT_EQ(mock_layer->parent_has_texture_layer(), true);
112
113 EXPECT_EQ(mock_layer->fake_has_platform_view(), false);
114 mock_layer->set_fake_has_platform_view(true);
115 EXPECT_EQ(mock_layer->fake_has_platform_view(), true);
116
117 EXPECT_EQ(mock_layer->fake_reads_surface(), false);
118 mock_layer->set_fake_reads_surface(true);
119 EXPECT_EQ(mock_layer->fake_reads_surface(), true);
120
121 EXPECT_EQ(mock_layer->fake_opacity_compatible(), false);
122 mock_layer->set_fake_opacity_compatible(true);
123 EXPECT_EQ(mock_layer->fake_opacity_compatible(), true);
124
125 EXPECT_EQ(mock_layer->fake_has_texture_layer(), false);
126 mock_layer->set_fake_has_texture_layer(true);
127 EXPECT_EQ(mock_layer->fake_has_texture_layer(), true);
128}
129
130} // namespace testing
131} // namespace flutter
sk_sp< DisplayList > Build()
Definition dl_builder.cc:66
void DrawPath(const DlPath &path, const DlPaint &paint) override
static DlPath MakeRectLTRB(DlScalar left, DlScalar top, DlScalar right, DlScalar bottom)
Definition dl_path.cc:43
static constexpr int kCallerCanApplyOpacity
static std::shared_ptr< MockLayer > MakeOpacityCompatible(const DlPath &path)
Definition mock_layer.h:35
TEST_F(DisplayListTest, Defaults)
LayerTestBase<::testing::Test > LayerTest
Definition layer_test.h:177
bool DisplayListsEQ_Verbose(const DisplayList *a, const DisplayList *b)
DEF_SWITCHES_START aot vmservice shared library Name of the *so containing AOT compiled Dart assets for launching the service isolate vm snapshot The VM snapshot data that will be memory mapped as read only SnapshotAssetPath must be present isolate snapshot The isolate snapshot data that will be memory mapped as read only SnapshotAssetPath must be present cache dir path
Definition switch_defs.h:52
static constexpr DlColor kBlue()
Definition dl_color.h:73
A 4x4 matrix using column-major storage.
Definition matrix.h:37
static constexpr Matrix MakeTranslation(const Vector3 &t)
Definition matrix.h:95
static constexpr Matrix MakeScale(const Vector3 &s)
Definition matrix.h:104
constexpr TRect TransformBounds(const Matrix &transform) const
Creates a new bounding box that contains this transformed rectangle.
Definition rect.h:472
static constexpr TRect MakeWH(Type width, Type height)
Definition rect.h:140