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:
parent
dd10e0ec4c
commit
227c246731
@ -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
|
||||
|
@ -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
|
||||
|
@ -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();
|
||||
|
@ -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
|
||||
|
@ -24,6 +24,7 @@
|
||||
*/
|
||||
class SkDiscardablePixelRef : public SkPixelRef {
|
||||
public:
|
||||
SK_DECLARE_INST_COUNT(SkDiscardablePixelRef)
|
||||
SK_DECLARE_UNFLATTENABLE_OBJECT()
|
||||
|
||||
protected:
|
||||
|
@ -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,
|
||||
|
Loading…
Reference in New Issue
Block a user