21std::vector<DisplayListComplexityCalculator*> Calculators() {
27std::vector<DisplayListComplexityCalculator*> AccumulatorCalculators() {
33 std::vector<DlPoint>
points;
35 points.emplace_back(10, 0);
36 points.emplace_back(10, 10);
37 points.emplace_back(20, 10);
38 points.emplace_back(20, 20);
45TEST(DisplayListComplexity, EmptyDisplayList) {
48 auto calculators = Calculators();
49 for (
auto calculator : calculators) {
50 ASSERT_EQ(calculator->Compute(display_list.get()), 0u);
54TEST(DisplayListComplexity, DisplayListCeiling) {
57 auto calculators = AccumulatorCalculators();
58 for (
auto calculator : calculators) {
59 calculator->SetComplexityCeiling(10u);
60 ASSERT_EQ(calculator->Compute(display_list.get()), 10u);
61 calculator->SetComplexityCeiling(std::numeric_limits<unsigned int>::max());
65TEST(DisplayListComplexity, NestedDisplayList) {
68 auto calculators = Calculators();
69 for (
auto calculator : calculators) {
74 ASSERT_GT(calculator->Compute(display_list.get()), 1u);
78TEST(DisplayListComplexity, AntiAliasing) {
81 auto display_list_no_aa = builder_no_aa.
Build();
86 auto display_list_aa = builder_aa.
Build();
88 auto calculators = AccumulatorCalculators();
89 for (
auto calculator : calculators) {
90 ASSERT_NE(calculator->Compute(display_list_no_aa.get()),
91 calculator->Compute(display_list_aa.get()));
95TEST(DisplayListComplexity, StrokeWidth) {
98 DlPaint().setStrokeWidth(0.0f));
99 auto display_list_stroke_0 = builder_stroke_0.
Build();
103 DlPaint().setStrokeWidth(1.0f));
104 auto display_list_stroke_1 = builder_stroke_1.
Build();
106 auto calculators = AccumulatorCalculators();
107 for (
auto calculator : calculators) {
108 ASSERT_NE(calculator->Compute(display_list_stroke_0.get()),
109 calculator->Compute(display_list_stroke_1.get()));
113TEST(DisplayListComplexity, Style) {
117 auto display_list_filled = builder_filled.
Build();
122 auto display_list_stroked = builder_stroked.
Build();
124 auto calculators = AccumulatorCalculators();
125 for (
auto calculator : calculators) {
126 ASSERT_NE(calculator->Compute(display_list_filled.get()),
127 calculator->Compute(display_list_stroked.get()));
131TEST(DisplayListComplexity, SaveLayers) {
133 builder.
SaveLayer(std::nullopt,
nullptr);
134 auto display_list = builder.
Build();
136 auto calculators = AccumulatorCalculators();
137 for (
auto calculator : calculators) {
138 ASSERT_NE(calculator->Compute(display_list.get()), 0u);
142TEST(DisplayListComplexity, DrawPath) {
147 line_path_builder.
Close();
149 auto display_list_line = builder_line.
Build();
155 quad_path_builder.
Close();
157 auto display_list_quad = builder_quad.
Build();
163 conic_path_builder.
Close();
165 auto display_list_conic = builder_conic.
Build();
173 auto display_list_cubic = builder_cubic.
Build();
175 auto calculators = AccumulatorCalculators();
176 for (
auto calculator : calculators) {
177 ASSERT_NE(calculator->Compute(display_list_line.get()), 0u);
178 ASSERT_NE(calculator->Compute(display_list_quad.get()), 0u);
179 ASSERT_NE(calculator->Compute(display_list_conic.get()), 0u);
180 ASSERT_NE(calculator->Compute(display_list_cubic.get()), 0u);
184TEST(DisplayListComplexity, DrawShadow) {
189 line_path_builder.
Close();
192 auto display_list_line = builder_line.
Build();
198 quad_path_builder.
Close();
201 auto display_list_quad = builder_quad.
Build();
207 conic_path_builder.
Close();
210 auto display_list_conic = builder_conic.
Build();
219 auto display_list_cubic = builder_cubic.
Build();
221 auto calculators = AccumulatorCalculators();
222 for (
auto calculator : calculators) {
223 ASSERT_NE(calculator->Compute(display_list_line.get()), 0u);
224 ASSERT_NE(calculator->Compute(display_list_quad.get()), 0u);
225 ASSERT_NE(calculator->Compute(display_list_conic.get()), 0u);
226 ASSERT_NE(calculator->Compute(display_list_cubic.get()), 0u);
230TEST(DisplayListComplexity, DrawOval) {
233 auto display_list = builder.
Build();
235 auto calculators = AccumulatorCalculators();
236 for (
auto calculator : calculators) {
237 ASSERT_NE(calculator->Compute(display_list.get()), 0u);
241TEST(DisplayListComplexity, DrawCircle) {
244 auto display_list = builder.
Build();
246 auto calculators = AccumulatorCalculators();
247 for (
auto calculator : calculators) {
248 ASSERT_NE(calculator->Compute(display_list.get()), 0u);
252TEST(DisplayListComplexity, DrawRoundRect) {
257 auto display_list = builder.
Build();
259 auto calculators = AccumulatorCalculators();
260 for (
auto calculator : calculators) {
261 ASSERT_NE(calculator->Compute(display_list.get()), 0u);
265TEST(DisplayListComplexity, DrawDiffRoundRect) {
272 auto display_list = builder.
Build();
274 auto calculators = AccumulatorCalculators();
275 for (
auto calculator : calculators) {
276 ASSERT_NE(calculator->Compute(display_list.get()), 0u);
280TEST(DisplayListComplexity, DrawArc) {
284 auto display_list = builder.
Build();
286 auto calculators = AccumulatorCalculators();
287 for (
auto calculator : calculators) {
288 ASSERT_NE(calculator->Compute(display_list.get()), 0u);
292TEST(DisplayListComplexity, DrawVertices) {
295 points.data(),
nullptr,
nullptr);
298 auto display_list = builder.
Build();
300 auto calculators = AccumulatorCalculators();
301 for (
auto calculator : calculators) {
302 ASSERT_NE(calculator->Compute(display_list.get()), 0u);
306TEST(DisplayListComplexity, DrawTextBlob) {
308 GetTestTextBlob(
"The quick brown fox jumps over the lazy dog.", 20.0f);
312 auto display_list = builder.
Build();
317 auto display_list_multiple = builder_multiple.
Build();
319 auto calculators = AccumulatorCalculators();
320 for (
auto calculator : calculators) {
321 ASSERT_NE(calculator->Compute(display_list.get()), 0u);
322 ASSERT_GT(calculator->Compute(display_list_multiple.get()),
323 calculator->Compute(display_list.get()));
327TEST(DisplayListComplexity, DrawPoints) {
332 auto display_list_lines = builder_lines.
Build();
337 auto display_list_points = builder_points.
Build();
342 auto display_list_polygon = builder_polygon.
Build();
344 auto calculators = AccumulatorCalculators();
345 for (
auto calculator : calculators) {
346 ASSERT_NE(calculator->Compute(display_list_lines.get()), 0u);
347 ASSERT_NE(calculator->Compute(display_list_points.get()), 0u);
348 ASSERT_NE(calculator->Compute(display_list_polygon.get()), 0u);
352TEST(DisplayListComplexity, DrawImage) {
358 auto display_list = builder.
Build();
360 auto calculators = AccumulatorCalculators();
361 for (
auto calculator : calculators) {
362 ASSERT_NE(calculator->Compute(display_list.get()), 0u);
366TEST(DisplayListComplexity, DrawImageNine) {
374 auto display_list = builder.
Build();
376 auto calculators = AccumulatorCalculators();
377 for (
auto calculator : calculators) {
378 ASSERT_NE(calculator->Compute(display_list.get()), 0u);
382TEST(DisplayListComplexity, DrawImageRect) {
391 auto display_list = builder.
Build();
393 auto calculators = AccumulatorCalculators();
394 for (
auto calculator : calculators) {
395 ASSERT_NE(calculator->Compute(display_list.get()), 0u);
399TEST(DisplayListComplexity, DrawAtlas) {
402 std::vector<DlRect> rects;
403 std::vector<DlRSTransform> xforms;
404 for (
int i = 0;
i < 10;
i++) {
410 builder.
DrawAtlas(
image, xforms.data(), rects.data(),
nullptr, 10,
413 auto display_list = builder.
Build();
415 auto calculators = AccumulatorCalculators();
416 for (
auto calculator : calculators) {
417 ASSERT_NE(calculator->Compute(display_list.get()), 0u);
void DrawOval(const DlRect &bounds, const DlPaint &paint) override
void DrawImageRect(const sk_sp< DlImage > &image, const DlRect &src, const DlRect &dst, DlImageSampling sampling, const DlPaint *paint=nullptr, DlSrcRectConstraint constraint=DlSrcRectConstraint::kFast) override
void DrawVertices(const std::shared_ptr< DlVertices > &vertices, DlBlendMode mode, const DlPaint &paint) override
void DrawImageNine(const sk_sp< DlImage > &image, const DlIRect ¢er, const DlRect &dst, DlFilterMode filter, const DlPaint *paint=nullptr) override
void DrawAtlas(const sk_sp< DlImage > &atlas, const DlRSTransform xform[], const DlRect tex[], const DlColor colors[], int count, DlBlendMode mode, DlImageSampling sampling, const DlRect *cullRect, const DlPaint *paint=nullptr) override
void DrawRoundRect(const DlRoundRect &rrect, const DlPaint &paint) override
void DrawArc(const DlRect &bounds, DlScalar start, DlScalar sweep, bool useCenter, const DlPaint &paint) override
void DrawShadow(const DlPath &path, const DlColor color, const DlScalar elevation, bool transparent_occluder, DlScalar dpr) override
Draws the shadow of the given |path| rendered in the provided |color| (which is only consulted for it...
void DrawImage(const sk_sp< DlImage > &image, const DlPoint &point, DlImageSampling sampling, const DlPaint *paint=nullptr) override
void DrawCircle(const DlPoint ¢er, DlScalar radius, const DlPaint &paint) override
void SaveLayer(const std::optional< DlRect > &bounds, const DlPaint *paint=nullptr, const DlImageFilter *backdrop=nullptr, std::optional< int64_t > backdrop_id=std::nullopt) override
void DrawLine(const DlPoint &p0, const DlPoint &p1, const DlPaint &paint) override
void DrawText(const std::shared_ptr< DlText > &text, DlScalar x, DlScalar y, const DlPaint &paint) override
sk_sp< DisplayList > Build()
void DrawPath(const DlPath &path, const DlPaint &paint) override
void DrawPoints(DlPointMode mode, uint32_t count, const DlPoint pts[], const DlPaint &paint) override
void DrawDiffRoundRect(const DlRoundRect &outer, const DlRoundRect &inner, const DlPaint &paint) override
void DrawRect(const DlRect &rect, const DlPaint &paint) override
static DisplayListGLComplexityCalculator * GetInstance()
static DisplayListComplexityCalculator * GetInstance()
DlPathBuilder & LineTo(DlPoint p2)
Draw a line from the current point to the indicated point p2.
DlPathBuilder & MoveTo(DlPoint p2)
Start a new contour that will originate at the indicated point p2.
const DlPath TakePath()
Returns the path constructed by this path builder and resets its internal state to the default state ...
DlPathBuilder & ConicCurveTo(DlPoint cp, DlPoint p2, DlScalar weight)
Draw a conic curve (a rational quadratic bezier curve) from the current point to the indicated point ...
DlPathBuilder & QuadraticCurveTo(DlPoint cp, DlPoint p2)
Draw a quadratic bezier curve from the current point to the indicated point p2, using the indicated p...
DlPathBuilder & Close()
The path is closed back to the location of the most recent MoveTo call. Contours that are filled are ...
DlPathBuilder & CubicCurveTo(DlPoint cp1, DlPoint cp2, DlPoint p2)
Draw a cubic bezier curve from the current point to the indicated point p2, using the indicated point...
static std::shared_ptr< DlTextSkia > Make(const sk_sp< SkTextBlob > &blob)
static std::shared_ptr< DlVertices > Make(DlVertexMode mode, int vertex_count, const DlPoint vertices[], const DlPoint texture_coordinates[], const DlColor colors[], int index_count=0, const uint16_t indices[]=nullptr, const DlRect *bounds=nullptr)
Constructs a DlVector with compact inline storage for all of its required and optional lists of data.
FlutterVulkanImage * image
sk_sp< DlImage > MakeTestImage(int w, int h, int checker_size)
sk_sp< DisplayList > GetSampleDisplayList()
std::vector< DlPoint > GetTestPoints(size_t count, DlISize canvas_size)
TEST(NativeAssetsManagerTest, NoAvailableAssets)
sk_sp< DisplayList > GetSampleNestedDisplayList()
sk_sp< SkTextBlob > GetTestTextBlob(int index)
impeller::RSTransform DlRSTransform
@ kLines
draw each separate pair of points as a line segment
@ kPolygon
draw each pair of overlapping points as a line segment
@ kPoints
draw each point separately
@ kTriangles
The vertices are taken 3 at a time to form a triangle.
@ kStroke
strokes boundary of shapes
@ kFill
fills interior of shapes
static constexpr DlColor kBlue()
static RoundRect MakeRectXY(const Rect &rect, Scalar x_radius, Scalar y_radius)
static constexpr TRect MakeXYWH(Type x, Type y, Type width, Type height)
std::vector< Point > points