Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(546)

Unified Diff: tests/ImageFilterTest.cpp

Issue 311443003: Allow SkPictureImageFilter to be serialized when not run cross-process. (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: tests/ImageFilterTest.cpp
diff --git a/tests/ImageFilterTest.cpp b/tests/ImageFilterTest.cpp
index 48e86ddbb0b1eb271e64db7aca651241392617b7..36aa590b7466e926e4bd8823d9fd67bda8ea3542 100644
--- a/tests/ImageFilterTest.cpp
+++ b/tests/ImageFilterTest.cpp
@@ -17,6 +17,7 @@
#include "SkDisplacementMapEffect.h"
#include "SkDropShadowImageFilter.h"
#include "SkFlattenableBuffers.h"
+#include "SkFlattenableSerialization.h"
#include "SkGradientShader.h"
#include "SkLightingImageFilter.h"
#include "SkMatrixConvolutionImageFilter.h"
@@ -25,6 +26,7 @@
#include "SkMorphologyImageFilter.h"
#include "SkOffsetImageFilter.h"
#include "SkPicture.h"
+#include "SkPictureImageFilter.h"
#include "SkPictureRecorder.h"
#include "SkRect.h"
#include "SkTileImageFilter.h"
@@ -481,6 +483,66 @@ DEF_TEST(ImageFilterMatrixTest, reporter) {
canvas.drawPicture(*picture);
}
+DEF_TEST(ImageFilterPictureImageFilterTest, reporter) {
+
+ SkRTreeFactory factory;
+ SkPictureRecorder recorder;
+ SkCanvas* recordingCanvas = recorder.beginRecording(1, 1, &factory, 0);
+
+ // Create an SkPicture which simply draws a green 1x1 rectangle.
+ SkPaint greenPaint;
+ greenPaint.setColor(SK_ColorGREEN);
+ recordingCanvas->drawRect(SkRect::Make(SkIRect::MakeWH(1, 1)), greenPaint);
+ SkAutoTUnref<SkPicture> picture(recorder.endRecording());
+
+ // Wrap that SkPicture in an SkPictureImageFilter.
+ SkAutoTUnref<SkImageFilter> imageFilter(
+ SkPictureImageFilter::Create(picture.get()));
+
+ // Check that SkPictureImageFilter successfully serializes its contained
+ // SkPicture when not in cross-process mode.
+ SkPaint paint;
+ paint.setImageFilter(imageFilter.get());
+ SkPictureRecorder outerRecorder;
+ SkCanvas* outerCanvas = outerRecorder.beginRecording(1, 1, &factory, 0);
+ SkPaint redPaintWithFilter;
+ redPaintWithFilter.setColor(SK_ColorRED);
+ redPaintWithFilter.setImageFilter(imageFilter.get());
+ outerCanvas->drawRect(SkRect::Make(SkIRect::MakeWH(1, 1)), redPaintWithFilter);
+ SkAutoTUnref<SkPicture> outerPicture(outerRecorder.endRecording());
+
+ SkBitmap bitmap;
+ bitmap.allocN32Pixels(1, 1);
+ SkBitmapDevice device(bitmap);
+ SkCanvas canvas(&device);
+
+ // The result here should be green, since the filter
+ canvas.clear(0x0);
+ canvas.drawPicture(*outerPicture);
+ uint32_t pixel = *bitmap.getAddr32(0, 0);
+ REPORTER_ASSERT(reporter, pixel == SK_ColorGREEN);
+
+ // Check that, for now, SkPictureImageFilter does not serialize or
+ // deserialize its contained picture when the filter is serialized
+ // cross-process. Do this by "laundering" it through SkValidatingReadBuffer.
+ SkAutoTUnref<SkData> data(SkValidatingSerializeFlattenable(imageFilter.get()));
+ SkFlattenable* flattenable = SkValidatingDeserializeFlattenable(
+ data->data(), data->size(), SkImageFilter::GetFlattenableType());
+ SkImageFilter* unflattenedFilter = static_cast<SkImageFilter*>(flattenable);
+
+ redPaintWithFilter.setImageFilter(unflattenedFilter);
+ SkPictureRecorder crossProcessRecorder;
+ SkCanvas* crossProcessCanvas = crossProcessRecorder.beginRecording(1, 1, &factory, 0);
+ crossProcessCanvas->drawRect(SkRect::Make(SkIRect::MakeWH(1, 1)), redPaintWithFilter);
+ SkAutoTUnref<SkPicture> crossProcessPicture(crossProcessRecorder.endRecording());
+
+ canvas.clear(SK_ColorBLUE);
+ canvas.drawPicture(*crossProcessPicture);
+ pixel = *bitmap.getAddr32(0, 0);
+ // The result here should be the canvas background (blue), since the filter draws nothing.
+ REPORTER_ASSERT(reporter, pixel == SK_ColorBLUE);
+}
+
DEF_TEST(ImageFilterEmptySaveLayerTest, reporter) {
// Even when there's an empty saveLayer()/restore(), ensure that an image
« src/effects/SkPictureImageFilter.cpp ('K') | « src/effects/SkPictureImageFilter.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698