From 3418ee7f6e44b52e3a42517d955d43fbafd24c4f Mon Sep 17 00:00:00 2001 From: Matt Woodrow Date: Tue, 2 Oct 2012 17:01:25 +1300 Subject: [PATCH] Bug 795722 - Clear our cached ImageContainer when the imgFrame changes. r=joe --- image/src/RasterImage.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/image/src/RasterImage.cpp b/image/src/RasterImage.cpp index a88976543e1..d51c1d75813 100644 --- a/image/src/RasterImage.cpp +++ b/image/src/RasterImage.cpp @@ -943,6 +943,10 @@ RasterImage::GetCurrentImage() nsresult rv = GetFrame(FRAME_CURRENT, FLAG_SYNC_DECODE, getter_AddRefs(imageSurface)); NS_ENSURE_SUCCESS(rv, nullptr); + if (!mImageContainer) { + mImageContainer = LayerManager::CreateImageContainer(); + } + CairoImage::Data cairoData; cairoData.mSurface = imageSurface; GetWidth(&cairoData.mSize.width); @@ -968,8 +972,6 @@ RasterImage::GetImageContainer(ImageContainer **_retval) return NS_OK; } - mImageContainer = LayerManager::CreateImageContainer(); - nsRefPtr image = GetCurrentImage(); if (!image) { return NS_ERROR_FAILURE; @@ -1292,9 +1294,9 @@ RasterImage::FrameUpdated(uint32_t aFrameNum, nsIntRect &aUpdatedRect) frame->ImageUpdated(aUpdatedRect); - if (aFrameNum == GetCurrentImgFrameIndex()) { - // The image has changed, so we need to invalidate our cached ImageContainer. - UpdateImageContainer(); + if (aFrameNum == GetCurrentImgFrameIndex() && + !IsInUpdateImageContainer()) { + mImageContainer = nullptr; } }