Index: samplecode/SampleFilterFuzz.cpp |
diff --git a/samplecode/SampleFilterFuzz.cpp b/samplecode/SampleFilterFuzz.cpp |
index 8d58b9b8de5b984cb2609218325cdc1015205e53..11a5ec12e34c5ded3c86b83eac4f863494a0036b 100644 |
--- a/samplecode/SampleFilterFuzz.cpp |
+++ b/samplecode/SampleFilterFuzz.cpp |
@@ -5,6 +5,7 @@ |
* found in the LICENSE file. |
*/ |
#include "SampleCode.h" |
+#include "SkAlphaThresholdFilter.h" |
#include "SkBicubicImageFilter.h" |
#include "SkBitmapDevice.h" |
#include "SkBitmapSource.h" |
@@ -19,6 +20,8 @@ |
#include "SkFlattenableSerialization.h" |
#include "SkLightingImageFilter.h" |
#include "SkMagnifierImageFilter.h" |
+#include "SkMatrixImageFilter.h" |
+#include "SkMatrixConvolutionImageFilter.h" |
#include "SkMergeImageFilter.h" |
#include "SkMorphologyImageFilter.h" |
#include "SkOffsetImageFilter.h" |
@@ -26,6 +29,7 @@ |
#include "SkPictureImageFilter.h" |
#include "SkRandom.h" |
#include "SkRectShaderImageFilter.h" |
+#include "SkTestImageFilters.h" |
#include "SkTileImageFilter.h" |
#include "SkView.h" |
#include "SkXfermodeImageFilter.h" |
@@ -95,6 +99,22 @@ static SkRect make_rect() { |
SkIntToScalar(R(static_cast<float>(kBitmapSize)))); |
} |
+static SkRegion make_region() { |
+ SkIRect iRegion = SkIRect::MakeXYWH(SkIntToScalar(R(static_cast<float>(kBitmapSize))), |
+ SkIntToScalar(R(static_cast<float>(kBitmapSize))), |
+ SkIntToScalar(R(static_cast<float>(kBitmapSize))), |
+ SkIntToScalar(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 SkXfermode::Mode make_xfermode() { |
return static_cast<SkXfermode::Mode>(R(SkXfermode::kLastMode+1)); |
} |
@@ -216,11 +236,15 @@ static SkImageFilter* make_image_filter(bool canBeNull = true) { |
// Add a 1 in 3 chance to get a NULL input |
if (canBeNull && (R(3) == 1)) { return filter; } |
- enum { BICUBIC, MERGE, COLOR, BLUR, MAGNIFIER, XFERMODE, OFFSET, COMPOSE, |
+ enum { ALPHA_THRESHOLD, BICUBIC, MERGE, COLOR, BLUR, MAGNIFIER, |
+ DOWN_SAMPLE, XFERMODE, OFFSET, MATRIX, MATRIX_CONVOLUTION, COMPOSE, |
DISTANT_LIGHT, POINT_LIGHT, SPOT_LIGHT, NOISE, DROP_SHADOW, |
MORPHOLOGY, BITMAP, DISPLACE, TILE, PICTURE, NUM_FILTERS }; |
switch (R(NUM_FILTERS)) { |
+ case ALPHA_THRESHOLD: |
+ filter = SkAlphaThresholdFilter::Create(make_region(), make_scalar(), make_scalar()); |
+ break; |
case BICUBIC: |
// Scale is set to 1 here so that it can fit in the DAG without resizing the output |
filter = SkBicubicImageFilter::CreateMitchell(SkSize::Make(1, 1), make_image_filter()); |
@@ -242,6 +266,9 @@ static SkImageFilter* make_image_filter(bool canBeNull = true) { |
case MAGNIFIER: |
filter = SkMagnifierImageFilter::Create(make_rect(), make_scalar(true)); |
break; |
+ case DOWN_SAMPLE: |
+ filter = SkDownSampleImageFilter::Create(make_scalar()); |
+ break; |
case XFERMODE: |
{ |
SkAutoTUnref<SkXfermode> mode(SkXfermode::Create(make_xfermode())); |
@@ -251,6 +278,33 @@ static SkImageFilter* make_image_filter(bool canBeNull = true) { |
case OFFSET: |
filter = SkOffsetImageFilter::Create(make_scalar(), make_scalar(), make_image_filter()); |
break; |
+ case MATRIX: |
+ filter = SkMatrixImageFilter::Create(make_matrix(), |
+ (SkPaint::FilterLevel)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(size.width()), R(size.height())); |
+ filter = SkMatrixConvolutionImageFilter::Create(size, |
+ kernel.begin(), |
+ make_scalar(), |
+ make_scalar(), |
+ kernelOffset, |
+ (SkMatrixConvolutionImageFilter::TileMode)R(3), |
+ R(2) == 1, |
+ make_image_filter(), |
+ &cropR); |
+ } |
+ break; |
case COMPOSE: |
filter = SkComposeImageFilter::Create(make_image_filter(), make_image_filter()); |
break; |