diff options
author | piotaixr <piotaixr@chromium.org> | 2014-10-16 11:58:39 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-10-16 11:58:39 -0700 |
commit | 65151754b9fdb6a968d7307764c20655d1b680a0 (patch) | |
tree | 497bb3e2990cd595755e896d1eb7b8ca164b508b /tests | |
parent | 687732fe046c9cfec940f2d7f661cd97651d10a8 (diff) |
Override SkCanvas::drawImage() in SkRecorder.
BUG=skia:2947
Review URL: https://codereview.chromium.org/610003002
Diffstat (limited to 'tests')
-rw-r--r-- | tests/RecordDrawTest.cpp | 56 | ||||
-rw-r--r-- | tests/RecordReplaceDrawTest.cpp | 2 | ||||
-rw-r--r-- | tests/RecorderTest.cpp | 39 |
3 files changed, 96 insertions, 1 deletions
diff --git a/tests/RecordDrawTest.cpp b/tests/RecordDrawTest.cpp index f1c3a8b644..51313de9a9 100644 --- a/tests/RecordDrawTest.cpp +++ b/tests/RecordDrawTest.cpp @@ -11,11 +11,13 @@ #include "SkDebugCanvas.h" #include "SkDrawPictureCallback.h" #include "SkDropShadowImageFilter.h" +#include "SkImagePriv.h" #include "SkRecord.h" #include "SkRecordDraw.h" #include "SkRecordOpts.h" #include "SkRecorder.h" #include "SkRecords.h" +#include "SkSurface.h" static const int W = 1920, H = 1080; @@ -252,3 +254,57 @@ DEF_TEST(RecordDraw_SaveLayerAffectsClipBounds, r) { REPORTER_ASSERT(r, sloppy_rect_eq(bbh.fEntries[2].bounds, SkRect::MakeLTRB(0, 0, 40, 40))); REPORTER_ASSERT(r, sloppy_rect_eq(bbh.fEntries[3].bounds, SkRect::MakeLTRB(0, 0, 50, 50))); } + +DEF_TEST(RecordDraw_drawImage, r){ + class SkCanvasMock : public SkCanvas { + public: + SkCanvasMock(int width, int height) : INHERITED(width, height) { + this->resetTestValues(); + } + virtual ~SkCanvasMock() {} + virtual void drawImage(const SkImage* image, SkScalar left, SkScalar top, + const SkPaint* paint = NULL) SK_OVERRIDE { + + fDrawImageCalled = true; + } + + virtual void drawImageRect(const SkImage* image, const SkRect* src, + const SkRect& dst, + const SkPaint* paint = NULL) SK_OVERRIDE { + fDrawImageRectCalled = true; + } + + void resetTestValues() { + fDrawImageCalled = fDrawImageRectCalled = false; + } + + bool fDrawImageCalled; + bool fDrawImageRectCalled; + private: + typedef SkCanvas INHERITED; + }; + + SkAutoTUnref<SkSurface> surface(SkSurface::NewRasterPMColor(10, 10)); + surface->getCanvas()->clear(SK_ColorGREEN); + SkAutoTUnref<SkImage> image(surface->newImageSnapshot()); + + SkCanvasMock canvas(10, 10); + + { + SkRecord record; + SkRecorder recorder(&record, 10, 10); + recorder.drawImage(image, 0, 0); + SkRecordDraw(record, &canvas, 0, 0); + } + REPORTER_ASSERT(r, canvas.fDrawImageCalled); + canvas.resetTestValues(); + + { + SkRecord record; + SkRecorder recorder(&record, 10, 10); + recorder.drawImageRect(image, 0, SkRect::MakeWH(10, 10)); + SkRecordDraw(record, &canvas, 0, 0); + } + REPORTER_ASSERT(r, canvas.fDrawImageRectCalled); + +} diff --git a/tests/RecordReplaceDrawTest.cpp b/tests/RecordReplaceDrawTest.cpp index e93b622cde..6ce45e43d5 100644 --- a/tests/RecordReplaceDrawTest.cpp +++ b/tests/RecordReplaceDrawTest.cpp @@ -134,7 +134,7 @@ void test_replacements(skiatest::Reporter* r, bool useBBH) { assert_type<SkRecords::Save>(r, rerecord, 0); assert_type<SkRecords::Save>(r, rerecord, 1); assert_type<SkRecords::SetMatrix>(r, rerecord, 2); - assert_type<SkRecords::DrawBitmapRectToRect>(r, rerecord, 3); + assert_type<SkRecords::DrawImageRect>(r, rerecord, 3); assert_type<SkRecords::Restore>(r, rerecord, 4); assert_type<SkRecords::DrawRect>(r, rerecord, 5); assert_type<SkRecords::Restore>(r, rerecord, 6); diff --git a/tests/RecorderTest.cpp b/tests/RecorderTest.cpp index aced54f7a9..d81bf059ef 100644 --- a/tests/RecorderTest.cpp +++ b/tests/RecorderTest.cpp @@ -12,6 +12,7 @@ #include "SkRecorder.h" #include "SkRecords.h" #include "SkShader.h" +#include "SkSurface.h" #define COUNT(T) + 1 static const int kRecordTypes = SK_RECORD_TYPES(COUNT); @@ -150,3 +151,41 @@ DEF_TEST(Recorder_IsDrawingToLayer, r) { REPORTER_ASSERT(r, !recorder.isDrawingToLayer()); } +DEF_TEST(Recorder_drawImage_takeReference, reporter) { + + SkAutoTUnref<SkImage> image; + { + SkAutoTUnref<SkSurface> surface(SkSurface::NewRasterPMColor(100, 100)); + surface->getCanvas()->clear(SK_ColorGREEN); + image.reset(surface->newImageSnapshot()); + } + { + SkRecord record; + SkRecorder recorder(&record, 100, 100); + + // DrawImage is supposed to take a reference + recorder.drawImage(image.get(), 0, 0); + REPORTER_ASSERT(reporter, !image->unique()); + + Tally tally; + tally.apply(record); + + REPORTER_ASSERT(reporter, 1 == tally.count<SkRecords::DrawImage>()); + } + REPORTER_ASSERT(reporter, image->unique()); + + { + SkRecord record; + SkRecorder recorder(&record, 100, 100); + + // DrawImageRect is supposed to take a reference + recorder.drawImageRect(image.get(), 0, SkRect::MakeWH(100, 100)); + REPORTER_ASSERT(reporter, !image->unique()); + + Tally tally; + tally.apply(record); + + REPORTER_ASSERT(reporter, 1 == tally.count<SkRecords::DrawImageRect>()); + } + REPORTER_ASSERT(reporter, image->unique()); +} |