| Index: Source/platform/image-decoders/ImageFrame.h
 | 
| diff --git a/Source/platform/image-decoders/ImageFrame.h b/Source/platform/image-decoders/ImageFrame.h
 | 
| index fb7425755bd77887066531b171c6c8dc21c5b2d8..0a2a13162e201066bf2bb22cd146e425b8f8a5ea 100644
 | 
| --- a/Source/platform/image-decoders/ImageFrame.h
 | 
| +++ b/Source/platform/image-decoders/ImageFrame.h
 | 
| @@ -178,6 +178,45 @@ public:
 | 
|          *dest = SkPackARGB32NoCheck(a, r, g, b);
 | 
|      }
 | 
|  
 | 
| +    inline void overRGBAPremultiply(PixelData* dest, unsigned r, unsigned g, unsigned b, unsigned a)
 | 
| +    {
 | 
| +        enum FractionControl { RoundFractionControl = 257 * 128 };
 | 
| +
 | 
| +        if (!a)
 | 
| +            return;
 | 
| +
 | 
| +        if (a < 255) {
 | 
| +            unsigned alpha = a * 257;
 | 
| +            r = (r * alpha + RoundFractionControl) >> 16;
 | 
| +            g = (g * alpha + RoundFractionControl) >> 16;
 | 
| +            b = (b * alpha + RoundFractionControl) >> 16;
 | 
| +            *dest = SkPMSrcOver(SkPackARGB32NoCheck(a, r, g, b), *dest);
 | 
| +        } else {
 | 
| +            *dest = SkPackARGB32NoCheck(a, r, g, b);
 | 
| +        }
 | 
| +    }
 | 
| +
 | 
| +    inline void overRGBARaw(PixelData* dest, unsigned r, unsigned g, unsigned b, unsigned a)
 | 
| +    {
 | 
| +        if (!a)
 | 
| +            return;
 | 
| +
 | 
| +        unsigned aDest = SkGetPackedA32(*dest);
 | 
| +        if (aDest && a < 255) {
 | 
| +            unsigned u = a * 255;
 | 
| +            unsigned v = (255 - a) * aDest;
 | 
| +            unsigned alpha = u + v;
 | 
| +            unsigned rDest = SkGetPackedR32(*dest);
 | 
| +            unsigned gDest = SkGetPackedG32(*dest);
 | 
| +            unsigned bDest = SkGetPackedB32(*dest);
 | 
| +            a = (alpha + (alpha >> 8) + 1) >> 8;
 | 
| +            r = (r * u + rDest * v) / alpha;
 | 
| +            g = (g * u + gDest * v) / alpha;
 | 
| +            b = (b * u + bDest * v) / alpha;
 | 
| +        }
 | 
| +        *dest = SkPackARGB32NoCheck(a, r, g, b);
 | 
| +    }
 | 
| +
 | 
|      // Notifies the SkBitmap if any pixels changed and resets the flag.
 | 
|      inline void notifyBitmapIfPixelsChanged()
 | 
|      {
 | 
| 
 |