2 * Copyright 2014 Google Inc.
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
9 #include "SkBBoxHierarchy.h"
11 #include "SkPicture.h"
12 #include "SkPictureRecorder.h"
16 class PictureBBHTestBase {
18 PictureBBHTestBase(int playbackWidth, int playbackHeight,
19 int recordWidth, int recordHeight) {
21 fResultBitmap.allocN32Pixels(playbackWidth, playbackHeight);
22 fPictureWidth = recordWidth;
23 fPictureHeight = recordHeight;
26 virtual ~PictureBBHTestBase() { }
28 virtual void doTest(SkCanvas& playbackCanvas, SkCanvas& recordingCanvas) = 0;
30 void run(skiatest::Reporter* reporter) {
32 this->run(NULL, reporter);
35 SkRTreeFactory RTreeFactory;
36 this->run(&RTreeFactory, reporter);
40 void run(SkBBHFactory* factory, skiatest::Reporter* reporter) {
41 SkCanvas playbackCanvas(fResultBitmap);
42 playbackCanvas.clear(SK_ColorGREEN);
43 SkPictureRecorder recorder;
44 SkCanvas* recordCanvas = recorder.beginRecording(SkIntToScalar(fPictureWidth),
45 SkIntToScalar(fPictureHeight),
47 this->doTest(playbackCanvas, *recordCanvas);
48 SkAutoTUnref<SkPicture> picture(recorder.endRecording());
49 playbackCanvas.drawPicture(picture);
50 REPORTER_ASSERT(reporter, SK_ColorGREEN == fResultBitmap.getColor(0, 0));
53 SkBitmap fResultBitmap;
54 int fPictureWidth, fPictureHeight;
57 // Test to verify the playback of an empty picture
59 class DrawEmptyPictureBBHTest : public PictureBBHTestBase {
61 DrawEmptyPictureBBHTest()
62 : PictureBBHTestBase(2, 2, 1, 1) { }
63 virtual ~DrawEmptyPictureBBHTest() { }
65 void doTest(SkCanvas&, SkCanvas&) SK_OVERRIDE { }
68 // Test to verify the playback of a picture into a canvas that has
71 class EmptyClipPictureBBHTest : public PictureBBHTestBase {
73 EmptyClipPictureBBHTest()
74 : PictureBBHTestBase(2, 2, 3, 3) { }
76 void doTest(SkCanvas& playbackCanvas, SkCanvas& recordingCanvas) SK_OVERRIDE {
77 // intersect with out of bounds rect -> empty clip.
78 playbackCanvas.clipRect(SkRect::MakeXYWH(SkIntToScalar(10), SkIntToScalar(10),
79 SkIntToScalar(1), SkIntToScalar(1)), SkRegion::kIntersect_Op);
81 recordingCanvas.drawRect(SkRect::MakeXYWH(SkIntToScalar(0), SkIntToScalar(0),
82 SkIntToScalar(3), SkIntToScalar(3)), paint);
85 virtual ~EmptyClipPictureBBHTest() { }
88 DEF_TEST(PictureBBH, reporter) {
90 DrawEmptyPictureBBHTest emptyPictureTest;
91 emptyPictureTest.run(reporter);
93 EmptyClipPictureBBHTest emptyClipPictureTest;
94 emptyClipPictureTest.run(reporter);