diff options
author | Mike Reed <reed@google.com> | 2019-01-07 12:57:10 -0500 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2019-01-07 18:34:55 +0000 |
commit | 023403ba991ce92a6bcadb3cfa4df002d7e4dfe6 (patch) | |
tree | 2611fff1b2099021b6fe3b9f216bd6804fc155c2 /samplecode | |
parent | b2fdcbf3033f2df7ec5f37cdfa70897271b096bd (diff) | |
download | skqp-023403ba991ce92a6bcadb3cfa4df002d7e4dfe6.tar.gz |
hide setTextEncoding
Bug: skia:
Change-Id: Ia9d3acadc1ef8a9b3c175dba501a5324179d27e9
Reviewed-on: https://skia-review.googlesource.com/c/181566
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Mike Reed <reed@google.com>
Auto-Submit: Mike Reed <reed@google.com>
Diffstat (limited to 'samplecode')
-rw-r--r-- | samplecode/SampleChineseFling.cpp | 3 | ||||
-rw-r--r-- | samplecode/SampleFilterFuzz.cpp | 810 |
2 files changed, 0 insertions, 813 deletions
diff --git a/samplecode/SampleChineseFling.cpp b/samplecode/SampleChineseFling.cpp index 3b73bb213d..a556bd6a54 100644 --- a/samplecode/SampleChineseFling.cpp +++ b/samplecode/SampleChineseFling.cpp @@ -153,9 +153,6 @@ protected: SkPaint paint; paint.setAntiAlias(true); paint.setColor(0xDE000000); - paint.setTypeface(fTypeface); - paint.setTextSize(11); - paint.setTextEncoding(kUTF32_SkTextEncoding); if (afterFirstFrame) { #if SK_SUPPORT_GPU diff --git a/samplecode/SampleFilterFuzz.cpp b/samplecode/SampleFilterFuzz.cpp deleted file mode 100644 index 4bb6fcc4d2..0000000000 --- a/samplecode/SampleFilterFuzz.cpp +++ /dev/null @@ -1,810 +0,0 @@ -/* - * Copyright 2013 Google Inc. - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ -#include "Sample.h" -#include "Sk1DPathEffect.h" -#include "Sk2DPathEffect.h" -#include "SkAlphaThresholdFilter.h" -#include "SkBlurImageFilter.h" -#include "SkCanvas.h" -#include "SkColorFilter.h" -#include "SkColorFilterImageFilter.h" -#include "SkColorMatrixFilter.h" -#include "SkComposeImageFilter.h" -#include "SkCornerPathEffect.h" -#include "SkDashPathEffect.h" -#include "SkData.h" -#include "SkDiscretePathEffect.h" -#include "SkDisplacementMapEffect.h" -#include "SkDropShadowImageFilter.h" -#include "SkEmbossMaskFilter.h" -#include "SkImageSource.h" -#include "SkLightingImageFilter.h" -#include "SkLumaColorFilter.h" -#include "SkMagnifierImageFilter.h" -#include "SkMatrixConvolutionImageFilter.h" -#include "SkMergeImageFilter.h" -#include "SkMorphologyImageFilter.h" -#include "SkOffsetImageFilter.h" -#include "SkPaintImageFilter.h" -#include "SkPerlinNoiseShader.h" -#include "SkPictureImageFilter.h" -#include "SkPictureRecorder.h" -#include "SkPoint3.h" -#include "SkRandom.h" -#include "SkRegion.h" -#include "SkTableColorFilter.h" -#include "SkTileImageFilter.h" -#include "SkTypeface.h" -#include "SkXfermodeImageFilter.h" -#if SK_SUPPORT_GPU -#include "text/GrSDFMaskFilter.h" -#endif -#include <stdio.h> -#include <time.h> - -//#define SK_ADD_RANDOM_BIT_FLIPS -//#define SK_FUZZER_IS_VERBOSE - -static const uint32_t kSeed = (uint32_t)(time(nullptr)); -static SkRandom gRand(kSeed); -static bool return_large = false; -static bool return_undef = false; - -static const int kBitmapSize = 24; - -static int R(float x) { - return (int)floor(SkScalarToFloat(gRand.nextUScalar1()) * x); -} - -#if defined _WIN32 -#pragma warning ( push ) -// we are intentionally causing an overflow here -// (warning C4756: overflow in constant arithmetic) -#pragma warning ( disable : 4756 ) -#endif - -static float huge() { - double d = 1e100; - float f = (float)d; - return f; -} - -#if defined _WIN32 -#pragma warning ( pop ) -#endif - -static float make_number(bool positiveOnly) { - float f = positiveOnly ? 1.0f : 0.0f; - float v = f; - int sel; - - if (return_large) sel = R(6); else sel = R(4); - if (!return_undef && sel == 0) sel = 1; - - if (R(2) == 1) v = (float)(R(100)+f); else - - switch (sel) { - case 0: break; - case 1: v = f; break; - case 2: v = 0.000001f; break; - case 3: v = 10000.0f; break; - case 4: v = 2000000000.0f; break; - case 5: v = huge(); break; - } - - if (!positiveOnly && (R(4) == 1)) v = -v; - return v; -} - -static SkScalar make_scalar(bool positiveOnly = false) { - return make_number(positiveOnly); -} - -static SkString make_string() { - int length = R(1000); - SkString str(length); - for (int i = 0; i < length; ++i) { - str[i] = static_cast<char>(R(256)); - } - return str; -} - -static SkString make_font_name() { - int sel = R(8); - - switch(sel) { - case 0: return SkString("Courier New"); - case 1: return SkString("Helvetica"); - case 2: return SkString("monospace"); - case 3: return SkString("sans-serif"); - case 4: return SkString("serif"); - case 5: return SkString("Times"); - case 6: return SkString("Times New Roman"); - case 7: - default: - return make_string(); - } -} - -static bool make_bool() { - return R(2) == 1; -} - -static SkRect make_rect() { - return SkRect::MakeWH(SkIntToScalar(R(static_cast<float>(kBitmapSize))), - SkIntToScalar(R(static_cast<float>(kBitmapSize)))); -} - -static SkRegion make_region() { - SkIRect iRegion = SkIRect::MakeXYWH(R(static_cast<float>(kBitmapSize)), - R(static_cast<float>(kBitmapSize)), - R(static_cast<float>(kBitmapSize)), - R(static_cast<float>(kBitmapSize))); - return SkRegion(iRegion); -} - -static SkMatrix make_matrix() { - SkMatrix m; - for (int i = 0; i < 9; ++i) { - m[i] = make_scalar(); - } - return m; -} - -static SkBlendMode make_xfermode() { - return static_cast<SkBlendMode>(R((int)SkBlendMode::kLastMode+1)); -} - -static SkFontHinting make_paint_hinting() { - return static_cast<SkFontHinting>(R(static_cast<unsigned>(kFull_SkFontHinting)+1)); -} - -static SkPaint::Style make_paint_style() { - return static_cast<SkPaint::Style>(R(SkPaint::kStrokeAndFill_Style+1)); -} - -static SkPaint::Cap make_paint_cap() { - return static_cast<SkPaint::Cap>(R(SkPaint::kDefault_Cap+1)); -} - -static SkPaint::Join make_paint_join() { - return static_cast<SkPaint::Join>(R(SkPaint::kDefault_Join+1)); -} - -static SkTextEncoding make_paint_text_encoding() { - return static_cast<SkTextEncoding>(R((int)kGlyphID_SkTextEncoding+1)); -} - -static SkBlurStyle make_blur_style() { - return static_cast<SkBlurStyle>(R(kLastEnum_SkBlurStyle+1)); -} - -static bool make_blur_mask_filter_respectctm() { - return static_cast<bool>(R(2)); -} - -static SkFilterQuality make_filter_quality() { - return static_cast<SkFilterQuality>(R(kHigh_SkFilterQuality+1)); -} - -static SkFontStyle make_typeface_style() { - return SkFontStyle::Normal(); -} - -static SkPath1DPathEffect::Style make_path_1d_path_effect_style() { - return static_cast<SkPath1DPathEffect::Style>(R((int)SkPath1DPathEffect::kLastEnum_Style + 1)); -} - -static SkColor make_color() { - return (R(2) == 1) ? 0xFFC0F0A0 : 0xFF000090; -} - -static SkDropShadowImageFilter::ShadowMode make_shadow_mode() { - return (R(2) == 1) ? SkDropShadowImageFilter::kDrawShadowAndForeground_ShadowMode : - SkDropShadowImageFilter::kDrawShadowOnly_ShadowMode; -} - -static SkPoint3 make_point() { - return SkPoint3::Make(make_scalar(), make_scalar(), make_scalar(true)); -} - -static SkDisplacementMapEffect::ChannelSelectorType make_channel_selector_type() { - return static_cast<SkDisplacementMapEffect::ChannelSelectorType>(R(4)+1); -} - -static bool valid_for_raster_canvas(const SkImageInfo& info) { - switch (info.colorType()) { - case kAlpha_8_SkColorType: - case kRGB_565_SkColorType: - return true; - case kN32_SkColorType: - return kPremul_SkAlphaType == info.alphaType() || - kOpaque_SkAlphaType == info.alphaType(); - default: - break; - } - return false; -} - -static SkColorType rand_colortype() { - return (SkColorType)R(kLastEnum_SkColorType + 1); -} - -static void rand_bitmap_for_canvas(SkBitmap* bitmap) { - SkImageInfo info; - do { - info = SkImageInfo::Make(kBitmapSize, kBitmapSize, rand_colortype(), - kPremul_SkAlphaType); - } while (!valid_for_raster_canvas(info) || !bitmap->tryAllocPixels(info)); -} - -static void make_g_bitmap(SkBitmap& bitmap) { - rand_bitmap_for_canvas(&bitmap); - - SkCanvas canvas(bitmap); - canvas.clear(0x00000000); - SkPaint paint; - paint.setAntiAlias(true); - paint.setColor(0xFF884422); - paint.setTextSize(SkIntToScalar(kBitmapSize/2)); - const char* str = "g"; - canvas.drawString(str, SkIntToScalar(kBitmapSize/8), - SkIntToScalar(kBitmapSize/4), paint); -} - -static void make_checkerboard_bitmap(SkBitmap& bitmap) { - rand_bitmap_for_canvas(&bitmap); - - SkCanvas canvas(bitmap); - canvas.clear(0x00000000); - SkPaint darkPaint; - darkPaint.setColor(0xFF804020); - SkPaint lightPaint; - lightPaint.setColor(0xFF244484); - const int i = kBitmapSize / 8; - const SkScalar f = SkIntToScalar(i); - for (int y = 0; y < kBitmapSize; y += i) { - for (int x = 0; x < kBitmapSize; x += i) { - canvas.save(); - canvas.translate(SkIntToScalar(x), SkIntToScalar(y)); - canvas.drawRect(SkRect::MakeXYWH(0, 0, f, f), darkPaint); - canvas.drawRect(SkRect::MakeXYWH(f, 0, f, f), lightPaint); - canvas.drawRect(SkRect::MakeXYWH(0, f, f, f), lightPaint); - canvas.drawRect(SkRect::MakeXYWH(f, f, f, f), darkPaint); - canvas.restore(); - } - } -} - -static const SkBitmap& make_bitmap() { - static SkBitmap bitmap[2]; - static bool initialized = false; - if (!initialized) { - make_g_bitmap(bitmap[0]); - make_checkerboard_bitmap(bitmap[1]); - initialized = true; - } - return bitmap[R(2)]; -} - -static sk_sp<SkData> make_3Dlut(int* cubeDimension, bool invR, bool invG, bool invB) { - int size = 4 << R(5); - auto data = SkData::MakeUninitialized(sizeof(SkColor) * size * size * size); - SkColor* pixels = (SkColor*)(data->writable_data()); - SkAutoTMalloc<uint8_t> lutMemory(size); - SkAutoTMalloc<uint8_t> invLutMemory(size); - uint8_t* lut = lutMemory.get(); - uint8_t* invLut = invLutMemory.get(); - const int maxIndex = size - 1; - for (int i = 0; i < size; i++) { - lut[i] = (i * 255) / maxIndex; - invLut[i] = ((maxIndex - i) * 255) / maxIndex; - } - for (int r = 0; r < size; ++r) { - for (int g = 0; g < size; ++g) { - for (int b = 0; b < size; ++b) { - pixels[(size * ((size * b) + g)) + r] = SkColorSetARGB(0xFF, - invR ? invLut[r] : lut[r], - invG ? invLut[g] : lut[g], - invB ? invLut[b] : lut[b]); - } - } - } - if (cubeDimension) { - *cubeDimension = size; - } - return data; -} - -static void drawSomething(SkCanvas* canvas) { - SkPaint paint; - - canvas->save(); - canvas->scale(0.5f, 0.5f); - canvas->drawBitmap(make_bitmap(), 0, 0, nullptr); - canvas->restore(); - - paint.setAntiAlias(true); - - paint.setColor(SK_ColorRED); - canvas->drawCircle(SkIntToScalar(kBitmapSize/2), SkIntToScalar(kBitmapSize/2), SkIntToScalar(kBitmapSize/3), paint); - paint.setColor(SK_ColorBLACK); - paint.setTextSize(SkIntToScalar(kBitmapSize/3)); - canvas->drawString("Picture", SkIntToScalar(kBitmapSize/2), SkIntToScalar(kBitmapSize/4), paint); -} - -static void rand_color_table(uint8_t* table) { - for (int i = 0; i < 256; ++i) { - table[i] = R(256); - } -} - -static sk_sp<SkColorFilter> make_color_filter() { - switch (R(6)) { - case 0: { - SkScalar array[20]; - for (int i = 0; i < 20; ++i) { - array[i] = make_scalar(); - } - return SkColorFilter::MakeMatrixFilterRowMajor255(array); - } - case 1: - return SkLumaColorFilter::Make(); - case 2: { - uint8_t tableA[256]; - uint8_t tableR[256]; - uint8_t tableG[256]; - uint8_t tableB[256]; - rand_color_table(tableA); - rand_color_table(tableR); - rand_color_table(tableG); - rand_color_table(tableB); - return SkTableColorFilter::MakeARGB(tableA, tableR, tableG, tableB); - } - case 3: - return SkColorFilter::MakeModeFilter(make_color(), make_xfermode()); - case 4: - return SkColorMatrixFilter::MakeLightingFilter(make_color(), make_color()); - case 5: - default: - break; - } - return nullptr; -} - -static SkPath make_path() { - SkPath path; - int numOps = R(30); - for (int i = 0; i < numOps; ++i) { - switch (R(6)) { - case 0: - path.moveTo(make_scalar(), make_scalar()); - break; - case 1: - path.lineTo(make_scalar(), make_scalar()); - break; - case 2: - path.quadTo(make_scalar(), make_scalar(), make_scalar(), make_scalar()); - break; - case 3: - path.conicTo(make_scalar(), make_scalar(), make_scalar(), make_scalar(), make_scalar()); - break; - case 4: - path.cubicTo(make_scalar(), make_scalar(), make_scalar(), - make_scalar(), make_scalar(), make_scalar()); - break; - case 5: - default: - path.arcTo(make_scalar(), make_scalar(), make_scalar(), make_scalar(), make_scalar()); - break; - - } - } - path.close(); - return path; -} - -static sk_sp<SkPathEffect> make_path_effect(bool canBeNull = true) { - sk_sp<SkPathEffect> pathEffect; - if (canBeNull && (R(3) == 1)) { return pathEffect; } - - switch (R(8)) { - case 0: - pathEffect = SkPath2DPathEffect::Make(make_matrix(), make_path()); - break; - case 1: - pathEffect = SkPathEffect::MakeCompose(make_path_effect(false), - make_path_effect(false)); - break; - case 2: - pathEffect = SkCornerPathEffect::Make(make_scalar()); - break; - case 3: { - int count = R(10); - SkScalar intervals[10]; - for (int i = 0; i < count; ++i) { - intervals[i] = make_scalar(); - } - pathEffect = SkDashPathEffect::Make(intervals, count, make_scalar()); - break; - } - case 4: - pathEffect = SkDiscretePathEffect::Make(make_scalar(), make_scalar()); - break; - case 5: - pathEffect = SkPath1DPathEffect::Make(make_path(), make_scalar(), make_scalar(), - make_path_1d_path_effect_style()); - break; - case 6: - pathEffect = SkLine2DPathEffect::Make(make_scalar(), make_matrix()); - break; - case 7: - default: - pathEffect = SkPathEffect::MakeSum(make_path_effect(false), - make_path_effect(false)); - break; - } - return pathEffect; -} - -static sk_sp<SkMaskFilter> make_mask_filter() { - sk_sp<SkMaskFilter> maskFilter; -#if SK_SUPPORT_GPU - switch (R(4)) { -#else - switch (R(3)) { -#endif - case 0: - maskFilter = SkMaskFilter::MakeBlur(make_blur_style(), make_scalar(), - make_blur_mask_filter_respectctm()); - case 1: { - SkEmbossMaskFilter::Light light; - for (int i = 0; i < 3; ++i) { - light.fDirection[i] = make_scalar(); - } - light.fPad = R(65536); - light.fAmbient = R(256); - light.fSpecular = R(256); - maskFilter = SkEmbossMaskFilter::Make(make_scalar(), light); - } -#if SK_SUPPORT_GPU - case 2: - maskFilter = GrSDFMaskFilter::Make(); - case 3: -#else - case 2: -#endif - default: - break; - } - return maskFilter; -} - -static sk_sp<SkImageFilter> make_image_filter(bool canBeNull = true); - -static SkPaint make_paint() { - SkPaint paint; - paint.setHinting(make_paint_hinting()); - paint.setAntiAlias(make_bool()); - paint.setDither(make_bool()); - paint.setLinearText(make_bool()); - paint.setSubpixelText(make_bool()); - paint.setLCDRenderText(make_bool()); - paint.setEmbeddedBitmapText(make_bool()); - paint.setAutohinted(make_bool()); - paint.setFakeBoldText(make_bool()); - paint.setFilterQuality(make_filter_quality()); - paint.setStyle(make_paint_style()); - paint.setColor(make_color()); - paint.setStrokeWidth(make_scalar()); - paint.setStrokeMiter(make_scalar()); - paint.setStrokeCap(make_paint_cap()); - paint.setStrokeJoin(make_paint_join()); - paint.setColorFilter(make_color_filter()); - paint.setBlendMode(make_xfermode()); - paint.setPathEffect(make_path_effect()); - paint.setMaskFilter(make_mask_filter()); - - if (false) { - // our validating buffer does not support typefaces yet, so skip this for now - paint.setTypeface(SkTypeface::MakeFromName(make_font_name().c_str(), - make_typeface_style())); - } - - paint.setImageFilter(make_image_filter()); - sk_sp<SkData> data(make_3Dlut(nullptr, make_bool(), make_bool(), make_bool())); - paint.setTextSize(make_scalar()); - paint.setTextScaleX(make_scalar()); - paint.setTextSkewX(make_scalar()); - paint.setTextEncoding(make_paint_text_encoding()); - return paint; -} - -static sk_sp<SkImageFilter> make_image_filter(bool canBeNull) { - sk_sp<SkImageFilter> filter; - - // Add a 1 in 3 chance to get a nullptr input - if (canBeNull && (R(3) == 1)) { - return filter; - } - - enum { ALPHA_THRESHOLD, MERGE, COLOR, BLUR, MAGNIFIER, - XFERMODE, OFFSET, MATRIX, MATRIX_CONVOLUTION, COMPOSE, - DISTANT_LIGHT, POINT_LIGHT, SPOT_LIGHT, NOISE, DROP_SHADOW, - MORPHOLOGY, BITMAP, DISPLACE, TILE, PICTURE, PAINT, NUM_FILTERS }; - - switch (R(NUM_FILTERS)) { - case ALPHA_THRESHOLD: - filter = SkAlphaThresholdFilter::Make(make_region(), - make_scalar(), - make_scalar(), - make_image_filter()); - break; - case MERGE: - filter = SkMergeImageFilter::Make(make_image_filter(), - make_image_filter()); - break; - case COLOR: { - sk_sp<SkColorFilter> cf(make_color_filter()); - filter = cf ? SkColorFilterImageFilter::Make(std::move(cf), make_image_filter()) - : nullptr; - break; - } - case BLUR: - filter = SkBlurImageFilter::Make(make_scalar(true), - make_scalar(true), - make_image_filter()); - break; - case MAGNIFIER: - filter = SkMagnifierImageFilter::Make(make_rect(), - make_scalar(true), - make_image_filter()); - break; - case XFERMODE: - filter = SkXfermodeImageFilter::Make(make_xfermode(), - make_image_filter(), - make_image_filter(), - nullptr); - break; - case OFFSET: - filter = SkOffsetImageFilter::Make(make_scalar(), make_scalar(), make_image_filter()); - break; - case MATRIX: - filter = SkImageFilter::MakeMatrixFilter(make_matrix(), - (SkFilterQuality)R(4), - make_image_filter()); - break; - case MATRIX_CONVOLUTION: { - SkImageFilter::CropRect cropR(SkRect::MakeWH(SkIntToScalar(kBitmapSize), - SkIntToScalar(kBitmapSize))); - SkISize size = SkISize::Make(R(10)+1, R(10)+1); - int arraySize = size.width() * size.height(); - SkTArray<SkScalar> kernel(arraySize); - for (int i = 0; i < arraySize; ++i) { - kernel.push_back() = make_scalar(); - } - SkIPoint kernelOffset = SkIPoint::Make(R(SkIntToScalar(size.width())), - R(SkIntToScalar(size.height()))); - - filter = SkMatrixConvolutionImageFilter::Make(size, - kernel.begin(), - make_scalar(), - make_scalar(), - kernelOffset, - (SkMatrixConvolutionImageFilter::TileMode)R(3), - R(2) == 1, - make_image_filter(), - &cropR); - break; - } - case COMPOSE: - filter = SkComposeImageFilter::Make(make_image_filter(), make_image_filter()); - break; - case DISTANT_LIGHT: - filter = (R(2) == 1) - ? SkLightingImageFilter::MakeDistantLitDiffuse(make_point(), make_color(), - make_scalar(), make_scalar(), - make_image_filter()) - : SkLightingImageFilter::MakeDistantLitSpecular(make_point(), make_color(), - make_scalar(), make_scalar(), - SkIntToScalar(R(10)), - make_image_filter()); - break; - case POINT_LIGHT: - filter = (R(2) == 1) - ? SkLightingImageFilter::MakePointLitDiffuse(make_point(), make_color(), - make_scalar(), make_scalar(), - make_image_filter()) - : SkLightingImageFilter::MakePointLitSpecular(make_point(), make_color(), - make_scalar(), make_scalar(), - SkIntToScalar(R(10)), - make_image_filter()); - break; - case SPOT_LIGHT: - filter = (R(2) == 1) - ? SkLightingImageFilter::MakeSpotLitDiffuse(SkPoint3::Make(0, 0, 0), - make_point(), make_scalar(), - make_scalar(), make_color(), - make_scalar(), make_scalar(), - make_image_filter()) - : SkLightingImageFilter::MakeSpotLitSpecular(SkPoint3::Make(0, 0, 0), - make_point(), make_scalar(), - make_scalar(), make_color(), - make_scalar(), make_scalar(), - SkIntToScalar(R(10)), - make_image_filter()); - break; - case NOISE: { - sk_sp<SkShader> shader((R(2) == 1) - ? SkPerlinNoiseShader::MakeFractalNoise(make_scalar(true), make_scalar(true), - R(10.0f), make_scalar()) - : SkPerlinNoiseShader::MakeTurbulence(make_scalar(true), make_scalar(true), - R(10.0f), make_scalar())); - SkPaint paint; - paint.setShader(shader); - SkImageFilter::CropRect cropR(SkRect::MakeWH(SkIntToScalar(kBitmapSize), - SkIntToScalar(kBitmapSize))); - filter = SkPaintImageFilter::Make(paint, &cropR); - break; - } - case DROP_SHADOW: - filter = SkDropShadowImageFilter::Make(make_scalar(), - make_scalar(), - make_scalar(true), - make_scalar(true), - make_color(), - make_shadow_mode(), - make_image_filter(), - nullptr); - break; - case MORPHOLOGY: - if (R(2) == 1) { - filter = SkDilateImageFilter::Make(R(static_cast<float>(kBitmapSize)), - R(static_cast<float>(kBitmapSize)), - make_image_filter()); - } else { - filter = SkErodeImageFilter::Make(R(static_cast<float>(kBitmapSize)), - R(static_cast<float>(kBitmapSize)), - make_image_filter()); - } - break; - case BITMAP: { - sk_sp<SkImage> image(SkImage::MakeFromBitmap(make_bitmap())); - if (R(2) == 1) { - filter = SkImageSource::Make(std::move(image), - make_rect(), - make_rect(), - kHigh_SkFilterQuality); - } else { - filter = SkImageSource::Make(std::move(image)); - } - break; - } - case DISPLACE: - filter = SkDisplacementMapEffect::Make(make_channel_selector_type(), - make_channel_selector_type(), - make_scalar(), - make_image_filter(false), - make_image_filter()); - break; - case TILE: - filter = SkTileImageFilter::Make(make_rect(), make_rect(), make_image_filter(false)); - break; - case PICTURE: { - SkRTreeFactory factory; - SkPictureRecorder recorder; - SkCanvas* recordingCanvas = recorder.beginRecording(SkIntToScalar(kBitmapSize), - SkIntToScalar(kBitmapSize), - &factory, 0); - drawSomething(recordingCanvas); - sk_sp<SkPicture> pict(recorder.finishRecordingAsPicture()); - filter = SkPictureImageFilter::Make(pict, make_rect()); - break; - } - case PAINT: { - SkImageFilter::CropRect cropR(make_rect()); - filter = SkPaintImageFilter::Make(make_paint(), &cropR); - break; - } - default: - break; - } - return (filter || canBeNull) ? filter : make_image_filter(canBeNull); -} - -static sk_sp<SkImageFilter> make_serialized_image_filter() { - sk_sp<SkImageFilter> filter(make_image_filter(false)); - sk_sp<SkData> data(filter->serialize()); - const unsigned char* ptr = static_cast<const unsigned char*>(data->data()); - size_t len = data->size(); -#ifdef SK_ADD_RANDOM_BIT_FLIPS - unsigned char* p = const_cast<unsigned char*>(ptr); - for (size_t i = 0; i < len; ++i, ++p) { - if (R(250) == 1) { // 0.4% of the time, flip a bit or byte - if (R(10) == 1) { // Then 10% of the time, change a whole byte - switch(R(3)) { - case 0: - *p ^= 0xFF; // Flip entire byte - break; - case 1: - *p = 0xFF; // Set all bits to 1 - break; - case 2: - *p = 0x00; // Set all bits to 0 - break; - } - } else { - *p ^= (1 << R(8)); - } - } - } -#endif // SK_ADD_RANDOM_BIT_FLIPS - return SkImageFilter::Deserialize(ptr, len); -} - -static void drawClippedBitmap(SkCanvas* canvas, int x, int y, const SkPaint& paint) { - canvas->save(); - canvas->clipRect(SkRect::MakeXYWH(SkIntToScalar(x), SkIntToScalar(y), - SkIntToScalar(kBitmapSize), SkIntToScalar(kBitmapSize))); - canvas->drawBitmap(make_bitmap(), SkIntToScalar(x), SkIntToScalar(y), &paint); - canvas->restore(); -} - -static void do_fuzz(SkCanvas* canvas) { - sk_sp<SkImageFilter> filter = make_serialized_image_filter(); - -#ifdef SK_FUZZER_IS_VERBOSE - static uint32_t numFilters = 0; - static uint32_t numValidFilters = 0; - if (0 == numFilters) { - printf("Fuzzing with %u\n", kSeed); - } - numFilters++; - if (filter) { - numValidFilters++; - } - printf("Filter no : %u. Valid filters so far : %u\r", numFilters, numValidFilters); - fflush(stdout); -#endif - - SkPaint paint; - paint.setImageFilter(filter); - drawClippedBitmap(canvas, 0, 0, paint); -} - -////////////////////////////////////////////////////////////////////////////// - -class ImageFilterFuzzView : public Sample { -public: - ImageFilterFuzzView() { - this->setBGColor(0xFFDDDDDD); - } - -protected: - virtual bool onQuery(Sample::Event* evt) { - if (Sample::TitleQ(*evt)) { - Sample::TitleR(evt, "ImageFilterFuzzer"); - return true; - } - return this->INHERITED::onQuery(evt); - } - - void drawBG(SkCanvas* canvas) { - canvas->drawColor(0xFFDDDDDD); - } - - virtual void onDrawContent(SkCanvas* canvas) { - do_fuzz(canvas); - } - -private: - typedef Sample INHERITED; -}; - -////////////////////////////////////////////////////////////////////////////// - -DEF_SAMPLE( return new ImageFilterFuzzView(); ) |