145 {
146#define CHECK_TO_SKENUM(V) ASSERT_EQ(ToSk(DlBlendMode::V), SkBlendMode::V);
148#undef CHECK_TO_SKENUM
149}
150
151TEST(DisplayListSkConversions, BlendColorFilterModifiesTransparency) {
153 std::stringstream desc_str;
154 desc_str <<
"blend[" <<
static_cast<int>(
mode) <<
", " <<
color.argb()
155 << "]";
156 std::string
desc = desc_str.str();
157 DlBlendColorFilter filter(
color, mode);
159 if (filter.modifies_transparent_black()) {
160 auto dl_filter = DlBlendColorFilter::Make(
color, mode);
161 auto sk_filter =
ToSk(filter);
162 ASSERT_NE(dl_filter,
nullptr) <<
desc;
163 ASSERT_NE(sk_filter,
nullptr) <<
desc;
165 srgb.get()) !=
168 } else {
169 auto dl_filter = DlBlendColorFilter::Make(
color, mode);
170 auto sk_filter =
ToSk(filter);
171 EXPECT_EQ(dl_filter ==
nullptr, sk_filter ==
nullptr) <<
desc;
172 ASSERT_TRUE(sk_filter == nullptr ||
174 srgb.get()) ==
177 }
178 };
179
181 test_mode_color(mode, DlColor::kTransparent());
182 test_mode_color(mode, DlColor::kWhite());
183 test_mode_color(mode, DlColor::kWhite().modulateOpacity(0.5));
184 test_mode_color(mode, DlColor::kBlack());
185 test_mode_color(mode, DlColor::kBlack().modulateOpacity(0.5));
186 };
187
188#define TEST_MODE(V) test_mode(DlBlendMode::V);
190#undef TEST_MODE
191}
192
193#undef FOR_EACH_BLEND_MODE_ENUM
194
195TEST(DisplayListSkConversions, ConvertWithZeroAndNegativeVerticesAndIndices) {
196 std::shared_ptr<const DlVertices> vertices1 = DlVertices::Make(
197 DlVertexMode::kTriangles, 0, nullptr, nullptr, nullptr, 0, nullptr);
198 EXPECT_NE(vertices1, nullptr);
199 EXPECT_NE(
ToSk(vertices1),
nullptr);
200
201 std::shared_ptr<const DlVertices> vertices2 = DlVertices::Make(
202 DlVertexMode::kTriangles, -1, nullptr, nullptr, nullptr, -1, nullptr);
203 EXPECT_NE(vertices2, nullptr);
204 EXPECT_NE(
ToSk(vertices2),
nullptr);
205}
206
207TEST(DisplayListVertices, ConvertWithZeroAndNegativeVerticesAndIndices) {
208 DlVertices::Builder builder1(DlVertexMode::kTriangles, 0,
209 DlVertices::Builder::kNone, 0);
211 std::shared_ptr<DlVertices> vertices1 = builder1.build();
212 EXPECT_NE(vertices1, nullptr);
213 EXPECT_NE(
ToSk(vertices1),
nullptr);
214
215 DlVertices::Builder builder2(DlVertexMode::kTriangles, -1,
216 DlVertices::Builder::kNone, -1);
218 std::shared_ptr<DlVertices> vertices2 = builder2.build();
219 EXPECT_NE(vertices2, nullptr);
220 EXPECT_NE(
ToSk(vertices2),
nullptr);
221}
222
223TEST(DisplayListColorSource, ConvertRuntimeEffect) {
226 SkString(
"vec4 main(vec2 p) { return vec4(0); }"))
227 .effect);
230 SkString(
"vec4 main(vec2 p) { return vec4(1); }"))
231 .effect);
232 std::shared_ptr<DlRuntimeEffectColorSource> source1 =
233 DlColorSource::MakeRuntimeEffect(
234 kTestRuntimeEffect1, {}, std::make_shared<std::vector<uint8_t>>());
235 std::shared_ptr<DlRuntimeEffectColorSource> source2 =
236 DlColorSource::MakeRuntimeEffect(
237 kTestRuntimeEffect2, {}, std::make_shared<std::vector<uint8_t>>());
238 std::shared_ptr<DlRuntimeEffectColorSource> source3 =
239 DlColorSource::MakeRuntimeEffect(
240 nullptr, {}, std::make_shared<std::vector<uint8_t>>());
241
242 ASSERT_NE(
ToSk(source1),
nullptr);
243 ASSERT_NE(
ToSk(source2),
nullptr);
244 ASSERT_EQ(
ToSk(source3),
nullptr);
245}
246
247TEST(DisplayListColorSource, ConvertRuntimeEffectWithNullSampler) {
250 SkString(
"vec4 main(vec2 p) { return vec4(0); }"))
251 .effect);
252 std::shared_ptr<DlRuntimeEffectColorSource> source1 =
253 DlColorSource::MakeRuntimeEffect(
254 kTestRuntimeEffect1, {nullptr},
255 std::make_shared<std::vector<uint8_t>>());
256
257 ASSERT_EQ(
ToSk(source1),
nullptr);
258}
259
260TEST(DisplayListSkConversions, MatrixColorFilterModifiesTransparency) {
262
264 1, 0, 0, 0, 0,
265 0, 1, 0, 0, 0,
266 0, 0, 1, 0, 0,
267 0, 0, 0, 1, 0,
268 };
269
271 "matrix[" + std::to_string(element) + "] = " + std::to_string(value);
273 DlMatrixColorFilter filter(matrix);
274 auto dl_filter = DlMatrixColorFilter::Make(matrix);
275 auto sk_filter =
ToSk(filter);
277 EXPECT_EQ(dl_filter == nullptr, sk_filter == nullptr);
278 EXPECT_EQ(filter.modifies_transparent_black(),
280 srgb.get(), srgb.get()) !=
282 };
283
284
286
287 for (int i = 0; i < 20; i++) {
296 }
297}
298
299TEST(DisplayListSkConversions, ToSkDitheringEnabledForGradients) {
300
301
302
303
304 DlPaint dl_paint;
305
306
307 dl_paint.setColorSource(DlColorSource::MakeLinear(
SkPoint::Make(0, 0),
309 0, 0, DlTileMode::kClamp));
310
311 {
314 }
315
316 {
319 }
320
321 {
324 }
325}
326
327}
328}
#define TEST(S, s, D, expected)
static void test_matrix(skiatest::Reporter *reporter)
#define SK_ScalarInfinity
static sk_sp< SkColorSpace > MakeSRGB()
static Result MakeForShader(SkString sksl, const Options &)
#define CHECK_TO_SKENUM(V)
#define FOR_EACH_BLEND_MODE_ENUM(FUNC)
constexpr SkColor4f kTransparent
unsigned useCenter Optional< SkMatrix > matrix
SkPaint ToSk(const DlPaint &paint)
SkPaint ToStrokedSk(const DlPaint &paint)
SkPaint ToNonShaderSk(const DlPaint &paint)
it will be possible to load the file into Perfetto s trace viewer disable asset Prevents usage of any non test fonts unless they were explicitly Loaded via prefetched default font Indicates whether the embedding started a prefetch of the default font manager before creating the engine run In non interactive mode
static constexpr SkPoint Make(float x, float y)
#define EXPECT_TRUE(handle)