static void test_sweep_fuzzer(skiatest::Reporter*) { static const SkColor gColors0[] = { 0x30303030, 0x30303030, 0x30303030 }; static const SkScalar gPos0[] = { -47919293023455565225163489280.0f, 0, 1 }; static const SkScalar gMatrix0[9] = { 1.12116716e-13f, 0 , 8.50489682e+16f, 4.1917041e-41f , 3.51369881e-23f, -2.54344271e-26f, 9.61111907e+17f, -3.35263808e-29f, -1.35659403e+14f }; static const struct { SkPoint fCenter; const SkColor* fColors; const SkScalar* fPos; int fCount; const SkScalar* fGlobalMatrix; } gConfigs[] = { { { 0, 0 }, gColors0, gPos0, SK_ARRAY_COUNT(gColors0), gMatrix0 }, }; sk_sp<SkSurface> surface = SkSurface::MakeRasterN32Premul(100, 100); SkCanvas* canvas = surface->getCanvas(); SkPaint paint; for (const auto& config : gConfigs) { paint.setShader(SkGradientShader::MakeSweep(config.fCenter.x(), config.fCenter.y(), config.fColors, config.fPos, config.fCount)); SkAutoCanvasRestore acr(canvas, false); if (config.fGlobalMatrix) { SkMatrix m; m.set9(config.fGlobalMatrix); canvas->save(); canvas->concat(m); } canvas->drawPaint(paint); } }
static void test_set9(skiatest::Reporter* reporter) { SkMatrix m; m.reset(); assert9(reporter, m, 1, 0, 0, 0, 1, 0, 0, 0, 1); m.setScale(2, 3); assert9(reporter, m, 2, 0, 0, 0, 3, 0, 0, 0, 1); m.postTranslate(4, 5); assert9(reporter, m, 2, 0, 4, 0, 3, 5, 0, 0, 1); SkScalar buffer[9]; sk_bzero(buffer, sizeof(buffer)); buffer[SkMatrix::kMScaleX] = 1; buffer[SkMatrix::kMScaleY] = 1; buffer[SkMatrix::kMPersp2] = 1; REPORTER_ASSERT(reporter, !m.isIdentity()); m.set9(buffer); REPORTER_ASSERT(reporter, m.isIdentity()); }
// "Interesting" fuzzer values. static void test_linear_fuzzer(skiatest::Reporter*) { static const SkColor gColors0[] = { 0x30303030, 0x30303030 }; static const SkColor gColors1[] = { 0x30303030, 0x30303030, 0x30303030 }; static const SkScalar gPos1[] = { 0, 0, 1 }; static const SkScalar gMatrix0[9] = { 6.40969056e-10f, 0 , 6.40969056e-10f, 0 , 4.42539023e-39f, 6.40969056e-10f, 0 , 0 , 1 }; static const SkScalar gMatrix1[9] = { -2.75294113f , 6.40969056e-10f, 6.40969056e-10f, 6.40969056e-10f, 6.40969056e-10f, -3.32810161e+24f, 6.40969056e-10f, 6.40969056e-10f, 0 }; static const SkScalar gMatrix2[9] = { 7.93481258e+17f, 6.40969056e-10f, 6.40969056e-10f, 6.40969056e-10f, 6.40969056e-10f, 6.40969056e-10f, 6.40969056e-10f, 6.40969056e-10f, 0.688235283f }; static const SkScalar gMatrix3[9] = { 1.89180674e+11f, 6.40969056e-10f, 6.40969056e-10f, 6.40969056e-10f, 6.40969056e-10f, 6.40969056e-10f, 6.40969056e-10f, 11276.0469f , 8.12524808e+20f }; static const struct { SkPoint fPts[2]; const SkColor* fColors; const SkScalar* fPos; int fCount; SkTileMode fTileMode; uint32_t fFlags; const SkScalar* fLocalMatrix; const SkScalar* fGlobalMatrix; } gConfigs[] = { { {{0, -2.752941f}, {0, 0}}, gColors0, nullptr, SK_ARRAY_COUNT(gColors0), SkTileMode::kClamp, 0, gMatrix0, nullptr }, { {{4.42539023e-39f, -4.42539023e-39f}, {9.78041162e-15f, 4.42539023e-39f}}, gColors1, gPos1, SK_ARRAY_COUNT(gColors1), SkTileMode::kClamp, 0, nullptr, gMatrix1 }, { {{4.42539023e-39f, 6.40969056e-10f}, {6.40969056e-10f, 1.49237238e-19f}}, gColors1, gPos1, SK_ARRAY_COUNT(gColors1), SkTileMode::kClamp, 0, nullptr, gMatrix2 }, { {{6.40969056e-10f, 6.40969056e-10f}, {6.40969056e-10f, -0.688235283f}}, gColors0, nullptr, SK_ARRAY_COUNT(gColors0), SkTileMode::kClamp, 0, gMatrix3, nullptr }, }; sk_sp<SkColorSpace> srgb = SkColorSpace::MakeSRGB(); SkColorSpace* colorSpaces[] = { nullptr, // hits the legacy gradient impl srgb.get(), // triggers 4f/raster-pipeline }; SkPaint paint; for (auto colorSpace : colorSpaces) { sk_sp<SkSurface> surface = SkSurface::MakeRaster(SkImageInfo::Make(100, 100, kN32_SkColorType, kPremul_SkAlphaType, sk_ref_sp(colorSpace))); SkCanvas* canvas = surface->getCanvas(); for (const auto& config : gConfigs) { SkAutoCanvasRestore acr(canvas, false); SkTLazy<SkMatrix> localMatrix; if (config.fLocalMatrix) { localMatrix.init(); localMatrix.get()->set9(config.fLocalMatrix); } paint.setShader(SkGradientShader::MakeLinear(config.fPts, config.fColors, config.fPos, config.fCount, config.fTileMode, config.fFlags, localMatrix.getMaybeNull())); if (config.fGlobalMatrix) { SkMatrix m; m.set9(config.fGlobalMatrix); canvas->save(); canvas->concat(m); } canvas->drawPaint(paint); } } }