Index: tests/RecorderTest.cpp |
diff --git a/tests/RecorderTest.cpp b/tests/RecorderTest.cpp |
index aced54f7a906fa32c56ffc5ee25ad8b10fd8fd1f..9339bcd2d6cb80d8fc4ce16bf70154dec8ed34e6 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,29 @@ DEF_TEST(Recorder_IsDrawingToLayer, r) { |
REPORTER_ASSERT(r, !recorder.isDrawingToLayer()); |
} |
+DEF_TEST(Recorder_drawImage_takeReference, reporter) { |
+ |
+ SkAutoTUnref<SkSurface> surface(SkSurface::NewRasterPMColor(100, 100)); |
+ surface->getCanvas()->clear(SK_ColorGREEN); |
+ SkAutoTUnref<SkImage> image(surface->newImageSnapshot()); |
+ int beginImageRefCount = image->getRefCnt(); |
mtklein
2014/09/27 15:41:22
We generally try to avoid calling getRefCnt(). He
Rémi Piotaix
2014/09/29 17:57:55
Done.
|
+ { |
+ SkRecord record; |
+ SkRecorder recorder(&record, 100, 100); |
+ |
+ // DrawImage is supposed to take a reference |
+ recorder.drawImage(image.get(), 0, 0); |
+ REPORTER_ASSERT(reporter, image->getRefCnt() == beginImageRefCount + 1); |
+ |
+ recorder.drawImageRect(image.get(), 0, SkRect::MakeWH(100, 100)); |
+ REPORTER_ASSERT(reporter, image->getRefCnt() == beginImageRefCount + 2); |
+ |
+ Tally tally; |
+ tally.apply(record); |
+ |
+ REPORTER_ASSERT(reporter, 1 == tally.count<SkRecords::DrawImage>()); |
+ REPORTER_ASSERT(reporter, 1 == tally.count<SkRecords::DrawImageRect>()); |
+ } |
+ // The SkImage should have the same refCnt as before |
+ REPORTER_ASSERT(reporter, image->getRefCnt() == beginImageRefCount); |
+} |