}
private:
- BBH fBBH;
- Mode fMode;
- SkString fName;
- SkAutoTDelete<SkPicture> fPic;
+ BBH fBBH;
+ Mode fMode;
+ SkString fName;
+ SkAutoTUnref<SkPicture> fPic;
};
DEF_BENCH( return new TiledPlaybackBench(kNone, kRandom); )
SkPictureRecorder recorder;
fSrc->playback(recorder.beginRecording(w, h, fUseBBH ? &factory : NULL,
SkPictureRecorder::kComputeSaveLayerInfo_RecordFlag));
- SkDELETE(recorder.endRecording());
+ SkSafeUnref(recorder.endRecording());
}
}
bool unique() const { return 1 == sk_acquire_load(&fRefCnt); }
void ref() const { sk_atomic_inc(&fRefCnt); }
- void unref() const { if (1 == sk_atomic_dec(&fRefCnt)) { SkDELETE((const Derived*)this); } }
+ void unref() const {
+ int32_t prevValue = sk_atomic_dec(&fRefCnt);
+ SkASSERT(prevValue >= 1);
+ if (1 == prevValue) {
+ SkDELETE((const Derived*)this);
+ }
+ }
void deref() const { this->unref(); } // Chrome prefers to call deref().
int32_t getRefCnt() const { return fRefCnt; } // Used by Chrome unit tests.
+protected:
+#ifdef SK_DEBUG
+ ~SkNVRefCnt() {
+ SkASSERTF(0 == fRefCnt, "NVRefCnt was %d", fRefCnt);
+ }
+#endif
+
private:
mutable int32_t fRefCnt;
};
// A picture that's just clear().
src.beginRecording(1,1, factory)
->clear(SK_ColorGREEN);
- SkAutoTDelete<SkPicture> srcPic(src.endRecording());
+ SkAutoTUnref<SkPicture> srcPic(src.endRecording());
// A target canvas with an empty clip.
SkCanvas* c = dst.beginRecording(1,1, NULL);
c->clipRect(SkRect::MakeEmpty());
srcPic->playback(c);
- SkAutoTDelete<SkPicture> dstPic(dst.endRecording());
+ SkAutoTUnref<SkPicture> dstPic(dst.endRecording());
// Should be Clip - Save - Clear - Restore.
// Buggy implementations might return 1 (just Clip) or 3 (Clip - Save - Restore).
SkCanvas* canvas = rec.beginRecording(1920, 1200);
canvas->drawBitmap(mut, 0, 0);
canvas->drawBitmap(immut, 800, 600);
- SkAutoTDelete<const SkPicture> pic(rec.endRecording());
+ SkAutoTUnref<const SkPicture> pic(rec.endRecording());
// The picture shares the immutable pixels but copies the mutable ones.
REPORTER_ASSERT(r, mut.pixelRef()->unique());
SkIntToScalar(fHeight),
&factory);
drawer.draw(canvas, canvasRect, mode);
- SkAutoTDelete<SkPicture> picture(recorder.endRecording());
+ SkAutoTUnref<SkPicture> picture(recorder.endRecording());
SkCanvas replayCanvas(fBitmap);
replayCanvas.clear(0xffffffff);
static int filter_picture(const SkString& inFile, const SkString& outFile) {
- SkAutoTDelete<SkPicture> inPicture;
+ SkAutoTUnref<SkPicture> inPicture;
SkFILEStream inStream(inFile.c_str());
if (inStream.isValid()) {