Chromium Code Reviews| Index: tests/ImageFilterTest.cpp |
| diff --git a/tests/ImageFilterTest.cpp b/tests/ImageFilterTest.cpp |
| index 6a2f94265882269bb1a4e1fa4e38307df073124d..7a8f5be3cc2c952a5a299c8726d0865018810419 100644 |
| --- a/tests/ImageFilterTest.cpp |
| +++ b/tests/ImageFilterTest.cpp |
| @@ -1369,6 +1369,52 @@ DEF_GPUTEST_FOR_NATIVE_CONTEXT(ComposedImageFilterOffset_Gpu, reporter, context) |
| } |
| #endif |
| +static void test_composed_imagefilter_bounds(SkImageFilter::Proxy* proxy, |
| + skiatest::Reporter* reporter, |
| + GrContext* context) { |
| + // The bounds passed to the inner filter must be filtered by the outer |
|
reed1
2016/03/19 14:28:49
Some version of this comment might be useful in th
jbroman
2016/03/20 01:12:12
Copied the first three lines to SkComposeImageFilt
|
| + // filter, so that the inner filter produces the pixels that the outer |
| + // filter requires as input. This matters if the outer filter moves pixels. |
| + // Here, accounting for the outer offset is necessary so that the green |
| + // pixels of the picture are not clipped. |
| + |
| + SkPictureRecorder recorder; |
| + recorder.beginRecording(SkRect::MakeWH(200, 100)); |
|
reed1
2016/03/19 14:28:49
btw -- beginRecording returns the canvas, so you d
jbroman
2016/03/20 01:12:12
Done.
|
| + SkCanvas* recordingCanvas = recorder.getRecordingCanvas(); |
| + recordingCanvas->clipRect(SkRect::MakeXYWH(100, 0, 100, 100)); |
| + recordingCanvas->clear(SK_ColorGREEN); |
| + sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture(); |
| + sk_sp<SkImageFilter> pictureFilter( |
| + SkPictureImageFilter::Create(picture.get())); |
| + SkImageFilter::CropRect cropRect(SkRect::MakeWH(100, 100)); |
| + sk_sp<SkImageFilter> offsetFilter(SkOffsetImageFilter::Create(-100, 0, nullptr, &cropRect)); |
| + sk_sp<SkImageFilter> composedFilter( |
| + SkComposeImageFilter::Create(offsetFilter.get(), pictureFilter.get())); |
| + |
| + sk_sp<SkSpecialImage> sourceImage(create_empty_special_image(context, proxy, 100)); |
| + SkImageFilter::Context ctx(SkMatrix::I(), SkIRect::MakeWH(100, 100), nullptr); |
| + SkIPoint offset; |
| + sk_sp<SkSpecialImage> result(composedFilter->filterImage(sourceImage.get(), ctx, &offset)); |
| + REPORTER_ASSERT(reporter, offset.isZero()); |
| + REPORTER_ASSERT(reporter, result); |
| + REPORTER_ASSERT(reporter, result->subset().size() == SkISize::Make(100, 100)); |
| + |
| + SkBitmap resultBM; |
| + TestingSpecialImageAccess::GetROPixels(result.get(), &resultBM); |
| + SkAutoLockPixels lock(resultBM); |
| + REPORTER_ASSERT(reporter, resultBM.getColor(50, 50) == SK_ColorGREEN); |
| +} |
| + |
| +DEF_TEST(ComposedImageFilterBounds, reporter) { |
| + run_raster_test(reporter, 100, test_composed_imagefilter_bounds); |
| +} |
| + |
| +#if SK_SUPPORT_GPU |
| +DEF_GPUTEST_FOR_NATIVE_CONTEXT(ComposedImageFilterBounds_Gpu, reporter, context) { |
| + run_gpu_test(reporter, context, 100, test_composed_imagefilter_bounds); |
| +} |
| +#endif |
| + |
| static void test_partial_crop_rect(SkImageFilter::Proxy* proxy, |
| skiatest::Reporter* reporter, |
| GrContext* context) { |