static void path_fuzz_stroker(SkBitmap* bitmap, int seed) { sk_parallel_for(100, [&](int i) { int localSeed = seed + i; FuzzPath fuzzPath; fuzzPath.setStrokeOnly(); fuzzPath.setSeed(localSeed); fuzzPath.randomize(); const SkPath& path = fuzzPath.getPath(); const SkPaint& paint = fuzzPath.getPaint(); const SkImageInfo& info = bitmap->info(); SkCanvas* canvas( SkCanvas::NewRasterDirect(info, bitmap->getPixels(), bitmap->rowBytes())); int w = info.width() / 4; int h = info.height() / 4; int x = localSeed / 4 % 4; int y = localSeed % 4; SkRect clipBounds = SkRect::MakeXYWH(SkIntToScalar(x) * w, SkIntToScalar(y) * h, SkIntToScalar(w), SkIntToScalar(h)); canvas->save(); canvas->clipRect(clipBounds); canvas->translate(SkIntToScalar(x) * w, SkIntToScalar(y) * h); canvas->drawPath(path, paint); canvas->restore(); }); }
static void test_fuzz(ThreadState* data) { FuzzPath fuzzPath; fuzzPath.setStrokeOnly(); fuzzPath.setSeed(data->fSeed); fuzzPath.randomize(); const SkPath& path = fuzzPath.getPath(); const SkPaint& paint = fuzzPath.getPaint(); const SkImageInfo& info = data->fBitmap->info(); SkCanvas* canvas(SkCanvas::NewRasterDirect(info, data->fBitmap->getPixels(), data->fBitmap->rowBytes())); int w = info.width() / 4; int h = info.height() / 4; int x = data->fSeed / 4 % 4; int y = data->fSeed % 4; SkRect clipBounds = SkRect::MakeXYWH(SkIntToScalar(x) * w, SkIntToScalar(y) * h, SkIntToScalar(w), SkIntToScalar(h)); canvas->save(); canvas->clipRect(clipBounds); canvas->translate(SkIntToScalar(x) * w, SkIntToScalar(y) * h); canvas->drawPath(path, paint); canvas->restore(); }