Flutter Engine Uber Docs
Docs for the entire Flutter Engine repo.
 
Loading...
Searching...
No Matches
dl_test_snippets.h
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
5#ifndef FLUTTER_DISPLAY_LIST_TESTING_DL_TEST_SNIPPETS_H_
6#define FLUTTER_DISPLAY_LIST_TESTING_DL_TEST_SNIPPETS_H_
7
16
17#include "third_party/skia/include/core/SkPath.h"
18#include "third_party/skia/include/core/SkRRect.h"
19#include "third_party/skia/include/core/SkSurface.h"
20#include "third_party/skia/include/effects/SkImageFilters.h"
21#include "third_party/skia/include/effects/SkRuntimeEffect.h"
22
23namespace flutter {
24namespace testing {
25
26sk_sp<DisplayList> GetSampleDisplayList();
27sk_sp<DisplayList> GetSampleDisplayList(int ops);
28sk_sp<DisplayList> GetSampleNestedDisplayList();
29sk_sp<DlImage> MakeTestImage(int w, int h, int checker_size);
30sk_sp<DlImage> MakeTestImage(int w, int h, DlColor color);
31
32typedef const std::function<void(DlOpReceiver&)> DlInvoker;
33
34constexpr DlPoint kEndPoints[] = {
35 {0, 0},
36 {100, 100},
37};
43constexpr float kStops[] = {
44 0.0,
45 0.5,
46 1.0,
47};
48
49// clang-format off
50constexpr float kRotateColorMatrix[20] = {
51 0, 1, 0, 0, 0,
52 0, 0, 1, 0, 0,
53 1, 0, 0, 0, 0,
54 0, 0, 0, 1, 0,
55};
56constexpr float kInvertColorMatrix[20] = {
57 -1.0, 0, 0, 1.0, 0,
58 0, -1.0, 0, 1.0, 0,
59 0, 0, -1.0, 1.0, 0,
60 1.0, 1.0, 1.0, 1.0, 0,
61};
62// clang-format on
63
64constexpr DlPoint kTestPoints[] = {
65 {10, 10},
66 {20, 20},
67 {10, 20},
68 {20, 10},
69};
70#define TestPointCount sizeof(kTestPoints) / (sizeof(kTestPoints[0]))
71
74
75static auto kTestImage1 = MakeTestImage(40, 40, 5);
76static auto kTestImage2 = MakeTestImage(50, 50, 5);
77static auto kTestSkImage =
78 MakeTestImage(30, 30, 5)->asSkiaImage()->skia_image();
79
80static const std::shared_ptr<DlColorSource> kTestSource1 =
85static const std::shared_ptr<DlColorSource> kTestSource2 =
87 kEndPoints[1],
88 3,
89 kColors,
90 kStops,
92static const std::shared_ptr<DlColorSource> kTestSource3 =
94 10.0,
95 3,
96 kColors,
97 kStops,
99static const std::shared_ptr<DlColorSource> kTestSource4 =
101 10.0,
102 kEndPoints[1],
103 200.0,
104 3,
105 kColors,
106 kStops,
108static const std::shared_ptr<DlColorSource> kTestSource5 =
110 0.0,
111 360.0,
112 3,
113 kColors,
114 kStops,
116
117static const auto kTestBlendColorFilter1 =
118 DlColorFilter::MakeBlend(DlColor::kRed(), DlBlendMode::kDstATop);
119static const auto kTestBlendColorFilter2 =
120 DlColorFilter::MakeBlend(DlColor::kBlue(), DlBlendMode::kDstATop);
121static const auto kTestBlendColorFilter3 =
122 DlColorFilter::MakeBlend(DlColor::kRed(), DlBlendMode::kDstOver);
123static const auto kTestMatrixColorFilter1 =
125static const auto kTestMatrixColorFilter2 =
127
129 5.0,
132 5.0,
135 6.0,
138 5.0,
173constexpr DlRect kTestBounds = DlRect::MakeLTRB(10, 10, 50, 60);
174constexpr SkRect kTestSkBounds = SkRect::MakeLTRB(10, 10, 50, 60);
179static const SkRRect kTestSkRRect = SkRRect::MakeRectXY(kTestSkBounds, 5, 5);
180static const SkRRect kTestRRectRect = SkRRect::MakeRect(kTestSkBounds);
183static const SkRRect kTestSkInnerRRect =
184 SkRRect::MakeRectXY(kTestSkBounds.makeInset(5, 5), 2, 2);
188static const DlPath kTestPath1 =
189 DlPath(SkPath::Polygon({{0, 0}, {10, 10}, {10, 0}, {0, 10}}, true));
190static const DlPath kTestPath2 =
191 DlPath(SkPath::Polygon({{0, 0}, {10, 10}, {0, 10}, {10, 0}}, true));
192static const DlPath kTestPath3 =
193 DlPath(SkPath::Polygon({{0, 0}, {10, 10}, {10, 0}, {0, 10}}, false));
194
195static const std::shared_ptr<DlVertices> kTestVertices1 =
197 3,
199 nullptr,
200 kColors);
201static const std::shared_ptr<DlVertices> kTestVertices2 =
203 3,
205 nullptr,
206 kColors);
207
208static sk_sp<DisplayList> MakeTestDisplayList(int w, int h, SkColor color) {
209 DisplayListBuilder builder;
210 builder.DrawRect(DlRect::MakeWH(w, h), DlPaint(DlColor(color)));
211 return builder.Build();
212}
213static sk_sp<DisplayList> TestDisplayList1 =
214 MakeTestDisplayList(20, 20, SK_ColorGREEN);
215static sk_sp<DisplayList> TestDisplayList2 =
216 MakeTestDisplayList(25, 25, SK_ColorBLUE);
217
218static const sk_sp<DlRuntimeEffect> kTestRuntimeEffect1 =
220 SkRuntimeEffect::MakeForShader(
221 SkString("vec4 main(vec2 p) { return vec4(0); }"))
222 .effect);
223static const sk_sp<DlRuntimeEffect> kTestRuntimeEffect2 =
225 SkRuntimeEffect::MakeForShader(
226 SkString("vec4 main(vec2 p) { return vec4(1); }"))
227 .effect);
228
229SkFont CreateTestFontOfSize(DlScalar scalar);
230
231sk_sp<SkTextBlob> GetTestTextBlob(const std::string& str,
232 DlScalar font_size = 20.0f);
233sk_sp<SkTextBlob> GetTestTextBlob(int index);
234#if IMPELLER_SUPPORTS_RENDERING
235std::shared_ptr<impeller::TextFrame> GetTestTextFrame(int index);
236#endif
237
239 // ----------------------------------
240 // Required fields for initialization
241 uint32_t op_count_;
243
245
247 // ----------------------------------
248
249 // ----------------------------------
250 // Optional fields for initialization
251 uint32_t additional_depth_ = 0u;
253 // ----------------------------------
254
255 bool is_empty() { return byte_count_ == 0; }
256
257 uint32_t op_count() { return op_count_; }
258 // byte count for the individual ops, no DisplayList overhead
259 size_t raw_byte_count() { return byte_count_; }
260 // byte count for the ops with DisplayList overhead, comparable
261 // to |DisplayList.byte_count().
262 size_t byte_count() { return sizeof(DisplayList) + byte_count_; }
263
264 uint32_t depth_accumulated(uint32_t depth_scale = 1u) {
265 return depth_op_count_ * depth_scale + additional_depth_;
266 }
267 uint32_t depth_op_count() { return depth_op_count_; }
268 uint32_t additional_depth() { return additional_depth_; }
269 uint32_t adjust_render_op_depth_cost(uint32_t previous_cost) {
270 return render_op_cost_override_ == 0u //
271 ? previous_cost
273 }
274
275 void Invoke(DlOpReceiver& builder) { invoker_(builder); }
276};
277
279 std::string op_name;
280 std::vector<DisplayListInvocation> variants;
281};
282
283std::vector<DisplayListInvocationGroup> CreateAllRenderingOps();
284std::vector<DisplayListInvocationGroup> CreateAllGroups();
285
286} // namespace testing
287} // namespace flutter
288
289#endif // FLUTTER_DISPLAY_LIST_TESTING_DL_TEST_SNIPPETS_H_
sk_sp< DisplayList > Build()
void DrawRect(const DlRect &rect, const DlPaint &paint) override
static std::shared_ptr< const DlColorFilter > MakeBlend(DlColor color, DlBlendMode mode)
static std::shared_ptr< const DlColorFilter > MakeMatrix(const float matrix[20])
static std::shared_ptr< DlColorSource > MakeSweep(DlPoint center, DlScalar start, DlScalar end, uint32_t stop_count, const DlColor *colors, const float *stops, DlTileMode tile_mode, const DlMatrix *matrix=nullptr)
static std::shared_ptr< DlColorSource > MakeImage(const sk_sp< const DlImage > &image, DlTileMode horizontal_tile_mode, DlTileMode vertical_tile_mode, DlImageSampling sampling=DlImageSampling::kLinear, const DlMatrix *matrix=nullptr)
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)
static std::shared_ptr< DlColorSource > MakeConical(DlPoint start_center, DlScalar start_radius, DlPoint end_center, DlScalar end_radius, uint32_t stop_count, const DlColor *colors, const float *stops, DlTileMode tile_mode, const DlMatrix *matrix=nullptr)
static std::shared_ptr< DlColorSource > MakeRadial(DlPoint center, DlScalar radius, 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.
static DlPath MakeRoundRect(const DlRoundRect &rrect)
Definition dl_path.cc:72
static DlPath MakeRect(const DlRect &rect)
Definition dl_path.cc:39
static DlPath MakeOval(const DlRect &bounds)
Definition dl_path.cc:57
static sk_sp< DlRuntimeEffect > Make(const sk_sp< SkRuntimeEffect > &runtime_effect)
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.
static const DlComposeImageFilter kTestComposeImageFilter2(kTestBlurImageFilter2, kTestMatrixImageFilter1)
static const DlPath kTestPathOval
static const DlDilateImageFilter kTestDilateImageFilter2(6.0, 5.0)
static const std::shared_ptr< DlColorSource > kTestSource3
constexpr float kStops[]
const std::function< void(DlOpReceiver &)> DlInvoker
static const auto kTestMatrixColorFilter2
static auto kTestSkImage
static const sk_sp< DlRuntimeEffect > kTestRuntimeEffect1
static const DlBlurMaskFilter kTestMaskFilter1(DlBlurStyle::kNormal, 3.0)
static const DlPath kTestPathRect
SkFont CreateTestFontOfSize(DlScalar scalar)
static const std::shared_ptr< DlColorSource > kTestSource4
static const DlBlurMaskFilter kTestMaskFilter4(DlBlurStyle::kInner, 3.0)
static const DlComposeImageFilter kTestComposeImageFilter1(kTestBlurImageFilter1, kTestMatrixImageFilter1)
static const std::shared_ptr< DlVertices > kTestVertices2
constexpr SkRect kTestSkBounds
static const DlColorFilterImageFilter kTestCFImageFilter2(kTestBlendColorFilter2)
static const DlRoundRect kTestInnerRRect
constexpr DlPoint kTestPoints[]
constexpr float kRotateColorMatrix[20]
static const DlErodeImageFilter kTestErodeImageFilter2(4.0, 3.0)
static const auto kTestBlendColorFilter2
static const DlBlurMaskFilter kTestMaskFilter3(DlBlurStyle::kSolid, 3.0)
static const DlMatrixImageFilter kTestMatrixImageFilter2(DlMatrix::MakeRotationZ(DlDegrees(85)), kNearestSampling)
static const DlPath kTestPath2
static const DlBlurImageFilter kTestBlurImageFilter4(5.0, 5.0, DlTileMode::kDecal)
static const DlErodeImageFilter kTestErodeImageFilter3(3.0, 4.0)
static const DlRoundSuperellipse kTestRSuperellipse
static const DlMatrixImageFilter kTestMatrixImageFilter1(DlMatrix::MakeRotationZ(DlDegrees(45)), kNearestSampling)
static const auto kTestMatrixColorFilter1
static const std::shared_ptr< DlColorSource > kTestSource1
constexpr DlRect kTestBounds
static const DlPath kTestPath1
static const DlColorFilterImageFilter kTestCFImageFilter1(kTestBlendColorFilter1)
static const DlPath kTestPath3
static const std::shared_ptr< DlColorSource > kTestSource5
constexpr float kInvertColorMatrix[20]
sk_sp< DlImage > MakeTestImage(int w, int h, int checker_size)
static const sk_sp< DlRuntimeEffect > kTestRuntimeEffect2
static const DlErodeImageFilter kTestErodeImageFilter1(4.0, 4.0)
sk_sp< DisplayList > GetSampleDisplayList()
static const std::shared_ptr< DlColorSource > kTestSource2
static const DlBlurMaskFilter kTestMaskFilter2(DlBlurStyle::kNormal, 5.0)
static const DlBlurImageFilter kTestBlurImageFilter2(6.0, 5.0, DlTileMode::kClamp)
static const auto kTestBlendColorFilter3
static const DlPath kTestPathRRect
static auto kTestImage1
static DlImageSampling kLinearSampling
static const auto kTestBlendColorFilter1
static sk_sp< DisplayList > TestDisplayList2
static const SkRRect kTestSkInnerRRect
static const DlBlurImageFilter kTestBlurImageFilter3(5.0, 6.0, DlTileMode::kClamp)
static auto kTestImage2
std::vector< DisplayListInvocationGroup > CreateAllRenderingOps()
static const DlDilateImageFilter kTestDilateImageFilter1(5.0, 5.0)
static const SkRRect kTestRRectRect
sk_sp< DisplayList > GetSampleNestedDisplayList()
static DlImageSampling kNearestSampling
static const DlBlurMaskFilter kTestMaskFilter5(DlBlurStyle::kOuter, 3.0)
sk_sp< SkTextBlob > GetTestTextBlob(int index)
static const DlDilateImageFilter kTestDilateImageFilter3(5.0, 6.0)
static sk_sp< DisplayList > MakeTestDisplayList(int w, int h, SkColor color)
static const SkRRect kTestSkRRect
static const DlBlurImageFilter kTestBlurImageFilter1(5.0, 5.0, DlTileMode::kClamp)
constexpr DlPoint kEndPoints[]
std::vector< DisplayListInvocationGroup > CreateAllGroups()
static const DlComposeImageFilter kTestComposeImageFilter3(kTestBlurImageFilter1, kTestMatrixImageFilter2)
static const std::shared_ptr< DlVertices > kTestVertices1
const DlColor kColors[]
static const DlRoundRect kTestRRect
static sk_sp< DisplayList > TestDisplayList1
static const DlMatrixImageFilter kTestMatrixImageFilter3(DlMatrix::MakeRotationZ(DlDegrees(45)), kLinearSampling)
impeller::Scalar DlScalar
impeller::Degrees DlDegrees
@ kTriangles
The vertices are taken 3 at a time to form a triangle.
@ kNormal
fuzzy inside and outside
@ kOuter
nothing inside, fuzzy outside
@ kInner
fuzzy inside, nothing outside
@ kSolid
solid inside, fuzzy outside
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 to the cache directory This is different from the persistent_cache_path in embedder h
Definition switch_defs.h:54
static constexpr DlColor kBlue()
Definition dl_color.h:73
static constexpr DlColor kYellow()
Definition dl_color.h:76
static constexpr DlColor kRed()
Definition dl_color.h:71
static constexpr DlColor kGreen()
Definition dl_color.h:72
std::vector< DisplayListInvocation > variants
uint32_t adjust_render_op_depth_cost(uint32_t previous_cost)
uint32_t depth_accumulated(uint32_t depth_scale=1u)
static Matrix MakeRotationZ(Radians r)
Definition matrix.h:223
static RoundRect MakeRectXY(const Rect &rect, Scalar x_radius, Scalar y_radius)
Definition round_rect.h:31
static RoundSuperellipse MakeRectXY(const Rect &rect, Scalar x_radius, Scalar y_radius)
static constexpr TRect MakeWH(Type width, Type height)
Definition rect.h:140
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:652
static constexpr TRect MakeLTRB(Type left, Type top, Type right, Type bottom)
Definition rect.h:129
Scalar font_size