From cc764fac92d7ded865e54488fec8202f11716929 Mon Sep 17 00:00:00 2001
From: Seth Fowler <seth@mozilla.com>
Date: Wed, 3 Dec 2014 10:02:17 -0800
Subject: [PATCH] Bug 1106423 - Always use raw frames in DoBlend. r=tn

---
 image/src/FrameBlender.cpp | 22 ++++------------------
 image/src/FrameBlender.h   |  9 ---------
 2 files changed, 4 insertions(+), 27 deletions(-)

diff --git a/image/src/FrameBlender.cpp b/image/src/FrameBlender.cpp
index 7aa219dc45ca..a43f05716cc6 100644
--- a/image/src/FrameBlender.cpp
+++ b/image/src/FrameBlender.cpp
@@ -53,20 +53,6 @@ FrameBlender::RawGetFrame(uint32_t aFrameNum)
   return frame.forget();
 }
 
-int32_t
-FrameBlender::GetFrameDisposalMethod(uint32_t aFrameNum) const
-{
-  if (!mAnim) {
-    NS_ASSERTION(aFrameNum == 0,
-                 "Don't ask for a frame > 0 if we're not animated!");
-    aFrameNum = 0;
-  }
-  if (aFrameNum >= mFrames.Length()) {
-    return FrameBlender::kDisposeNotSpecified;
-  }
-  return mFrames[aFrameNum]->GetFrameDisposalMethod();
-}
-
 uint32_t
 FrameBlender::GetNumFrames() const
 {
@@ -149,12 +135,12 @@ FrameBlender::DoBlend(nsIntRect* aDirtyRect,
                       uint32_t aPrevFrameIndex,
                       uint32_t aNextFrameIndex)
 {
-  nsRefPtr<imgFrame> prevFrame = GetFrame(aPrevFrameIndex);
-  nsRefPtr<imgFrame> nextFrame = GetFrame(aNextFrameIndex);
+  nsRefPtr<imgFrame> prevFrame = RawGetFrame(aPrevFrameIndex);
+  nsRefPtr<imgFrame> nextFrame = RawGetFrame(aNextFrameIndex);
 
   MOZ_ASSERT(prevFrame && nextFrame, "Should have frames here");
 
-  int32_t prevFrameDisposalMethod = GetFrameDisposalMethod(aPrevFrameIndex);
+  int32_t prevFrameDisposalMethod = prevFrame->GetFrameDisposalMethod();
   if (prevFrameDisposalMethod == FrameBlender::kDisposeRestorePrevious &&
       !mAnim->compositingPrevFrame) {
     prevFrameDisposalMethod = FrameBlender::kDisposeClear;
@@ -172,7 +158,7 @@ FrameBlender::DoBlend(nsIntRect* aDirtyRect,
     prevFrameDisposalMethod = FrameBlender::kDisposeClearAll;
   }
 
-  int32_t nextFrameDisposalMethod = GetFrameDisposalMethod(aNextFrameIndex);
+  int32_t nextFrameDisposalMethod = nextFrame->GetFrameDisposalMethod();
   nsIntRect nextFrameRect = nextFrame->GetRect();
   bool isFullNextFrame = (nextFrameRect.x == 0 && nextFrameRect.y == 0 &&
                           nextFrameRect.width == mSize.width &&
diff --git a/image/src/FrameBlender.h b/image/src/FrameBlender.h
index e0e7e7b9fc7b..35b7260e66d2 100644
--- a/image/src/FrameBlender.h
+++ b/image/src/FrameBlender.h
@@ -107,15 +107,6 @@ public:
 
 private:
 
-  /**
-   * Get the disposal method of the @aIndex-th frame.
-   *
-   * Note that it's not safe to use GetFrame(aIndex)->GetFrameDisposalMethod()
-   * instead, because the frame GetFrame() returns may be a blended frame which
-   * does not have the correct disposal method set.
-   */
-  int32_t GetFrameDisposalMethod(uint32_t aIndex) const;
-
   struct Anim
   {
     //! Track the last composited frame for Optimizations (See DoComposite code)