Index: samplecode/SampleFilterFuzz.cpp |
diff --git a/samplecode/SampleFilterFuzz.cpp b/samplecode/SampleFilterFuzz.cpp |
index 751ef9be393db03f2345aa6ad4e2a5b344bf2925..d5fbc97a17397039d60f01560a1c3674eb208dff 100644 |
--- a/samplecode/SampleFilterFuzz.cpp |
+++ b/samplecode/SampleFilterFuzz.cpp |
@@ -487,7 +487,7 @@ |
return maskFilter; |
} |
-static sk_sp<SkImageFilter> make_image_filter(bool canBeNull = true); |
+static SkImageFilter* make_image_filter(bool canBeNull = true); |
static SkPaint make_paint() { |
SkPaint paint; |
@@ -540,13 +540,11 @@ |
return paint; |
} |
-static sk_sp<SkImageFilter> make_image_filter(bool canBeNull) { |
- sk_sp<SkImageFilter> filter; |
+static SkImageFilter* make_image_filter(bool canBeNull) { |
+ SkImageFilter* filter = 0; |
// Add a 1 in 3 chance to get a nullptr input |
- if (canBeNull && (R(3) == 1)) { |
- return filter; |
- } |
+ if (canBeNull && (R(3) == 1)) { return filter; } |
enum { ALPHA_THRESHOLD, MERGE, COLOR, LUT3D, BLUR, MAGNIFIER, |
DOWN_SAMPLE, XFERMODE, OFFSET, MATRIX, MATRIX_CONVOLUTION, COMPOSE, |
@@ -555,73 +553,49 @@ |
switch (R(NUM_FILTERS)) { |
case ALPHA_THRESHOLD: |
- filter = sk_sp<SkImageFilter>(SkAlphaThresholdFilter::Create(make_region(), |
- make_scalar(), |
- make_scalar())); |
- break; |
- case MERGE: { |
- sk_sp<SkImageFilter> subFilter1(make_image_filter()); |
- sk_sp<SkImageFilter> subFilter2(make_image_filter()); |
- filter = sk_sp<SkImageFilter>(SkMergeImageFilter::Create(subFilter1.get(), |
- subFilter2.get(), |
- make_xfermode())); |
- break; |
- } |
- case COLOR: { |
+ filter = SkAlphaThresholdFilter::Create(make_region(), make_scalar(), make_scalar()); |
+ break; |
+ case MERGE: |
+ filter = SkMergeImageFilter::Create(make_image_filter(), make_image_filter(), make_xfermode()); |
+ break; |
+ case COLOR: |
+ { |
sk_sp<SkColorFilter> cf(make_color_filter()); |
- sk_sp<SkImageFilter> subFilter(make_image_filter()); |
- filter = cf ? sk_sp<SkImageFilter>(SkColorFilterImageFilter::Create(cf.get(), |
- subFilter.get())) |
- : nullptr; |
- break; |
- } |
- case LUT3D: { |
+ filter = cf ? SkColorFilterImageFilter::Create(cf.get(), make_image_filter()) : 0; |
+ } |
+ break; |
+ case LUT3D: |
+ { |
int cubeDimension; |
sk_sp<SkData> lut3D(make_3Dlut(&cubeDimension, (R(2) == 1), (R(2) == 1), (R(2) == 1))); |
sk_sp<SkColorFilter> cf(SkColorCubeFilter::Make(lut3D, cubeDimension)); |
- sk_sp<SkImageFilter> subFilter(make_image_filter()); |
- filter = cf ? sk_sp<SkImageFilter>(SkColorFilterImageFilter::Create(cf.get(), |
- subFilter.get())) |
- : nullptr; |
- break; |
- } |
- case BLUR: { |
- sk_sp<SkImageFilter> subFilter(make_image_filter()); |
- filter = sk_sp<SkImageFilter>(SkBlurImageFilter::Create(make_scalar(true), |
- make_scalar(true), |
- subFilter.get())); |
- break; |
- } |
+ filter = cf ? SkColorFilterImageFilter::Create(cf.get(), make_image_filter()) : 0; |
+ } |
+ break; |
+ case BLUR: |
+ filter = SkBlurImageFilter::Create(make_scalar(true), make_scalar(true), make_image_filter()); |
+ break; |
case MAGNIFIER: |
- filter = sk_sp<SkImageFilter>(SkMagnifierImageFilter::Create(make_rect(), |
- make_scalar(true))); |
+ filter = SkMagnifierImageFilter::Create(make_rect(), make_scalar(true)); |
break; |
case DOWN_SAMPLE: |
- filter = sk_sp<SkImageFilter>(SkDownSampleImageFilter::Create(make_scalar())); |
- break; |
- case XFERMODE: { |
- sk_sp<SkImageFilter> subFilter1(make_image_filter()); |
- sk_sp<SkImageFilter> subFilter2(make_image_filter()); |
+ filter = SkDownSampleImageFilter::Create(make_scalar()); |
+ break; |
+ case XFERMODE: |
filter = SkXfermodeImageFilter::Make(SkXfermode::Make(make_xfermode()), |
- subFilter1.get(), |
- subFilter2.get(), |
- nullptr); |
- break; |
- } |
- case OFFSET: { |
- sk_sp<SkImageFilter> subFilter(make_image_filter()); |
- filter = sk_sp<SkImageFilter>(SkOffsetImageFilter::Create(make_scalar(), make_scalar(), |
- subFilter.get())); |
- break; |
- } |
- case MATRIX: { |
- sk_sp<SkImageFilter> subFilter(make_image_filter()); |
- filter = sk_sp<SkImageFilter>(SkImageFilter::CreateMatrixFilter(make_matrix(), |
- (SkFilterQuality)R(4), |
- subFilter.get())); |
- break; |
- } |
- case MATRIX_CONVOLUTION: { |
+ make_image_filter(), make_image_filter(), |
+ nullptr).release(); |
+ break; |
+ case OFFSET: |
+ filter = SkOffsetImageFilter::Create(make_scalar(), make_scalar(), make_image_filter()); |
+ break; |
+ case MATRIX: |
+ filter = SkImageFilter::CreateMatrixFilter(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); |
@@ -632,68 +606,47 @@ |
} |
SkIPoint kernelOffset = SkIPoint::Make(R(SkIntToScalar(size.width())), |
R(SkIntToScalar(size.height()))); |
- sk_sp<SkImageFilter> subFilter(make_image_filter()); |
- |
- filter = sk_sp<SkImageFilter>(SkMatrixConvolutionImageFilter::Create( |
- size, |
+ filter = SkMatrixConvolutionImageFilter::Create(size, |
kernel.begin(), |
make_scalar(), |
make_scalar(), |
kernelOffset, |
(SkMatrixConvolutionImageFilter::TileMode)R(3), |
R(2) == 1, |
- subFilter.get(), |
- &cropR)); |
- break; |
- } |
- case COMPOSE: { |
- sk_sp<SkImageFilter> subFilter1(make_image_filter()); |
- sk_sp<SkImageFilter> subFilter2(make_image_filter()); |
- filter = sk_sp<SkImageFilter>(SkComposeImageFilter::Create(subFilter1.get(), |
- subFilter2.get())); |
- break; |
- } |
- case DISTANT_LIGHT: { |
- sk_sp<SkImageFilter> subFilter(make_image_filter()); |
- |
- filter = (R(2) == 1) |
- ? sk_sp<SkImageFilter>(SkLightingImageFilter::CreateDistantLitDiffuse(make_point(), |
- make_color(), make_scalar(), make_scalar(), |
- subFilter.get())) |
- : sk_sp<SkImageFilter>(SkLightingImageFilter::CreateDistantLitSpecular(make_point(), |
- make_color(), make_scalar(), |
- make_scalar(), SkIntToScalar(R(10)), |
- subFilter.get())); |
- break; |
- } |
- case POINT_LIGHT: { |
- sk_sp<SkImageFilter> subFilter(make_image_filter()); |
- |
- filter = (R(2) == 1) |
- ? sk_sp<SkImageFilter>(SkLightingImageFilter::CreatePointLitDiffuse(make_point(), |
- make_color(), make_scalar(), make_scalar(), |
- subFilter.get())) |
- : sk_sp<SkImageFilter>(SkLightingImageFilter::CreatePointLitSpecular(make_point(), |
- make_color(), make_scalar(), make_scalar(), |
- SkIntToScalar(R(10)), |
- subFilter.get())); |
- break; |
- } |
- case SPOT_LIGHT: { |
- sk_sp<SkImageFilter> subFilter(make_image_filter()); |
- |
- filter = (R(2) == 1) |
- ? sk_sp<SkImageFilter>(SkLightingImageFilter::CreateSpotLitDiffuse(SkPoint3::Make(0, 0, 0), |
- make_point(), make_scalar(), make_scalar(), |
- make_color(), make_scalar(), make_scalar(), |
- subFilter.get())) |
- : sk_sp<SkImageFilter>(SkLightingImageFilter::CreateSpotLitSpecular(SkPoint3::Make(0, 0, 0), |
- make_point(), make_scalar(), make_scalar(), |
- make_color(), make_scalar(), make_scalar(), |
- SkIntToScalar(R(10)), subFilter.get())); |
- break; |
- } |
- case NOISE: { |
+ make_image_filter(), |
+ &cropR); |
+ } |
+ break; |
+ case COMPOSE: |
+ filter = SkComposeImageFilter::Create(make_image_filter(), make_image_filter()); |
+ break; |
+ case DISTANT_LIGHT: |
+ filter = (R(2) == 1) ? |
+ SkLightingImageFilter::CreateDistantLitDiffuse(make_point(), |
+ make_color(), make_scalar(), make_scalar(), make_image_filter()) : |
+ SkLightingImageFilter::CreateDistantLitSpecular(make_point(), |
+ make_color(), make_scalar(), make_scalar(), SkIntToScalar(R(10)), |
+ make_image_filter()); |
+ break; |
+ case POINT_LIGHT: |
+ filter = (R(2) == 1) ? |
+ SkLightingImageFilter::CreatePointLitDiffuse(make_point(), |
+ make_color(), make_scalar(), make_scalar(), make_image_filter()) : |
+ SkLightingImageFilter::CreatePointLitSpecular(make_point(), |
+ make_color(), make_scalar(), make_scalar(), SkIntToScalar(R(10)), |
+ make_image_filter()); |
+ break; |
+ case SPOT_LIGHT: |
+ filter = (R(2) == 1) ? |
+ SkLightingImageFilter::CreateSpotLitDiffuse(SkPoint3::Make(0, 0, 0), |
+ make_point(), make_scalar(), make_scalar(), make_color(), |
+ make_scalar(), make_scalar(), make_image_filter()) : |
+ SkLightingImageFilter::CreateSpotLitSpecular(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()) : |
@@ -703,68 +656,43 @@ |
paint.setShader(shader); |
SkImageFilter::CropRect cropR(SkRect::MakeWH(SkIntToScalar(kBitmapSize), |
SkIntToScalar(kBitmapSize))); |
- filter = SkPaintImageFilter::Make(paint, &cropR); |
- break; |
- } |
- case DROP_SHADOW: { |
- sk_sp<SkImageFilter> subFilter(make_image_filter()); |
- |
- filter = sk_sp<SkImageFilter>(SkDropShadowImageFilter::Create(make_scalar(), |
- make_scalar(), |
- make_scalar(true), |
- make_scalar(true), |
- make_color(), |
- make_shadow_mode(), |
- subFilter.get(), |
- nullptr)); |
- break; |
- } |
- case MORPHOLOGY: { |
- sk_sp<SkImageFilter> subFilter(make_image_filter()); |
- |
+ filter = SkPaintImageFilter::Create(paint, &cropR); |
+ } |
+ break; |
+ case DROP_SHADOW: |
+ filter = SkDropShadowImageFilter::Create(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 = sk_sp<SkImageFilter>(SkDilateImageFilter::Create(R(static_cast<float>(kBitmapSize)), |
- R(static_cast<float>(kBitmapSize)), |
- subFilter.get())); |
+ filter = SkDilateImageFilter::Create(R(static_cast<float>(kBitmapSize)), |
+ R(static_cast<float>(kBitmapSize)), make_image_filter()); |
} else { |
- filter = sk_sp<SkImageFilter>(SkErodeImageFilter::Create(R(static_cast<float>(kBitmapSize)), |
- R(static_cast<float>(kBitmapSize)), |
- subFilter.get())); |
- } |
- break; |
- } |
- case BITMAP: { |
+ filter = SkErodeImageFilter::Create(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 = sk_sp<SkImageFilter>(SkImageSource::Create(image.get(), |
- make_rect(), |
- make_rect(), |
- kHigh_SkFilterQuality)); |
+ filter = SkImageSource::Create(image.get(), make_rect(), make_rect(), kHigh_SkFilterQuality); |
} else { |
- filter = sk_sp<SkImageFilter>(SkImageSource::Create(image.get())); |
- } |
- break; |
- } |
- case DISPLACE: { |
- sk_sp<SkImageFilter> subFilter1(make_image_filter(false)); |
- sk_sp<SkImageFilter> subFilter2(make_image_filter()); |
- |
- filter = sk_sp<SkImageFilter>(SkDisplacementMapEffect::Create(make_channel_selector_type(), |
- make_channel_selector_type(), |
- make_scalar(), |
- subFilter1.get(), |
- subFilter2.get())); |
- break; |
- } |
- case TILE: { |
- sk_sp<SkImageFilter> subFilter(make_image_filter(false)); |
- |
- filter = sk_sp<SkImageFilter>(SkTileImageFilter::Create(make_rect(), |
- make_rect(), |
- subFilter.get())); |
- break; |
- } |
- case PICTURE: { |
+ filter = SkImageSource::Create(image.get()); |
+ } |
+ } |
+ break; |
+ case DISPLACE: |
+ filter = SkDisplacementMapEffect::Create(make_channel_selector_type(), |
+ make_channel_selector_type(), make_scalar(), |
+ make_image_filter(false), make_image_filter()); |
+ break; |
+ case TILE: |
+ filter = SkTileImageFilter::Create(make_rect(), make_rect(), make_image_filter(false)); |
+ break; |
+ case PICTURE: |
+ { |
SkRTreeFactory factory; |
SkPictureRecorder recorder; |
SkCanvas* recordingCanvas = recorder.beginRecording(SkIntToScalar(kBitmapSize), |
@@ -772,13 +700,13 @@ |
&factory, 0); |
drawSomething(recordingCanvas); |
sk_sp<SkPicture> pict(recorder.finishRecordingAsPicture()); |
- filter = SkPictureImageFilter::Make(pict, make_rect()); |
- break; |
- } |
- case PAINT: { |
+ filter = SkPictureImageFilter::Make(pict, make_rect()).release(); |
+ } |
+ break; |
+ case PAINT: |
+ { |
SkImageFilter::CropRect cropR(make_rect()); |
- filter = SkPaintImageFilter::Make(make_paint(), &cropR); |
- break; |
+ filter = SkPaintImageFilter::Create(make_paint(), &cropR); |
} |
default: |
break; |
@@ -787,8 +715,8 @@ |
} |
static SkImageFilter* make_serialized_image_filter() { |
- sk_sp<SkImageFilter> filter(make_image_filter(false)); |
- SkAutoTUnref<SkData> data(SkValidatingSerializeFlattenable(filter.get())); |
+ SkAutoTUnref<SkImageFilter> filter(make_image_filter(false)); |
+ SkAutoTUnref<SkData> data(SkValidatingSerializeFlattenable(filter)); |
const unsigned char* ptr = static_cast<const unsigned char*>(data->data()); |
size_t len = data->size(); |
#ifdef SK_ADD_RANDOM_BIT_FLIPS |