Chromium Code Reviews| Index: tests/PictureStateTreeTest.cpp |
| diff --git a/tests/PictureStateTreeTest.cpp b/tests/PictureStateTreeTest.cpp |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..b79ed5de5ce6e87c9747dca5fea75562460331a9 |
| --- /dev/null |
| +++ b/tests/PictureStateTreeTest.cpp |
| @@ -0,0 +1,123 @@ |
| +/* |
| + * Copyright 2014 Google Inc. |
| + * |
| + * Use of this source code is governed by a BSD-style license that can be |
| + * found in the LICENSE file. |
| + */ |
| + |
| +#include "SkBBHFactory.h" |
| +#include "SkCanvas.h" |
| +#include "SkPictureRecorder.h" |
| +#include "SkPictureStateTree.h" |
| +#include "Test.h" |
| + |
| +static SkPicture* draw_scene(SkBBHFactory* bbhFactory) { |
| + SkPictureRecorder recorder; |
| + SkCanvas* canvas = recorder.beginRecording(200, 200, bbhFactory, 0); |
| + |
| + SkPaint p1, p2, p3; |
| + p1.setStyle(SkPaint::kFill_Style); |
| + p1.setColor(SK_ColorGREEN); |
| + p2.setStyle(SkPaint::kFill_Style); |
| + p2.setColor(SK_ColorBLUE); |
| + p3.setXfermodeMode(SkXfermode::kColorBurn_Mode); |
|
Justin Novosad
2014/04/25 22:43:41
This is a rarely use xfer mode. Any reason the tes
f(malita)
2014/04/28 13:10:25
Just wanted an xfer mode where the result is a fun
|
| + |
| + canvas->drawColor(SK_ColorWHITE); |
| + |
| + canvas->save(); |
| + canvas->translate(10, 10); |
| + |
| + canvas->drawRect(SkRect::MakeWH(100, 50), p1); |
| + canvas->drawRect(SkRect::MakeWH(50, 100), p2); |
| + |
| + SkRect layerBounds = SkRect::MakeXYWH(0, 0, 90, 90); |
| + canvas->saveLayer(&layerBounds, &p3); |
| + canvas->save(); |
| + canvas->clipRect(layerBounds); |
| + |
| + canvas->save(); |
| + canvas->clipRect(SkRect::MakeWH(25, 25)); |
| + canvas->rotate(90); |
| + canvas->drawRect(SkRect::MakeWH(100, 50), p1); |
| + canvas->restore(); |
| + |
| + canvas->save(); |
| + canvas->clipRect(SkRect::MakeWH(25, 25)); |
| + canvas->save(); |
| + canvas->rotate(90); |
| + canvas->drawRect(SkRect::MakeWH(50, 100), p2); |
| + canvas->restore(); |
| + canvas->drawRect(SkRect::MakeWH(100, 50), p1); |
| + canvas->restore(); |
| + canvas->drawRect(SkRect::MakeXYWH(99, 99, 1, 1), p1); |
| + canvas->restore(); |
| + canvas->restore(); |
| + |
| + canvas->restore(); |
| + |
| + return recorder.endRecording(); |
| +} |
| + |
| +static void check_bms(skiatest::Reporter* reporter, const SkBitmap& bm1, const SkBitmap& bm2) { |
| + SkASSERT(bm1.width() == bm2.width()); |
| + SkASSERT(bm1.height() == bm2.height()); |
| + |
| + for (int x = 0; x < bm1.width(); ++x) { |
| + for (int y = 0; y < bm1.height(); ++y) { |
| + REPORTER_ASSERT(reporter, *bm1.getAddr32(x, y) == *bm2.getAddr32(x, y)); |
|
Justin Novosad
2014/04/25 22:43:41
why not just a memcmp on the whole buffer. I am j
f(malita)
2014/04/28 13:10:25
Good point, done.
|
| + } |
| + } |
| +} |
| + |
| +static void test_reference_picture(skiatest::Reporter* reporter) { |
| + SkRTreeFactory bbhFactory; |
| + |
| + SkAutoTUnref<SkPicture> bbhPicture(draw_scene(&bbhFactory)); |
| + SkAutoTUnref<SkPicture> referencePicture(draw_scene(NULL)); |
| + |
| + SkBitmap referenceBitmap; |
| + referenceBitmap.allocN32Pixels(100, 100); |
| + SkCanvas referenceCanvas(referenceBitmap); |
| + |
| + SkBitmap bbhBitmap; |
| + bbhBitmap.allocN32Pixels(100, 100); |
| + SkCanvas bbhCanvas(bbhBitmap); |
| + |
| + referenceCanvas.drawColor(SK_ColorTRANSPARENT); |
| + referenceCanvas.drawPicture(*referencePicture.get()); |
| + bbhCanvas.drawColor(SK_ColorTRANSPARENT); |
| + bbhCanvas.drawPicture(*bbhPicture.get()); |
| + REPORTER_ASSERT(reporter, |
| + referenceCanvas.getSaveCount() == bbhCanvas.getSaveCount()); |
| + REPORTER_ASSERT(reporter, |
| + referenceCanvas.getTotalMatrix() == bbhCanvas.getTotalMatrix()); |
| + check_bms(reporter, referenceBitmap, bbhBitmap); |
| + |
| + referenceCanvas.drawColor(SK_ColorTRANSPARENT); |
| + referenceCanvas.clipRect(SkRect::MakeWH(50, 50)); |
| + referenceCanvas.drawPicture(*referencePicture.get()); |
| + bbhCanvas.drawColor(SK_ColorTRANSPARENT); |
| + bbhCanvas.clipRect(SkRect::MakeWH(50, 50)); |
| + bbhCanvas.drawPicture(*bbhPicture.get()); |
| + REPORTER_ASSERT(reporter, |
| + referenceCanvas.getSaveCount() == bbhCanvas.getSaveCount()); |
| + REPORTER_ASSERT(reporter, |
| + referenceCanvas.getTotalMatrix() == bbhCanvas.getTotalMatrix()); |
| + check_bms(reporter, referenceBitmap, bbhBitmap); |
| + |
| + referenceCanvas.drawColor(SK_ColorTRANSPARENT); |
| + referenceCanvas.clipRect(SkRect::MakeWH(10, 10)); |
| + referenceCanvas.drawPicture(*referencePicture.get()); |
| + bbhCanvas.drawColor(SK_ColorTRANSPARENT); |
| + bbhCanvas.clipRect(SkRect::MakeWH(10, 10)); |
| + bbhCanvas.drawPicture(*bbhPicture.get()); |
| + REPORTER_ASSERT(reporter, |
| + referenceCanvas.getSaveCount() == bbhCanvas.getSaveCount()); |
| + REPORTER_ASSERT(reporter, |
| + referenceCanvas.getTotalMatrix() == bbhCanvas.getTotalMatrix()); |
| + check_bms(reporter, referenceBitmap, bbhBitmap); |
| +} |
| + |
| +DEF_TEST(PictureStateTree, reporter) { |
| + test_reference_picture(reporter); |
| +} |