From a3b38ec641bda10fcadff1cc5a54b74069118398 Mon Sep 17 00:00:00 2001 From: Daniel Holbert Date: Tue, 26 Jan 2016 11:08:26 -0800 Subject: [PATCH] Bug 1242778: Add MOZ_COUNT_CTOR & MOZ_COUNT_DTOR calls to track leaks of imagelib's FrameAnimator class. r=tn Also add crashtest with a corrupt animated PNG image that causes a leak to be reported (thanks to these MOZ_COUNT calls). This leak is fixed by the patch on separate bug 1237709. --- image/FrameAnimator.h | 9 ++++++++- image/test/crashtests/1242778-1.png | Bin 0 -> 15929 bytes image/test/crashtests/crashtests.list | 1 + 3 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 image/test/crashtests/1242778-1.png diff --git a/image/FrameAnimator.h b/image/FrameAnimator.h index 95a2a13b910..2827fc240cf 100644 --- a/image/FrameAnimator.h +++ b/image/FrameAnimator.h @@ -36,7 +36,14 @@ public: , mFirstFrameTimeout(0) , mAnimationMode(aAnimationMode) , mDoneDecoding(false) - { } + { + MOZ_COUNT_CTOR(FrameAnimator); + } + + ~FrameAnimator() + { + MOZ_COUNT_DTOR(FrameAnimator); + } /** * Return value from RequestRefresh. Tells callers what happened in that call diff --git a/image/test/crashtests/1242778-1.png b/image/test/crashtests/1242778-1.png new file mode 100644 index 0000000000000000000000000000000000000000..4504d54e452a5eb86313417bc9e120a3e881d758 GIT binary patch literal 15929 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 pnMGRu!A