diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/ImageFilterTest.cpp | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/tests/ImageFilterTest.cpp b/tests/ImageFilterTest.cpp index 214aed950c..f87f99ce98 100644 --- a/tests/ImageFilterTest.cpp +++ b/tests/ImageFilterTest.cpp @@ -421,6 +421,54 @@ DEF_TEST(ImageFilterDrawTiled, reporter) { } } +static void drawSaveLayerPicture(int width, int height, int tileSize, SkBBHFactory* factory, SkBitmap* result) { + + SkMatrix matrix; + matrix.setTranslate(SkIntToScalar(50), 0); + + SkAutoTUnref<SkColorFilter> cf(SkColorFilter::CreateModeFilter(SK_ColorWHITE, SkXfermode::kSrc_Mode)); + SkAutoTUnref<SkImageFilter> cfif(SkColorFilterImageFilter::Create(cf.get())); + SkAutoTUnref<SkImageFilter> imageFilter(SkMatrixImageFilter::Create(matrix, SkPaint::kNone_FilterLevel, cfif.get())); + + SkPaint paint; + paint.setImageFilter(imageFilter.get()); + SkPictureRecorder recorder; + SkRect bounds = SkRect::Make(SkIRect::MakeXYWH(0, 0, 50, 50)); + SkCanvas* recordingCanvas = recorder.beginRecording(width, height, factory, 0); + recordingCanvas->translate(-55, 0); + recordingCanvas->saveLayer(&bounds, &paint); + recordingCanvas->restore(); + SkAutoTUnref<SkPicture> picture1(recorder.endRecording()); + + result->allocN32Pixels(width, height); + SkCanvas canvas(*result); + canvas.clear(0); + canvas.clipRect(SkRect::Make(SkIRect::MakeWH(tileSize, tileSize))); + canvas.drawPicture(picture1.get()); +} + +DEF_TEST(ImageFilterDrawMatrixBBH, reporter) { + // Check that matrix filter when drawn tiled with BBH exactly + // matches the same thing drawn without BBH. + // Tests pass by not asserting. + + const int width = 200, height = 200; + const int tileSize = 100; + SkBitmap result1, result2; + SkRTreeFactory factory; + + drawSaveLayerPicture(width, height, tileSize, &factory, &result1); + drawSaveLayerPicture(width, height, tileSize, NULL, &result2); + + for (int y = 0; y < height; y++) { + int diffs = memcmp(result1.getAddr32(0, y), result2.getAddr32(0, y), result1.rowBytes()); + REPORTER_ASSERT(reporter, !diffs); + if (diffs) { + break; + } + } +} + static void drawBlurredRect(SkCanvas* canvas) { SkAutoTUnref<SkImageFilter> filter(SkBlurImageFilter::Create(SkIntToScalar(8), 0)); SkPaint filterPaint; |