Flutter Engine
 
Loading...
Searching...
No Matches
flutter::testing::DisplayListTestBase< BaseT > Class Template Reference
Inheritance diagram for flutter::testing::DisplayListTestBase< BaseT >:

Public Types

typedef const std::function< void(DlCanvas &)> DlSetup
 
typedef const std::function< void(DlCanvas &, DlPaint &, DlRect &)> DlRenderer
 

Public Member Functions

 DisplayListTestBase ()=default
 

Static Public Member Functions

static DlOpReceiverToReceiver (DisplayListBuilder &builder)
 
static sk_sp< DisplayListBuild (DisplayListInvocation &invocation)
 
static sk_sp< DisplayListBuild (size_t g_index, size_t v_index)
 
static void check_defaults (DisplayListBuilder &builder, const DlRect &cull_rect=DisplayListBuilder::kMaxCullRect)
 
static void verify_inverted_bounds (DlSetup &setup, DlRenderer &renderer, DlPaint paint, DlRect render_rect, DlRect expected_bounds, const std::string &desc)
 
static void check_inverted_bounds (DlRenderer &renderer, const std::string &desc)
 

Detailed Description

template<typename BaseT>
class flutter::testing::DisplayListTestBase< BaseT >

Definition at line 54 of file display_list_unittests.cc.

Member Typedef Documentation

◆ DlRenderer

template<typename BaseT >
typedef const std::function<void(DlCanvas&, DlPaint&, DlRect&)> flutter::testing::DisplayListTestBase< BaseT >::DlRenderer

Definition at line 139 of file display_list_unittests.cc.

◆ DlSetup

template<typename BaseT >
typedef const std::function<void(DlCanvas&)> flutter::testing::DisplayListTestBase< BaseT >::DlSetup

Definition at line 138 of file display_list_unittests.cc.

Constructor & Destructor Documentation

◆ DisplayListTestBase()

template<typename BaseT >
flutter::testing::DisplayListTestBase< BaseT >::DisplayListTestBase ( )
default

Member Function Documentation

◆ Build() [1/2]

template<typename BaseT >
static sk_sp< DisplayList > flutter::testing::DisplayListTestBase< BaseT >::Build ( DisplayListInvocation invocation)
inlinestatic

Definition at line 62 of file display_list_unittests.cc.

62 {
63 DisplayListBuilder builder;
64 invocation.Invoke(ToReceiver(builder));
65 return builder.Build();
66 }
static DlOpReceiver & ToReceiver(DisplayListBuilder &builder)

References flutter::DisplayListBuilder::Build(), flutter::testing::DisplayListInvocation::Invoke(), and flutter::testing::DisplayListTestBase< BaseT >::ToReceiver().

◆ Build() [2/2]

template<typename BaseT >
static sk_sp< DisplayList > flutter::testing::DisplayListTestBase< BaseT >::Build ( size_t  g_index,
size_t  v_index 
)
inlinestatic

Definition at line 68 of file display_list_unittests.cc.

68 {
69 DisplayListBuilder builder;
70 DlOpReceiver& receiver =
72 uint32_t op_count = 0u;
73 size_t byte_count = 0u;
74 uint32_t depth = 0u;
75 uint32_t render_op_depth_cost = 1u;
76 for (size_t i = 0; i < allGroups.size(); i++) {
77 DisplayListInvocationGroup& group = allGroups[i];
78 size_t j = (i == g_index ? v_index : 0);
79 if (j >= group.variants.size()) {
80 continue;
81 }
82 DisplayListInvocation& invocation = group.variants[j];
83 op_count += invocation.op_count();
84 byte_count += invocation.raw_byte_count();
85 depth += invocation.depth_accumulated(render_op_depth_cost);
86 invocation.Invoke(receiver);
87 render_op_depth_cost =
88 invocation.adjust_render_op_depth_cost(render_op_depth_cost);
89 }
90 sk_sp<DisplayList> dl = builder.Build();
91 std::string name;
92 if (g_index >= allGroups.size()) {
93 name = "Default";
94 } else {
95 name = allGroups[g_index].op_name;
96 if (v_index >= allGroups[g_index].variants.size()) {
97 name += " skipped";
98 } else {
99 name += " variant " + std::to_string(v_index + 1);
100 }
101 }
102 EXPECT_EQ(dl->op_count(false), op_count) << name;
103 EXPECT_EQ(dl->bytes(false), byte_count + sizeof(DisplayList)) << name;
104 EXPECT_EQ(dl->total_depth(), depth) << name;
105 return dl;
106 }
static std::vector< testing::DisplayListInvocationGroup > allGroups
DEF_SWITCHES_START aot vmservice shared library name
Definition switch_defs.h:27

References flutter::testing::DisplayListInvocation::adjust_render_op_depth_cost(), flutter::testing::allGroups, flutter::DisplayListBuilder::Build(), flutter::testing::DisplayListInvocation::depth_accumulated(), i, flutter::testing::DisplayListInvocation::Invoke(), flutter::name, flutter::testing::DisplayListInvocation::op_count(), flutter::testing::DisplayListInvocation::raw_byte_count(), flutter::testing::DisplayListTestBase< BaseT >::ToReceiver(), and flutter::testing::DisplayListInvocationGroup::variants.

◆ check_defaults()

template<typename BaseT >
static void flutter::testing::DisplayListTestBase< BaseT >::check_defaults ( DisplayListBuilder builder,
const DlRect cull_rect = DisplayListBuilder::kMaxCullRect 
)
inlinestatic

Definition at line 108 of file display_list_unittests.cc.

110 {
111 DlPaint builder_paint = DisplayListBuilderTestingAttributes(builder);
112 DlPaint defaults;
113
114 EXPECT_EQ(builder_paint.isAntiAlias(), defaults.isAntiAlias());
115 EXPECT_EQ(builder_paint.isInvertColors(), defaults.isInvertColors());
116 EXPECT_EQ(builder_paint.getColor(), defaults.getColor());
117 EXPECT_EQ(builder_paint.getBlendMode(), defaults.getBlendMode());
118 EXPECT_EQ(builder_paint.getDrawStyle(), defaults.getDrawStyle());
119 EXPECT_EQ(builder_paint.getStrokeWidth(), defaults.getStrokeWidth());
120 EXPECT_EQ(builder_paint.getStrokeMiter(), defaults.getStrokeMiter());
121 EXPECT_EQ(builder_paint.getStrokeCap(), defaults.getStrokeCap());
122 EXPECT_EQ(builder_paint.getStrokeJoin(), defaults.getStrokeJoin());
123 EXPECT_EQ(builder_paint.getColorSource(), defaults.getColorSource());
124 EXPECT_EQ(builder_paint.getColorFilter(), defaults.getColorFilter());
125 EXPECT_EQ(builder_paint.getImageFilter(), defaults.getImageFilter());
126 EXPECT_EQ(builder_paint.getMaskFilter(), defaults.getMaskFilter());
127 EXPECT_EQ(builder_paint, defaults);
128 EXPECT_TRUE(builder_paint.isDefault());
129
130 EXPECT_EQ(builder.GetMatrix(), DlMatrix());
131
132 EXPECT_EQ(builder.GetLocalClipCoverage(), cull_rect);
133 EXPECT_EQ(builder.GetDestinationClipCoverage(), cull_rect);
134
135 EXPECT_EQ(builder.GetSaveCount(), 1);
136 }
DlPaint DisplayListBuilderTestingAttributes(DisplayListBuilder &builder)
impeller::Matrix DlMatrix
flutter::DlPaint DlPaint

References flutter::DisplayListBuilderTestingAttributes(), flutter::DlPaint::getBlendMode(), flutter::DlPaint::getColor(), flutter::DlPaint::getColorFilter(), flutter::DlPaint::getColorSource(), flutter::DisplayListBuilder::GetDestinationClipCoverage(), flutter::DlPaint::getDrawStyle(), flutter::DlPaint::getImageFilter(), flutter::DisplayListBuilder::GetLocalClipCoverage(), flutter::DlPaint::getMaskFilter(), flutter::DisplayListBuilder::GetMatrix(), flutter::DisplayListBuilder::GetSaveCount(), flutter::DlPaint::getStrokeCap(), flutter::DlPaint::getStrokeJoin(), flutter::DlPaint::getStrokeMiter(), flutter::DlPaint::getStrokeWidth(), flutter::DlPaint::isAntiAlias(), flutter::DlPaint::isDefault(), and flutter::DlPaint::isInvertColors().

◆ check_inverted_bounds()

template<typename BaseT >
static void flutter::testing::DisplayListTestBase< BaseT >::check_inverted_bounds ( DlRenderer renderer,
const std::string &  desc 
)
inlinestatic

Definition at line 155 of file display_list_unittests.cc.

156 {
157 DlRect rect = DlRect::MakeLTRB(0.0f, 0.0f, 10.0f, 10.0f);
158 DlRect invertedLR = DlRect::MakeLTRB(rect.GetRight(), rect.GetTop(),
159 rect.GetLeft(), rect.GetBottom());
160 DlRect invertedTB = DlRect::MakeLTRB(rect.GetLeft(), rect.GetBottom(),
161 rect.GetRight(), rect.GetTop());
162 DlRect invertedLTRB = DlRect::MakeLTRB(rect.GetRight(), rect.GetBottom(),
163 rect.GetLeft(), rect.GetTop());
164 auto empty_setup = [](DlCanvas&) {};
165
166 ASSERT_TRUE(rect.GetLeft() < rect.GetRight());
167 ASSERT_TRUE(rect.GetTop() < rect.GetBottom());
168 ASSERT_FALSE(rect.IsEmpty());
169 ASSERT_TRUE(invertedLR.GetLeft() > invertedLR.GetRight());
170 ASSERT_TRUE(invertedLR.IsEmpty());
171 ASSERT_TRUE(invertedTB.GetTop() > invertedTB.GetBottom());
172 ASSERT_TRUE(invertedTB.IsEmpty());
173 ASSERT_TRUE(invertedLTRB.GetLeft() > invertedLTRB.GetRight());
174 ASSERT_TRUE(invertedLTRB.GetTop() > invertedLTRB.GetBottom());
175 ASSERT_TRUE(invertedLTRB.IsEmpty());
176
177 DlPaint ref_paint = DlPaint();
178 DlRect ref_bounds = rect;
179 verify_inverted_bounds(empty_setup, renderer, ref_paint, invertedLR,
180 ref_bounds, desc + " LR swapped");
181 verify_inverted_bounds(empty_setup, renderer, ref_paint, invertedTB,
182 ref_bounds, desc + " TB swapped");
183 verify_inverted_bounds(empty_setup, renderer, ref_paint, invertedLTRB,
184 ref_bounds, desc + " LR&TB swapped");
185
186 // Round joins are used because miter joins greatly pad the bounds,
187 // but only on paths. So we use round joins for consistency there.
188 // We aren't fully testing all stroke-related bounds computations here,
189 // those are more fully tested in the render tests. We are simply
190 // checking that they are applied to the ordered bounds.
191 DlPaint stroke_paint = DlPaint() //
194 .setStrokeWidth(2.0f);
195 DlRect stroke_bounds = rect.Expand(1.0f, 1.0f);
196 verify_inverted_bounds(empty_setup, renderer, stroke_paint, invertedLR,
197 stroke_bounds, desc + " LR swapped, sw 2");
198 verify_inverted_bounds(empty_setup, renderer, stroke_paint, invertedTB,
199 stroke_bounds, desc + " TB swapped, sw 2");
200 verify_inverted_bounds(empty_setup, renderer, stroke_paint, invertedLTRB,
201 stroke_bounds, desc + " LR&TB swapped, sw 2");
202
203 DlBlurMaskFilter mask_filter(DlBlurStyle::kNormal, 2.0f);
204 DlPaint maskblur_paint = DlPaint() //
205 .setMaskFilter(&mask_filter);
206 DlRect maskblur_bounds = rect.Expand(6.0f, 6.0f);
207 verify_inverted_bounds(empty_setup, renderer, maskblur_paint, invertedLR,
208 maskblur_bounds, desc + " LR swapped, mask 2");
209 verify_inverted_bounds(empty_setup, renderer, maskblur_paint, invertedTB,
210 maskblur_bounds, desc + " TB swapped, mask 2");
211 verify_inverted_bounds(empty_setup, renderer, maskblur_paint, invertedLTRB,
212 maskblur_bounds, desc + " LR&TB swapped, mask 2");
213
214 DlErodeImageFilter erode_filter(2.0f, 2.0f);
215 DlPaint erode_paint = DlPaint() //
216 .setImageFilter(&erode_filter);
217 DlRect erode_bounds = rect.Expand(-2.0f, -2.0f);
218 verify_inverted_bounds(empty_setup, renderer, erode_paint, invertedLR,
219 erode_bounds, desc + " LR swapped, erode 2");
220 verify_inverted_bounds(empty_setup, renderer, erode_paint, invertedTB,
221 erode_bounds, desc + " TB swapped, erode 2");
222 verify_inverted_bounds(empty_setup, renderer, erode_paint, invertedLTRB,
223 erode_bounds, desc + " LR&TB swapped, erode 2");
224 }
DlPaint & setStrokeWidth(float width)
Definition dl_paint.h:115
DlPaint & setImageFilter(std::nullptr_t filter)
Definition dl_paint.h:167
DlPaint & setMaskFilter(std::nullptr_t filter)
Definition dl_paint.h:185
DlPaint & setDrawStyle(DlDrawStyle style)
Definition dl_paint.h:93
DlPaint & setStrokeJoin(DlStrokeJoin join)
Definition dl_paint.h:109
static void verify_inverted_bounds(DlSetup &setup, DlRenderer &renderer, DlPaint paint, DlRect render_rect, DlRect expected_bounds, const std::string &desc)
impeller::Rect DlRect
@ kStroke
strokes boundary of shapes
@ kNormal
fuzzy inside and outside
flutter::DlCanvas DlCanvas
constexpr TRect< T > Expand(T left, T top, T right, T bottom) const
Returns a rectangle with expanded edges. Negative expansion results in shrinking.
Definition rect.h:618
static constexpr TRect MakeLTRB(Type left, Type top, Type right, Type bottom)
Definition rect.h:129

References impeller::TRect< T >::Expand(), impeller::TRect< T >::GetBottom(), impeller::TRect< T >::GetLeft(), impeller::TRect< T >::GetRight(), impeller::TRect< T >::GetTop(), impeller::TRect< T >::IsEmpty(), flutter::kNormal, flutter::kRound, flutter::kStroke, impeller::TRect< Scalar >::MakeLTRB(), flutter::DlPaint::setDrawStyle(), flutter::DlPaint::setImageFilter(), flutter::DlPaint::setMaskFilter(), flutter::DlPaint::setStrokeJoin(), flutter::DlPaint::setStrokeWidth(), and flutter::testing::DisplayListTestBase< BaseT >::verify_inverted_bounds().

◆ ToReceiver()

template<typename BaseT >
static DlOpReceiver & flutter::testing::DisplayListTestBase< BaseT >::ToReceiver ( DisplayListBuilder builder)
inlinestatic

◆ verify_inverted_bounds()

template<typename BaseT >
static void flutter::testing::DisplayListTestBase< BaseT >::verify_inverted_bounds ( DlSetup setup,
DlRenderer renderer,
DlPaint  paint,
DlRect  render_rect,
DlRect  expected_bounds,
const std::string &  desc 
)
inlinestatic

Definition at line 141 of file display_list_unittests.cc.

146 {
147 DisplayListBuilder builder;
148 setup(builder);
149 renderer(builder, paint, render_rect);
150 auto dl = builder.Build();
151 EXPECT_EQ(dl->op_count(), 1u) << desc;
152 EXPECT_EQ(dl->GetBounds(), expected_bounds) << desc;
153 }

References flutter::DisplayListBuilder::Build().

Referenced by flutter::testing::DisplayListTestBase< BaseT >::check_inverted_bounds().


The documentation for this class was generated from the following file: