Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(18)

Unified Diff: include/codec/SkScanlineDecoder.h

Issue 1212593003: Destroy SkScanlineDecoder in the SkCodec subclass destructors (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Detachable SkScanlineDecoder Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: include/codec/SkScanlineDecoder.h
diff --git a/include/codec/SkScanlineDecoder.h b/include/codec/SkScanlineDecoder.h
index d7f73dda56f92ef4bccc7bc431282b43d05a05a0..eac31ef40f05ca28b838c4031b037f8c3e979c6e 100644
--- a/include/codec/SkScanlineDecoder.h
+++ b/include/codec/SkScanlineDecoder.h
@@ -15,8 +15,20 @@
class SkScanlineDecoder : public SkNoncopyable {
public:
- // Note for implementations: An SkScanlineDecoder will be deleted by (and
- // therefore *before*) its associated SkCodec, in case the order matters.
+ /**
+ * Clean up after reading/skipping scanlines.
+ *
+ * It is possible that not all scanlines will have been read/skipped. In
+ * fact, in the case of subset decodes, it is likely that there will be
+ * scanlines at the bottom of the image that have been ignored.
+ *
+ * Note for implementations: An SkScanlineDecoder will be deleted by (and
+ * therefore *before*) its associated SkCodec, in case the order matters.
+ * However, while the SkCodec base class maintains ownership of the
+ * SkScanlineDecoder, the subclass will be deleted before the scanline
+ * decoder. If this is an issue, detachScanlineDecoder() provides
+ * a means for the subclass to take ownership of the SkScanlineDecoder.
+ */
virtual ~SkScanlineDecoder() {}
scroggo 2015/06/30 20:59:58 Do any clients override this? Maybe we can leave i
msarett 2015/06/30 21:33:00 No clients override this. My original response wa
/**
@@ -34,7 +46,7 @@ public:
return SkImageGenerator::kInvalidParameters;
}
const SkImageGenerator::Result result = this->onGetScanlines(dst, countLines, rowBytes);
- this->checkForFinish(countLines);
+ fCurrScanline += countLines;
return result;
}
@@ -54,7 +66,7 @@ public:
return SkImageGenerator::kInvalidParameters;
}
const SkImageGenerator::Result result = this->onSkipScanlines(countLines);
- this->checkForFinish(countLines);
+ fCurrScanline += countLines;
return result;
}
@@ -97,21 +109,5 @@ private:
virtual SkImageGenerator::Result onGetScanlines(void* dst, int countLines,
size_t rowBytes) = 0;
- /**
- * Called after any set of scanlines read/skipped. Updates fCurrScanline,
- * and, if we are at the end, calls onFinish().
- */
- void checkForFinish(int countLines) {
- fCurrScanline += countLines;
- if (fCurrScanline >= fDstInfo.height()) {
- this->onFinish();
- }
- }
-
- /**
- * This function will be called after reading/skipping all scanlines to do
- * any necessary cleanups.
- */
- virtual void onFinish() {} // Default does nothing.
};
#endif // SkScanlineDecoder_DEFINED
« no previous file with comments | « include/codec/SkCodec.h ('k') | src/codec/SkCodec_libpng.cpp » ('j') | src/codec/SkJpegCodec.cpp » ('J')

Powered by Google App Engine
This is Rietveld 408576698