| Index: src/core/SkScalerContext.cpp
 | 
| diff --git a/src/core/SkScalerContext.cpp b/src/core/SkScalerContext.cpp
 | 
| index 7747cae0dfb297d80b2086cd906d22dc53080c8e..4ce42ddc077cef101215d1d96a3741f5a3cde54e 100644
 | 
| --- a/src/core/SkScalerContext.cpp
 | 
| +++ b/src/core/SkScalerContext.cpp
 | 
| @@ -248,7 +248,7 @@ static void applyLUTToA8Mask(const SkMask& mask, const uint8_t* lut) {
 | 
|  }
 | 
|  
 | 
|  template<bool APPLY_PREBLEND>
 | 
| -static void pack4xHToLCD16(const SkBitmap& src, const SkMask& dst,
 | 
| +static void pack4xHToLCD16(const SkPixmap& src, const SkMask& dst,
 | 
|                             const SkMaskGamma::PreBlend& maskPreBlend) {
 | 
|  #define SAMPLES_PER_PIXEL 4
 | 
|  #define LCD_PER_PIXEL 3
 | 
| @@ -291,7 +291,7 @@ static void pack4xHToLCD16(const SkBitmap& src, const SkMask& dst,
 | 
|      };
 | 
|  
 | 
|      for (int y = 0; y < height; ++y) {
 | 
| -        const uint8_t* srcP = src.getAddr8(0, y);
 | 
| +        const uint8_t* srcP = src.addr8(0, y);
 | 
|  
 | 
|          // TODO: this fir filter implementation is straight forward, but slow.
 | 
|          // It should be possible to make it much faster.
 | 
| @@ -406,29 +406,29 @@ static void generateMask(const SkMask& mask, const SkPath& path,
 | 
|      clip.setRect(SkIRect::MakeWH(dstW, dstH));
 | 
|  
 | 
|      const SkImageInfo info = SkImageInfo::MakeA8(dstW, dstH);
 | 
| -    SkBitmap bm;
 | 
| +    SkAutoPixmapStorage dst;
 | 
|  
 | 
|      if (0 == dstRB) {
 | 
| -        if (!bm.tryAllocPixels(info)) {
 | 
| +        if (!dst.tryAlloc(info)) {
 | 
|              // can't allocate offscreen, so empty the mask and return
 | 
|              sk_bzero(mask.fImage, mask.computeImageSize());
 | 
|              return;
 | 
|          }
 | 
|      } else {
 | 
| -        bm.installPixels(info, mask.fImage, dstRB);
 | 
| +        dst.reset(info, mask.fImage, dstRB);
 | 
|      }
 | 
| -    sk_bzero(bm.getPixels(), bm.getSafeSize());
 | 
| +    sk_bzero(dst.writable_addr(), dst.getSafeSize());
 | 
|  
 | 
|      SkDraw  draw;
 | 
| +    draw.fDst   = dst;
 | 
|      draw.fRC    = &clip;
 | 
|      draw.fClip  = &clip.bwRgn();
 | 
|      draw.fMatrix = &matrix;
 | 
| -    draw.fBitmap = &bm;
 | 
|      draw.drawPath(path, paint);
 | 
|  
 | 
|      switch (mask.fFormat) {
 | 
|          case SkMask::kBW_Format:
 | 
| -            packA8ToA1(mask, bm.getAddr8(0, 0), bm.rowBytes());
 | 
| +            packA8ToA1(mask, dst.addr8(0, 0), dst.rowBytes());
 | 
|              break;
 | 
|          case SkMask::kA8_Format:
 | 
|              if (maskPreBlend.isApplicable()) {
 | 
| @@ -437,9 +437,9 @@ static void generateMask(const SkMask& mask, const SkPath& path,
 | 
|              break;
 | 
|          case SkMask::kLCD16_Format:
 | 
|              if (maskPreBlend.isApplicable()) {
 | 
| -                pack4xHToLCD16<true>(bm, mask, maskPreBlend);
 | 
| +                pack4xHToLCD16<true>(dst, mask, maskPreBlend);
 | 
|              } else {
 | 
| -                pack4xHToLCD16<false>(bm, mask, maskPreBlend);
 | 
| +                pack4xHToLCD16<false>(dst, mask, maskPreBlend);
 | 
|              }
 | 
|              break;
 | 
|          default:
 | 
| 
 |