Flutter Engine
 
Loading...
Searching...
No Matches
dl_op_spy_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
8
9#if IMPELLER_SUPPORTS_RENDERING
11#endif
12
17
18namespace flutter {
19namespace testing {
20
21// The following macros demonstrate that the DlOpSpy class is equivalent
22// to DisplayList::affects_transparent_surface() now that DisplayListBuilder
23// implements operation culling.
24// See https://github.com/flutter/flutter/issues/125403
25#define ASSERT_DID_DRAW(spy, dl) \
26 do { \
27 ASSERT_TRUE(spy.did_draw()); \
28 ASSERT_TRUE(dl->modifies_transparent_black()); \
29 } while (0)
30
31#define ASSERT_NO_DRAW(spy, dl) \
32 do { \
33 ASSERT_FALSE(spy.did_draw()); \
34 ASSERT_FALSE(dl->modifies_transparent_black()); \
35 } while (0)
36
37TEST(DlOpSpy, DidDrawIsFalseByDefault) {
38 DlOpSpy dl_op_spy;
39 ASSERT_FALSE(dl_op_spy.did_draw());
40}
41
42TEST(DlOpSpy, EmptyDisplayList) {
43 DisplayListBuilder builder;
44 sk_sp<DisplayList> dl = builder.Build();
45 DlOpSpy dl_op_spy;
46 dl->Dispatch(dl_op_spy);
47 ASSERT_NO_DRAW(dl_op_spy, dl);
48}
49
50TEST(DlOpSpy, SetColor) {
51 { // No Color set.
52 DisplayListBuilder builder;
53 DlPaint paint;
54 builder.DrawRect(DlRect::MakeWH(5, 5), paint);
55 sk_sp<DisplayList> dl = builder.Build();
56 DlOpSpy dl_op_spy;
57 dl->Dispatch(dl_op_spy);
58 ASSERT_DID_DRAW(dl_op_spy, dl);
59 }
60 { // Set transparent color.
61 DisplayListBuilder builder;
63 builder.DrawRect(DlRect::MakeWH(5, 5), paint);
64 sk_sp<DisplayList> dl = builder.Build();
65 DlOpSpy dl_op_spy;
66 dl->Dispatch(dl_op_spy);
67 ASSERT_NO_DRAW(dl_op_spy, dl);
68 }
69 { // Set black color.
70 DisplayListBuilder builder;
71 DlPaint paint(DlColor::kBlack());
72 builder.DrawRect(DlRect::MakeWH(5, 5), paint);
73 sk_sp<DisplayList> dl = builder.Build();
74 DlOpSpy dl_op_spy;
75 dl->Dispatch(dl_op_spy);
76 ASSERT_DID_DRAW(dl_op_spy, dl);
77 }
78}
79
80TEST(DlOpSpy, SetColorSource) {
81 { // Set null source
82 DisplayListBuilder builder;
83 DlPaint paint;
84 paint.setColorSource(nullptr);
85 builder.DrawRect(DlRect::MakeWH(5, 5), paint);
86 sk_sp<DisplayList> dl = builder.Build();
87 DlOpSpy dl_op_spy;
88 dl->Dispatch(dl_op_spy);
89 ASSERT_DID_DRAW(dl_op_spy, dl);
90 }
91 { // setColorSource(null) restores previous color visibility
92 DlOpSpy dl_op_spy;
93 DlOpReceiver* receiver = &dl_op_spy;
95 receiver->drawRect(DlRect::MakeWH(5, 5));
96 ASSERT_FALSE(dl_op_spy.did_draw());
97 DlColor colors[2] = {
100 };
101 float stops[2] = {
102 0.0f,
103 1.0f,
104 };
105 auto color_source = DlColorSource::MakeLinear({0, 0}, {10, 10}, 2, colors,
106 stops, DlTileMode::kClamp);
107 receiver->setColorSource(color_source.get());
108 receiver->setColorSource(nullptr);
109 receiver->drawRect(DlRect::MakeWH(5, 5));
110 ASSERT_FALSE(dl_op_spy.did_draw());
111 }
112}
113
114TEST(DlOpSpy, DrawColor) {
115 { // Black color source.
116 DisplayListBuilder builder;
117 auto color = DlColor::kBlack();
118 builder.DrawColor(color, DlBlendMode::kSrc);
119 sk_sp<DisplayList> dl = builder.Build();
120 DlOpSpy dl_op_spy;
121 dl->Dispatch(dl_op_spy);
122 ASSERT_DID_DRAW(dl_op_spy, dl);
123 }
124 { // Transparent color with kSrc.
125 DisplayListBuilder builder;
126 auto color = DlColor::kTransparent();
127 builder.DrawColor(color, DlBlendMode::kSrc);
128 sk_sp<DisplayList> dl = builder.Build();
129 DlOpSpy dl_op_spy;
130 dl->Dispatch(dl_op_spy);
131 ASSERT_NO_DRAW(dl_op_spy, dl);
132 }
133 { // Transparent color with kSrcOver.
134 DisplayListBuilder builder;
135 auto color = DlColor::kTransparent();
136 builder.DrawColor(color, DlBlendMode::kSrcOver);
137 sk_sp<DisplayList> dl = builder.Build();
138 DlOpSpy dl_op_spy;
139 dl->Dispatch(dl_op_spy);
140 ASSERT_NO_DRAW(dl_op_spy, dl);
141 }
142}
143
144TEST(DlOpSpy, DrawPaint) {
145 { // Transparent color in paint.
146 DisplayListBuilder builder;
148 builder.DrawPaint(paint);
149 sk_sp<DisplayList> dl = builder.Build();
150 DlOpSpy dl_op_spy;
151 dl->Dispatch(dl_op_spy);
152 ASSERT_NO_DRAW(dl_op_spy, dl);
153 }
154 { // black color in paint.
155 DisplayListBuilder builder;
156 DlPaint paint(DlColor::kBlack());
157 builder.DrawPaint(paint);
158 sk_sp<DisplayList> dl = builder.Build();
159 DlOpSpy dl_op_spy;
160 dl->Dispatch(dl_op_spy);
161 ASSERT_DID_DRAW(dl_op_spy, dl);
162 }
163}
164
165TEST(DlOpSpy, DrawLine) {
166 { // black
167 DisplayListBuilder builder;
168 DlPaint paint(DlColor::kBlack());
169 builder.DrawLine(DlPoint(0, 1), DlPoint(1, 2), paint);
170 sk_sp<DisplayList> dl = builder.Build();
171 DlOpSpy dl_op_spy;
172 dl->Dispatch(dl_op_spy);
173 ASSERT_DID_DRAW(dl_op_spy, dl);
174 }
175 { // transparent
176 DisplayListBuilder builder;
178 builder.DrawLine(DlPoint(0, 1), DlPoint(1, 2), paint);
179 sk_sp<DisplayList> dl = builder.Build();
180 DlOpSpy dl_op_spy;
181 dl->Dispatch(dl_op_spy);
182 ASSERT_NO_DRAW(dl_op_spy, dl);
183 }
184}
185
186TEST(DlOpSpy, DrawDashedLine) {
187 { // black
188 DisplayListBuilder builder;
189 DlPaint paint(DlColor::kBlack());
190 builder.DrawDashedLine(DlPoint(0, 1), DlPoint(1, 2), 1.0f, 1.0f, paint);
191 sk_sp<DisplayList> dl = builder.Build();
192 DlOpSpy dl_op_spy;
193 dl->Dispatch(dl_op_spy);
194 ASSERT_DID_DRAW(dl_op_spy, dl);
195 }
196 { // transparent
197 DisplayListBuilder builder;
199 builder.DrawDashedLine(DlPoint(0, 1), DlPoint(1, 2), 1.0f, 1.0f, paint);
200 sk_sp<DisplayList> dl = builder.Build();
201 DlOpSpy dl_op_spy;
202 dl->Dispatch(dl_op_spy);
203 ASSERT_NO_DRAW(dl_op_spy, dl);
204 }
205}
206
207TEST(DlOpSpy, DrawRect) {
208 { // black
209 DisplayListBuilder builder;
210 DlPaint paint(DlColor::kBlack());
211 builder.DrawRect(DlRect::MakeWH(5, 5), paint);
212 sk_sp<DisplayList> dl = builder.Build();
213 DlOpSpy dl_op_spy;
214 dl->Dispatch(dl_op_spy);
215 ASSERT_DID_DRAW(dl_op_spy, dl);
216 }
217 { // transparent
218 DisplayListBuilder builder;
220 builder.DrawRect(DlRect::MakeWH(5, 5), paint);
221 sk_sp<DisplayList> dl = builder.Build();
222 DlOpSpy dl_op_spy;
223 dl->Dispatch(dl_op_spy);
224 ASSERT_NO_DRAW(dl_op_spy, dl);
225 }
226}
227
228TEST(DlOpSpy, DrawOval) {
229 { // black
230 DisplayListBuilder builder;
231 DlPaint paint(DlColor::kBlack());
232 builder.DrawOval(DlRect::MakeWH(5, 5), paint);
233 sk_sp<DisplayList> dl = builder.Build();
234 DlOpSpy dl_op_spy;
235 dl->Dispatch(dl_op_spy);
236 ASSERT_DID_DRAW(dl_op_spy, dl);
237 }
238 { // transparent
239 DisplayListBuilder builder;
241 builder.DrawOval(DlRect::MakeWH(5, 5), paint);
242 sk_sp<DisplayList> dl = builder.Build();
243 DlOpSpy dl_op_spy;
244 dl->Dispatch(dl_op_spy);
245 ASSERT_NO_DRAW(dl_op_spy, dl);
246 }
247}
248
249TEST(DlOpSpy, DrawCircle) {
250 { // black
251 DisplayListBuilder builder;
252 DlPaint paint(DlColor::kBlack());
253 builder.DrawCircle(DlPoint(5, 5), 1.0, paint);
254 sk_sp<DisplayList> dl = builder.Build();
255 DlOpSpy dl_op_spy;
256 dl->Dispatch(dl_op_spy);
257 ASSERT_DID_DRAW(dl_op_spy, dl);
258 }
259 { // transparent
260 DisplayListBuilder builder;
262 builder.DrawCircle(DlPoint(5, 5), 1.0, paint);
263 sk_sp<DisplayList> dl = builder.Build();
264 DlOpSpy dl_op_spy;
265 dl->Dispatch(dl_op_spy);
266 ASSERT_NO_DRAW(dl_op_spy, dl);
267 }
268}
269
270TEST(DlOpSpy, DrawRRect) {
271 { // black
272 DisplayListBuilder builder;
273 DlPaint paint(DlColor::kBlack());
275 sk_sp<DisplayList> dl = builder.Build();
276 DlOpSpy dl_op_spy;
277 dl->Dispatch(dl_op_spy);
278 ASSERT_DID_DRAW(dl_op_spy, dl);
279 }
280 { // transparent
281 DisplayListBuilder builder;
284 sk_sp<DisplayList> dl = builder.Build();
285 DlOpSpy dl_op_spy;
286 dl->Dispatch(dl_op_spy);
287 ASSERT_NO_DRAW(dl_op_spy, dl);
288 }
289}
290
291TEST(DlOpSpy, DrawPath) {
292 { // black line
293 DisplayListBuilder builder;
294 DlPaint paint(DlColor::kBlack());
296 DlPathBuilder path_builder;
297 path_builder.MoveTo({0, 1});
298 path_builder.LineTo({1, 1});
299 builder.DrawPath(path_builder.TakePath(), paint);
300 sk_sp<DisplayList> dl = builder.Build();
301 DlOpSpy dl_op_spy;
302 dl->Dispatch(dl_op_spy);
303 ASSERT_DID_DRAW(dl_op_spy, dl);
304 }
305 { // triangle
306 DisplayListBuilder builder;
307 DlPaint paint(DlColor::kBlack());
308 DlPathBuilder path_builder;
309 path_builder.MoveTo({0, 0});
310 path_builder.LineTo({1, 0});
311 path_builder.LineTo({0, 1});
312 builder.DrawPath(path_builder.TakePath(), paint);
313 sk_sp<DisplayList> dl = builder.Build();
314 DlOpSpy dl_op_spy;
315 dl->Dispatch(dl_op_spy);
316 ASSERT_DID_DRAW(dl_op_spy, dl);
317 }
318 { // transparent line
319 DisplayListBuilder builder;
322 DlPathBuilder path_builder;
323 path_builder.MoveTo({0, 1});
324 path_builder.LineTo({1, 1});
325 builder.DrawPath(path_builder.TakePath(), paint);
326 sk_sp<DisplayList> dl = builder.Build();
327 DlOpSpy dl_op_spy;
328 dl->Dispatch(dl_op_spy);
329 ASSERT_NO_DRAW(dl_op_spy, dl);
330 }
331}
332
333TEST(DlOpSpy, DrawArc) {
334 { // black
335 DisplayListBuilder builder;
336 DlPaint paint(DlColor::kBlack());
337 builder.DrawArc(DlRect::MakeWH(5, 5), 0, 1, true, paint);
338 sk_sp<DisplayList> dl = builder.Build();
339 DlOpSpy dl_op_spy;
340 dl->Dispatch(dl_op_spy);
341 ASSERT_DID_DRAW(dl_op_spy, dl);
342 }
343 { // transparent
344 DisplayListBuilder builder;
346 builder.DrawArc(DlRect::MakeWH(5, 5), 0, 1, true, paint);
347 sk_sp<DisplayList> dl = builder.Build();
348 DlOpSpy dl_op_spy;
349 dl->Dispatch(dl_op_spy);
350 ASSERT_NO_DRAW(dl_op_spy, dl);
351 }
352}
353
354TEST(DlOpSpy, DrawPoints) {
355 { // black
356 DisplayListBuilder builder;
357 DlPaint paint(DlColor::kBlack());
358 const DlPoint points[] = {DlPoint(5, 4)};
359 builder.DrawPoints(DlPointMode::kPoints, 1, points, paint);
360 sk_sp<DisplayList> dl = builder.Build();
361 DlOpSpy dl_op_spy;
362 dl->Dispatch(dl_op_spy);
363 ASSERT_DID_DRAW(dl_op_spy, dl);
364 }
365 { // transparent
366 DisplayListBuilder builder;
368 const DlPoint points[] = {DlPoint(5, 4)};
369 builder.DrawPoints(DlPointMode::kPoints, 1, points, paint);
370 sk_sp<DisplayList> dl = builder.Build();
371 DlOpSpy dl_op_spy;
372 dl->Dispatch(dl_op_spy);
373 ASSERT_NO_DRAW(dl_op_spy, dl);
374 }
375}
376
377TEST(DlOpSpy, DrawVertices) {
378 { // black
379 DisplayListBuilder builder;
380 DlPaint paint(DlColor::kBlack());
381 const DlPoint vertices[] = {
382 DlPoint(5, 5),
383 DlPoint(5, 15),
384 DlPoint(15, 5),
385 };
386 const DlPoint texture_coordinates[] = {
387 DlPoint(5, 5),
388 DlPoint(15, 5),
389 DlPoint(5, 15),
390 };
391 const DlColor colors[] = {
395 };
396 auto dl_vertices = DlVertices::Make(DlVertexMode::kTriangles, 3, vertices,
397 texture_coordinates, colors, 0);
398 builder.DrawVertices(dl_vertices, DlBlendMode::kSrc, paint);
399 sk_sp<DisplayList> dl = builder.Build();
400 DlOpSpy dl_op_spy;
401 dl->Dispatch(dl_op_spy);
402 ASSERT_DID_DRAW(dl_op_spy, dl);
403 }
404 { // transparent
405 DisplayListBuilder builder;
407 const DlPoint vertices[] = {
408 DlPoint(5, 5),
409 DlPoint(5, 15),
410 DlPoint(15, 5),
411 };
412 const DlPoint texture_coordinates[] = {
413 DlPoint(5, 5),
414 DlPoint(15, 5),
415 DlPoint(5, 15),
416 };
417 const DlColor colors[] = {
421 };
422 auto dl_vertices = DlVertices::Make(DlVertexMode::kTriangles, 3, vertices,
423 texture_coordinates, colors, 0);
424 builder.DrawVertices(dl_vertices, DlBlendMode::kSrc, paint);
425 sk_sp<DisplayList> dl = builder.Build();
426 DlOpSpy dl_op_spy;
427 dl->Dispatch(dl_op_spy);
428 ASSERT_NO_DRAW(dl_op_spy, dl);
429 }
430}
431
432TEST(DlOpSpy, Images) {
433 { // DrawImage
434 DisplayListBuilder builder;
435 DlPaint paint(DlColor::kBlack());
437 sk_sp<DisplayList> dl = builder.Build();
438 DlOpSpy dl_op_spy;
439 dl->Dispatch(dl_op_spy);
440 ASSERT_DID_DRAW(dl_op_spy, dl);
441 }
442 { // DrawImageRect
443 DisplayListBuilder builder;
444 DlPaint paint(DlColor::kBlack());
447 sk_sp<DisplayList> dl = builder.Build();
448 DlOpSpy dl_op_spy;
449 dl->Dispatch(dl_op_spy);
450 ASSERT_DID_DRAW(dl_op_spy, dl);
451 }
452 { // DrawImageNine
453 DisplayListBuilder builder;
454 DlPaint paint(DlColor::kBlack());
457 sk_sp<DisplayList> dl = builder.Build();
458 DlOpSpy dl_op_spy;
459 dl->Dispatch(dl_op_spy);
460 ASSERT_DID_DRAW(dl_op_spy, dl);
461 }
462 { // DrawAtlas
463 DisplayListBuilder builder;
464 DlPaint paint(DlColor::kBlack());
465 const DlRSTransform xform[] = {
466 DlRSTransform::Make({0, 0}, 1.0f, DlDegrees(0)),
467 };
468 const DlRect tex[] = {DlRect::MakeXYWH(10, 10, 10, 10)};
469 DlRect cull_rect = DlRect::MakeWH(5, 5);
470 builder.DrawAtlas(kTestImage1, xform, tex, nullptr, 1, DlBlendMode::kSrc,
471 DlImageSampling::kLinear, &cull_rect);
472 sk_sp<DisplayList> dl = builder.Build();
473 DlOpSpy dl_op_spy;
474 dl->Dispatch(dl_op_spy);
475 ASSERT_DID_DRAW(dl_op_spy, dl);
476 }
477}
478
479TEST(DlOpSpy, DrawDisplayList) {
480 { // Recursive Transparent DisplayList
481 DisplayListBuilder builder;
483 builder.DrawPaint(paint);
484 sk_sp<DisplayList> dl = builder.Build();
485
486 DisplayListBuilder builder_parent;
487 DlPaint paint_parent(DlColor::kTransparent());
488 builder_parent.DrawPaint(paint_parent);
489 builder_parent.DrawDisplayList(dl, 1);
490 sk_sp<DisplayList> dl2 = builder_parent.Build();
491
492 DlOpSpy dl_op_spy;
493 dl2->Dispatch(dl_op_spy);
494 ASSERT_NO_DRAW(dl_op_spy, dl2);
495 }
496 { // Sub non-transparent DisplayList,
497 DisplayListBuilder builder;
498 DlPaint paint(DlColor::kBlack());
499 builder.DrawPaint(paint);
500 sk_sp<DisplayList> dl = builder.Build();
501
502 DisplayListBuilder builder_parent;
503 DlPaint paint_parent(DlColor::kTransparent());
504 builder_parent.DrawPaint(paint_parent);
505 builder_parent.DrawDisplayList(dl, 1);
506 sk_sp<DisplayList> dl2 = builder_parent.Build();
507
508 DlOpSpy dl_op_spy;
509 dl2->Dispatch(dl_op_spy);
510 ASSERT_DID_DRAW(dl_op_spy, dl2);
511 }
512
513 { // Sub non-transparent DisplayList, 0 opacity
514 DisplayListBuilder builder;
515 DlPaint paint(DlColor::kBlack());
516 builder.DrawPaint(paint);
517 sk_sp<DisplayList> dl = builder.Build();
518
519 DisplayListBuilder builder_parent;
520 DlPaint paint_parent(DlColor::kTransparent());
521 builder_parent.DrawPaint(paint_parent);
522 builder_parent.DrawDisplayList(dl, 0);
523 sk_sp<DisplayList> dl2 = builder_parent.Build();
524
525 DlOpSpy dl_op_spy;
526 dl2->Dispatch(dl_op_spy);
527 ASSERT_NO_DRAW(dl_op_spy, dl2);
528 }
529
530 { // Parent non-transparent DisplayList
531 DisplayListBuilder builder;
533 builder.DrawPaint(paint);
534 sk_sp<DisplayList> dl = builder.Build();
535
536 DisplayListBuilder builder_parent;
537 DlPaint paint_parent(DlColor::kBlack());
538 builder_parent.DrawPaint(paint_parent);
539 builder_parent.DrawDisplayList(dl, 0);
540 sk_sp<DisplayList> dl2 = builder_parent.Build();
541
542 DlOpSpy dl_op_spy;
543 dl2->Dispatch(dl_op_spy);
544 ASSERT_DID_DRAW(dl_op_spy, dl2);
545 }
546}
547
548#if IMPELLER_SUPPORTS_RENDERING
549TEST(DlOpSpy, DrawTextFrame) {
550 { // Non-transparent color.
551 auto test_text = DlTextImpeller::MakeFromBlob(GetTestTextBlob(42));
552 DisplayListBuilder builder;
553 DlPaint paint(DlColor::kBlack());
554 std::string string = "xx";
555 builder.DrawText(test_text, 1, 1, paint);
556 sk_sp<DisplayList> dl = builder.Build();
557 DlOpSpy dl_op_spy;
558 dl->Dispatch(dl_op_spy);
559 ASSERT_DID_DRAW(dl_op_spy, dl);
560 }
561 { // transparent color.
562 auto test_text = DlTextImpeller::MakeFromBlob(GetTestTextBlob(43));
563 DisplayListBuilder builder;
564 DlPaint paint(DlColor::kTransparent());
565 std::string string = "xx";
566 builder.DrawText(test_text, 1, 1, paint);
567 sk_sp<DisplayList> dl = builder.Build();
568 DlOpSpy dl_op_spy;
569 dl->Dispatch(dl_op_spy);
570 ASSERT_NO_DRAW(dl_op_spy, dl);
571 }
572}
573#endif
574
575TEST(DlOpSpy, DrawTextBlob) {
576 { // Non-transparent color.
577 DisplayListBuilder builder;
578 DlPaint paint(DlColor::kBlack());
579 std::string string = "xx";
580 builder.DrawText(DlTextSkia::Make(GetTestTextBlob(42)), 1, 1, paint);
581 sk_sp<DisplayList> dl = builder.Build();
582 DlOpSpy dl_op_spy;
583 dl->Dispatch(dl_op_spy);
584 ASSERT_DID_DRAW(dl_op_spy, dl);
585 }
586 { // transparent color.
587 DisplayListBuilder builder;
589 std::string string = "xx";
590 builder.DrawText(DlTextSkia::Make(GetTestTextBlob(43)), 1, 1, paint);
591 sk_sp<DisplayList> dl = builder.Build();
592 DlOpSpy dl_op_spy;
593 dl->Dispatch(dl_op_spy);
594 ASSERT_NO_DRAW(dl_op_spy, dl);
595 }
596}
597
598TEST(DlOpSpy, DrawShadow) {
599 { // valid shadow
600 DisplayListBuilder builder;
601 DlPaint paint;
602 DlColor color = DlColor::kBlack();
603 builder.DrawShadow(kTestPath1, color, 1, false, 1);
604 sk_sp<DisplayList> dl = builder.Build();
605 DlOpSpy dl_op_spy;
606 dl->Dispatch(dl_op_spy);
607 ASSERT_DID_DRAW(dl_op_spy, dl);
608 }
609 { // transparent color
610 DisplayListBuilder builder;
611 DlPaint paint;
613 builder.DrawShadow(kTestPath1, color, 1, false, 1);
614 sk_sp<DisplayList> dl = builder.Build();
615 DlOpSpy dl_op_spy;
616 dl->Dispatch(dl_op_spy);
617 ASSERT_NO_DRAW(dl_op_spy, dl);
618 }
619}
620
621} // namespace testing
622} // namespace flutter
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 &center, 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 DrawColor(DlColor color, DlBlendMode mode) override
void DrawCircle(const DlPoint &center, DlScalar radius, const DlPaint &paint) 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
void DrawDisplayList(const sk_sp< DisplayList > display_list, DlScalar opacity=SK_Scalar1) override
void DrawPaint(const DlPaint &paint) override
void DrawDashedLine(const DlPoint &p0, const DlPoint &p1, DlScalar on_length, DlScalar off_length, const DlPaint &paint) override
sk_sp< DisplayList > Build()
Definition dl_builder.cc:66
void DrawPath(const DlPath &path, const DlPaint &paint) override
void DrawPoints(DlPointMode mode, uint32_t count, const DlPoint pts[], const DlPaint &paint) override
void DrawRect(const DlRect &rect, const DlPaint &paint) override
static std::shared_ptr< DlColorSource > MakeLinear(const DlPoint start_point, const DlPoint end_point, uint32_t stop_count, const DlColor *colors, const float *stops, DlTileMode tile_mode, const DlMatrix *matrix=nullptr)
Internal API for rendering recorded display lists to backends.
virtual void setColorSource(const DlColorSource *source)=0
virtual void setColor(DlColor color)=0
virtual void drawRect(const DlRect &rect)=0
bool did_draw()
Returns true if any non transparent content has been drawn.
Definition dl_op_spy.cc:9
DlPaint & setDrawStyle(DlDrawStyle style)
Definition dl_paint.h:93
DlPaint & setColorSource(std::nullptr_t source)
Definition dl_paint.h:131
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 ...
static std::shared_ptr< DlTextImpeller > MakeFromBlob(const sk_sp< SkTextBlob > &blob)
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.
#define ASSERT_DID_DRAW(spy, dl)
#define ASSERT_NO_DRAW(spy, dl)
static const DlPath kTestPath1
static auto kTestImage1
TEST(NativeAssetsManagerTest, NoAvailableAssets)
sk_sp< SkTextBlob > GetTestTextBlob(int index)
impeller::Degrees DlDegrees
@ kPoints
draw each point separately
@ kTriangles
The vertices are taken 3 at a time to form a triangle.
@ kStroke
strokes boundary of shapes
impeller::Point DlPoint
static constexpr DlColor kBlue()
Definition dl_color.h:73
static constexpr DlColor kBlack()
Definition dl_color.h:69
static constexpr DlColor kTransparent()
Definition dl_color.h:68
static constexpr DlColor kRed()
Definition dl_color.h:71
static constexpr DlColor kGreen()
Definition dl_color.h:72
static RSTransform Make(Point origin, Scalar scale, Radians radians)
Definition rstransform.h:38
static RoundRect MakeRect(const Rect &rect)
Definition round_rect.h:19
static constexpr TRect MakeWH(Type width, Type height)
Definition rect.h:140
static constexpr TRect MakeXYWH(Type x, Type y, Type width, Type height)
Definition rect.h:136
std::vector< Point > points