| Index: tests/RecordingXfermodeTest.cpp
|
| diff --git a/tests/RecordingXfermodeTest.cpp b/tests/RecordingXfermodeTest.cpp
|
| index 8da81b3680482adf8e6a987ab3a538a23f5020e6..aa6bf687a1c1ead581ba0b5e6a40582573c73e26 100644
|
| --- a/tests/RecordingXfermodeTest.cpp
|
| +++ b/tests/RecordingXfermodeTest.cpp
|
| @@ -20,20 +20,17 @@
|
| // This arose from http://crbug.com/401593 which has
|
| // https://code.google.com/p/skia/issues/detail?id=1291 as its root cause.
|
|
|
| -
|
| namespace {
|
|
|
| class Drawer {
|
| public:
|
| - explicit Drawer()
|
| - : fImageInfo(SkImageInfo::MakeN32Premul(200,100))
|
| - {
|
| - fCircleBM.allocPixels( SkImageInfo::MakeN32Premul(100,100) );
|
| + explicit Drawer() : fImageInfo(SkImageInfo::MakeN32Premul(200, 100)) {
|
| + fCircleBM.allocPixels(SkImageInfo::MakeN32Premul(100, 100));
|
| SkCanvas canvas(fCircleBM);
|
| canvas.clear(0xffffffff);
|
| SkPaint circlePaint;
|
| circlePaint.setColor(0xff000000);
|
| - canvas.drawCircle(50,50,50,circlePaint);
|
| + canvas.drawCircle(50, 50, 50, circlePaint);
|
| }
|
|
|
| const SkImageInfo& imageInfo() const { return fImageInfo; }
|
| @@ -48,15 +45,16 @@ class Drawer {
|
| SkPaint layerPaint;
|
| layerPaint.setColor(0xff000000);
|
| layerPaint.setXfermodeMode(mode);
|
| - SkRect canvasRect(SkRect::MakeWH(SkIntToScalar(fImageInfo.width()),SkIntToScalar(fImageInfo.height())));
|
| + SkRect canvasRect(SkRect::MakeWH(SkIntToScalar(fImageInfo.width()),
|
| + SkIntToScalar(fImageInfo.height())));
|
|
|
| canvas->clipRect(clipRect);
|
| canvas->clear(0xff000000);
|
|
|
| - canvas->saveLayer(NULL,&blackPaint);
|
| - canvas->drawRect(canvasRect,greenPaint);
|
| - canvas->saveLayer(NULL,&layerPaint);
|
| - canvas->drawBitmapRect(fCircleBM,SkRect::MakeXYWH(20,20,60,60),&blackPaint);
|
| + canvas->saveLayer(NULL, &blackPaint);
|
| + canvas->drawRect(canvasRect, greenPaint);
|
| + canvas->saveLayer(NULL, &layerPaint);
|
| + canvas->drawBitmapRect(fCircleBM, SkRect::MakeXYWH(20,20,60,60), &blackPaint);
|
| canvas->restore();
|
| canvas->restore();
|
| }
|
| @@ -69,7 +67,6 @@ class Drawer {
|
| class RecordingStrategy {
|
| public:
|
| virtual ~RecordingStrategy() {}
|
| - virtual void init(const SkImageInfo&) = 0;
|
| virtual const SkBitmap& recordAndReplay(const Drawer& drawer,
|
| const SkRect& intoClip,
|
| SkXfermode::Mode) = 0;
|
| @@ -78,9 +75,7 @@ class RecordingStrategy {
|
| class BitmapBackedCanvasStrategy : public RecordingStrategy {
|
| // This version just draws into a bitmap-backed canvas.
|
| public:
|
| - BitmapBackedCanvasStrategy() {}
|
| -
|
| - virtual void init(const SkImageInfo& imageInfo) {
|
| + BitmapBackedCanvasStrategy(const SkImageInfo& imageInfo) {
|
| fBitmap.allocPixels(imageInfo);
|
| }
|
|
|
| @@ -99,57 +94,15 @@ class BitmapBackedCanvasStrategy : public RecordingStrategy {
|
| SkBitmap fBitmap;
|
| };
|
|
|
| -class DeprecatedRecorderStrategy : public RecordingStrategy {
|
| - // This version draws the entire scene into an SkPictureRecorder,
|
| - // using the deprecated recording backend.
|
| - // Then it then replays the scene through a clip rectangle.
|
| - // This backend proved to be buggy.
|
| - public:
|
| - DeprecatedRecorderStrategy() {}
|
| -
|
| - virtual void init(const SkImageInfo& imageInfo) {
|
| - fBitmap.allocPixels(imageInfo);
|
| - fWidth = imageInfo.width();
|
| - fHeight= imageInfo.height();
|
| - }
|
| -
|
| - virtual const SkBitmap& recordAndReplay(const Drawer& drawer,
|
| - const SkRect& intoClip,
|
| - SkXfermode::Mode mode) {
|
| - SkTileGridFactory::TileGridInfo tileGridInfo = { {100,100}, {0,0}, {0,0} };
|
| - SkTileGridFactory factory(tileGridInfo);
|
| - SkPictureRecorder recorder;
|
| - SkRect canvasRect(SkRect::MakeWH(SkIntToScalar(fWidth),SkIntToScalar(fHeight)));
|
| - SkCanvas* canvas = recorder.DEPRECATED_beginRecording( SkIntToScalar(fWidth), SkIntToScalar(fHeight), &factory);
|
| - drawer.draw(canvas, canvasRect, mode);
|
| - SkAutoTDelete<SkPicture> picture(recorder.endRecording());
|
| -
|
| - SkCanvas replayCanvas(fBitmap);
|
| - replayCanvas.clear(0xffffffff);
|
| - replayCanvas.clipRect(intoClip);
|
| - picture->playback(&replayCanvas);
|
| -
|
| - return fBitmap;
|
| - }
|
| -
|
| - private:
|
| - SkBitmap fBitmap;
|
| - int fWidth;
|
| - int fHeight;
|
| -};
|
| -
|
| -class NewRecordingStrategy : public RecordingStrategy {
|
| - // This version draws the entire scene into an SkPictureRecorder,
|
| - // using the new recording backend.
|
| +class PictureStrategy : public RecordingStrategy {
|
| + // This version draws the entire scene into an SkPictureRecorder.
|
| // Then it then replays the scene through a clip rectangle.
|
| // This backend proved to be buggy.
|
| public:
|
| - NewRecordingStrategy() {}
|
| -
|
| - virtual void init(const SkImageInfo& imageInfo) {
|
| + PictureStrategy(const SkImageInfo& imageInfo) {
|
| fBitmap.allocPixels(imageInfo);
|
| - fWidth = imageInfo.width();
|
| - fHeight= imageInfo.height();
|
| + fWidth = imageInfo.width();
|
| + fHeight = imageInfo.height();
|
| }
|
|
|
| virtual const SkBitmap& recordAndReplay(const Drawer& drawer,
|
| @@ -159,8 +112,9 @@ class NewRecordingStrategy : public RecordingStrategy {
|
| SkTileGridFactory factory(tileGridInfo);
|
| SkPictureRecorder recorder;
|
| SkRect canvasRect(SkRect::MakeWH(SkIntToScalar(fWidth),SkIntToScalar(fHeight)));
|
| - SkCanvas* canvas = recorder.EXPERIMENTAL_beginRecording( SkIntToScalar(fWidth), SkIntToScalar(fHeight), &factory);
|
| -
|
| + SkCanvas* canvas = recorder.beginRecording(SkIntToScalar(fWidth),
|
| + SkIntToScalar(fHeight),
|
| + &factory);
|
| drawer.draw(canvas, canvasRect, mode);
|
| SkAutoTDelete<SkPicture> picture(recorder.endRecording());
|
|
|
| @@ -177,64 +131,45 @@ class NewRecordingStrategy : public RecordingStrategy {
|
| int fHeight;
|
| };
|
|
|
| -}
|
| -
|
| +} // namespace
|
|
|
|
|
| DEF_TEST(SkRecordingAccuracyXfermode, reporter) {
|
| #define FINEGRAIN 0
|
| -
|
| const Drawer drawer;
|
|
|
| - BitmapBackedCanvasStrategy golden; // This is the expected result.
|
| - DeprecatedRecorderStrategy deprecatedRecording;
|
| - NewRecordingStrategy newRecording;
|
| -
|
| - golden.init(drawer.imageInfo());
|
| - deprecatedRecording.init(drawer.imageInfo());
|
| - newRecording.init(drawer.imageInfo());
|
| + BitmapBackedCanvasStrategy golden(drawer.imageInfo());
|
| + PictureStrategy picture(drawer.imageInfo());
|
|
|
| #if !FINEGRAIN
|
| unsigned numErrors = 0;
|
| SkString errors;
|
| #endif
|
|
|
| - for (int iMode = 0; iMode < int(SkXfermode::kLastMode) ; iMode++ ) {
|
| - const SkRect& clip = SkRect::MakeXYWH(100,0,100,100);
|
| + for (int iMode = 0; iMode < int(SkXfermode::kLastMode); iMode++) {
|
| + const SkRect& clip = SkRect::MakeXYWH(100, 0, 100, 100);
|
| SkXfermode::Mode mode = SkXfermode::Mode(iMode);
|
|
|
| const SkBitmap& goldenBM = golden.recordAndReplay(drawer, clip, mode);
|
| - const SkBitmap& deprecatedBM = deprecatedRecording.recordAndReplay(drawer, clip, mode);
|
| - const SkBitmap& newRecordingBM = newRecording.recordAndReplay(drawer, clip, mode);
|
| + const SkBitmap& pictureBM = picture.recordAndReplay(drawer, clip, mode);
|
|
|
| size_t pixelsSize = goldenBM.getSize();
|
| - REPORTER_ASSERT( reporter, pixelsSize == deprecatedBM.getSize() );
|
| - REPORTER_ASSERT( reporter, pixelsSize == newRecordingBM.getSize() );
|
| + REPORTER_ASSERT(reporter, pixelsSize == pictureBM.getSize());
|
|
|
| // The pixel arrays should match.
|
| #if FINEGRAIN
|
| - REPORTER_ASSERT_MESSAGE( reporter,
|
| - 0==memcmp( goldenBM.getPixels(), deprecatedBM.getPixels(), pixelsSize ),
|
| - "Tiled bitmap is wrong");
|
| - REPORTER_ASSERT_MESSAGE( reporter,
|
| - 0==memcmp( goldenBM.getPixels(), recordingBM.getPixels(), pixelsSize ),
|
| - "SkRecorder bitmap is wrong");
|
| + REPORTER_ASSERT(reporter,
|
| + 0 == memcmp(goldenBM.getPixels(), pictureBM.getPixels(), pixelsSize));
|
| #else
|
| - if ( memcmp( goldenBM.getPixels(), deprecatedBM.getPixels(), pixelsSize ) ) {
|
| + if (memcmp(goldenBM.getPixels(), pictureBM.getPixels(), pixelsSize)) {
|
| numErrors++;
|
| - SkString str;
|
| - str.printf("For SkXfermode %d %s: Deprecated recorder bitmap is wrong\n", iMode, SkXfermode::ModeName(mode));
|
| - errors.append(str);
|
| - }
|
| - if ( memcmp( goldenBM.getPixels(), newRecordingBM.getPixels(), pixelsSize ) ) {
|
| - numErrors++;
|
| - SkString str;
|
| - str.printf("For SkXfermode %d %s: SkPictureRecorder bitmap is wrong\n", iMode, SkXfermode::ModeName(mode));
|
| - errors.append(str);
|
| + errors.appendf("For SkXfermode %d %s: SkPictureRecorder bitmap is wrong\n",
|
| + iMode, SkXfermode::ModeName(mode));
|
| }
|
| #endif
|
| }
|
| +
|
| #if !FINEGRAIN
|
| - REPORTER_ASSERT_MESSAGE( reporter, 0==numErrors, errors.c_str() );
|
| + REPORTER_ASSERT_MESSAGE(reporter, 0 == numErrors, errors.c_str());
|
| #endif
|
| }
|
|
|