| Index: tests/PictureBBHTest.cpp
|
| diff --git a/tests/PictureBBHTest.cpp b/tests/PictureBBHTest.cpp
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..3ff5625686b298fdcd99357222d1b9daa066ab9c
|
| --- /dev/null
|
| +++ b/tests/PictureBBHTest.cpp
|
| @@ -0,0 +1,101 @@
|
| +/*
|
| + * 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 "SkCanvas.h"
|
| +#include "SkBBoxHierarchy.h"
|
| +#include "SkPaint.h"
|
| +#include "SkPicture.h"
|
| +#include "SkPictureRecorder.h"
|
| +
|
| +#include "Test.h"
|
| +
|
| +class PictureBBHTestBase {
|
| +public:
|
| + PictureBBHTestBase(int playbackWidth, int playbackHeight,
|
| + int recordWidth, int recordHeight) {
|
| +
|
| + fResultBitmap.allocN32Pixels(playbackWidth, playbackHeight);
|
| + fPictureWidth = recordWidth;
|
| + fPictureHeight = recordHeight;
|
| + }
|
| +
|
| + virtual ~PictureBBHTestBase() { }
|
| +
|
| + virtual void doTest(SkCanvas& playbackCanvas, SkCanvas& recordingCanvas) = 0;
|
| +
|
| + void run(skiatest::Reporter* reporter) {
|
| + // No BBH
|
| + this->run(NULL, reporter);
|
| +
|
| + // With a Tile Grid
|
| + SkTileGridFactory::TileGridInfo gridInfo;
|
| + gridInfo.fMargin.setEmpty();
|
| + gridInfo.fOffset.setZero();
|
| + gridInfo.fTileInterval.set(1, 1);
|
| + SkTileGridFactory gridFactory(gridInfo);
|
| + this->run(&gridFactory, reporter);
|
| +
|
| + // With an R-Tree
|
| + SkRTreeFactory RTreeFactory;
|
| + this->run(&RTreeFactory, reporter);
|
| + }
|
| +
|
| +private:
|
| + void run(SkBBHFactory* factory, skiatest::Reporter* reporter) {
|
| + SkCanvas playbackCanvas(fResultBitmap);
|
| + playbackCanvas.clear(SK_ColorGREEN);
|
| + SkPictureRecorder recorder;
|
| + SkCanvas* recordCanvas = recorder.beginRecording(SkIntToScalar(fPictureWidth), SkIntToScalar(fPictureHeight), factory);
|
| + this->doTest(playbackCanvas, *recordCanvas);
|
| + SkAutoTUnref<SkPicture> picture(recorder.endRecording());
|
| + playbackCanvas.drawPicture(picture);
|
| + REPORTER_ASSERT(reporter, SK_ColorGREEN == fResultBitmap.getColor(0, 0));
|
| + }
|
| +
|
| + SkBitmap fResultBitmap;
|
| + int fPictureWidth, fPictureHeight;
|
| +};
|
| +
|
| +// Test to verify the playback of an empty picture
|
| +//
|
| +class DrawEmptyPictureBBHTest : public PictureBBHTestBase {
|
| +public:
|
| + DrawEmptyPictureBBHTest()
|
| + : PictureBBHTestBase(2, 2, 1, 1) { }
|
| + virtual ~DrawEmptyPictureBBHTest() { }
|
| +
|
| + virtual void doTest(SkCanvas&, SkCanvas&) SK_OVERRIDE { }
|
| +};
|
| +
|
| +// Test to verify the playback of a picture into a canvas that has
|
| +// an empty clip.
|
| +//
|
| +class EmptyClipPictureBBHTest : public PictureBBHTestBase {
|
| +public:
|
| + EmptyClipPictureBBHTest()
|
| + : PictureBBHTestBase(2, 2, 3, 3) { }
|
| +
|
| + virtual void doTest(SkCanvas& playbackCanvas, SkCanvas& recordingCanvas) SK_OVERRIDE {
|
| + // intersect with out of bounds rect -> empty clip.
|
| + playbackCanvas.clipRect(SkRect::MakeXYWH(SkIntToScalar(10), SkIntToScalar(10),
|
| + SkIntToScalar(1), SkIntToScalar(1)), SkRegion::kIntersect_Op);
|
| + SkPaint paint;
|
| + recordingCanvas.drawRect(SkRect::MakeXYWH(SkIntToScalar(0), SkIntToScalar(0),
|
| + SkIntToScalar(3), SkIntToScalar(3)), paint);
|
| + }
|
| +
|
| + virtual ~EmptyClipPictureBBHTest() { }
|
| +};
|
| +
|
| +DEF_TEST(PictureBBH, reporter) {
|
| +
|
| + DrawEmptyPictureBBHTest emptyPictureTest;
|
| + emptyPictureTest.run(reporter);
|
| +
|
| + EmptyClipPictureBBHTest emptyClipPictureTest;
|
| + emptyClipPictureTest.run(reporter);
|
| +}
|
|
|