Resolve a few memory leaks in tests.

Purge the global scaled image cache after use in tests.  The cache was
right to hold on to the pixels indefinitely, but this change makes it
easier to run down actual memory leaks.

Add SK_DECLARE_INST_COUNT to several classes.

BUG=skia:
R=reed@google.com

Author: halcanary@google.com

Review URL: https://codereview.chromium.org/145443004

git-svn-id: http://skia.googlecode.com/svn/trunk@13171 2bbb7eff-a529-9590-31e7-b0007b416f81
This commit is contained in:
commit-bot@chromium.org 2014-01-24 18:33:07 +00:00
parent dd10e0ec4c
commit 227c246731
6 changed files with 15 additions and 0 deletions

View File

@ -16,6 +16,7 @@
*/
class SK_API SkMallocPixelRef : public SkPixelRef {
public:
SK_DECLARE_INST_COUNT(SkMallocPixelRef)
/**
* Return a new SkMallocPixelRef with the provided pixel storage, rowBytes,
* and optional colortable. The caller is responsible for managing the

View File

@ -20,6 +20,7 @@
*/
class SK_API SkROLockPixelsPixelRef : public SkPixelRef {
public:
SK_DECLARE_INST_COUNT(SkROLockPixelsPixelRef)
SkROLockPixelsPixelRef(const SkImageInfo&);
virtual ~SkROLockPixelsPixelRef();
@ -38,6 +39,7 @@ private:
*/
class SK_API SkGrPixelRef : public SkROLockPixelsPixelRef {
public:
SK_DECLARE_INST_COUNT(SkGrPixelRef)
/**
* Constructs a pixel ref around a GrSurface. If the caller has locked the GrSurface in the
* cache and would like the pixel ref to unlock it in its destructor then transferCacheLock

View File

@ -192,6 +192,7 @@ void SkScaledImageCache::init() {
class SkOneShotDiscardablePixelRef : public SkPixelRef {
public:
SK_DECLARE_INST_COUNT(SkOneShotDiscardablePixelRef)
// Ownership of the discardablememory is transfered to the pixelref
SkOneShotDiscardablePixelRef(const SkImageInfo&, SkDiscardableMemory*, size_t rowBytes);
~SkOneShotDiscardablePixelRef();

View File

@ -25,6 +25,7 @@ class SkColorTable;
*/
class SkCachingPixelRef : public SkPixelRef {
public:
SK_DECLARE_INST_COUNT(SkCachingPixelRef)
/**
* Takes ownership of SkImageGenerator. If this method fails for
* whatever reason, it will return false and immediatetely delete

View File

@ -24,6 +24,7 @@
*/
class SkDiscardablePixelRef : public SkPixelRef {
public:
SK_DECLARE_INST_COUNT(SkDiscardablePixelRef)
SK_DECLARE_UNFLATTENABLE_OBJECT()
protected:

View File

@ -142,6 +142,12 @@ static void test_three_encodings(skiatest::Reporter* reporter,
}
}
static void purge_global_scaled_image_cache() {
size_t byteLimit = SkScaledImageCache::GetByteLimit();
SkScaledImageCache::SetByteLimit(0);
SkScaledImageCache::SetByteLimit(byteLimit);
}
////////////////////////////////////////////////////////////////////////////////
static bool install_skCachingPixelRef(SkData* encoded, SkBitmap* dst) {
return SkCachingPixelRef::Install(
@ -163,6 +169,7 @@ static bool install_skDiscardablePixelRef(SkData* encoded, SkBitmap* dst) {
*/
DEF_TEST(DecodingImageGenerator, reporter) {
test_three_encodings(reporter, install_skCachingPixelRef);
purge_global_scaled_image_cache();
test_three_encodings(reporter, install_skDiscardablePixelRef);
}
@ -295,6 +302,8 @@ DEF_TEST(DiscardableAndCachingPixelRef, reporter) {
check_pixelref(TestImageGenerator::kSucceedGetPixels_TestType,
reporter, kSkCaching_PixelRefType, NULL);
purge_global_scaled_image_cache();
check_pixelref(TestImageGenerator::kFailGetInfo_TestType,
reporter, kSkDiscardable_PixelRefType, NULL);
check_pixelref(TestImageGenerator::kFailGetPixels_TestType,