| Index: src/effects/SkPictureImageFilter.cpp
 | 
| diff --git a/src/effects/SkPictureImageFilter.cpp b/src/effects/SkPictureImageFilter.cpp
 | 
| index 91f4dc9f29756fc4c9008da3af0a35464b7b9311..bf1ba8d7eb9a168cc4c161bd732d7bfd062deb94 100644
 | 
| --- a/src/effects/SkPictureImageFilter.cpp
 | 
| +++ b/src/effects/SkPictureImageFilter.cpp
 | 
| @@ -110,9 +110,9 @@ bool SkPictureImageFilter::onFilterImage(Proxy* proxy, const SkBitmap&, const Co
 | 
|  
 | 
|      if (kDeviceSpace_PictureResolution == fPictureResolution || 
 | 
|          0 == (ctx.ctm().getType() & ~SkMatrix::kTranslate_Mask)) {
 | 
| -        drawPictureAtDeviceResolution(proxy, device.get(), bounds, ctx);        
 | 
| +        this->drawPictureAtDeviceResolution(device.get(), bounds, ctx);        
 | 
|      } else {
 | 
| -        drawPictureAtLocalResolution(proxy, device.get(), bounds, ctx);
 | 
| +        this->drawPictureAtLocalResolution(proxy, device.get(), bounds, ctx);
 | 
|      }
 | 
|  
 | 
|      *result = device.get()->accessBitmap(false);
 | 
| @@ -121,13 +121,10 @@ bool SkPictureImageFilter::onFilterImage(Proxy* proxy, const SkBitmap&, const Co
 | 
|      return true;
 | 
|  }
 | 
|  
 | 
| -void SkPictureImageFilter::drawPictureAtDeviceResolution(Proxy* proxy, SkBaseDevice* device,
 | 
| +void SkPictureImageFilter::drawPictureAtDeviceResolution(SkBaseDevice* device,
 | 
|                                                           const SkIRect& deviceBounds,
 | 
|                                                           const Context& ctx) const {
 | 
| -    // Pass explicit surface props, as the simplified canvas constructor discards device properties.
 | 
| -    // FIXME: switch back to the public constructor (and unfriend) after
 | 
| -    //        https://code.google.com/p/skia/issues/detail?id=3142 is fixed.
 | 
| -    SkCanvas canvas(device, &proxy->surfaceProps(), SkCanvas::kDefault_InitFlags);
 | 
| +    SkCanvas canvas(device);
 | 
|  
 | 
|      canvas.translate(-SkIntToScalar(deviceBounds.fLeft), -SkIntToScalar(deviceBounds.fTop));
 | 
|      canvas.concat(ctx.ctm());
 | 
| @@ -138,26 +135,23 @@ void SkPictureImageFilter::drawPictureAtLocalResolution(Proxy* proxy, SkBaseDevi
 | 
|                                                          const SkIRect& deviceBounds,
 | 
|                                                          const Context& ctx) const {
 | 
|      SkMatrix inverseCtm;
 | 
| -    if (!ctx.ctm().invert(&inverseCtm))
 | 
| +    if (!ctx.ctm().invert(&inverseCtm)) {
 | 
|          return;
 | 
| +    }
 | 
| +
 | 
|      SkRect localBounds = SkRect::Make(ctx.clipBounds());
 | 
|      inverseCtm.mapRect(&localBounds);
 | 
| -    if (!localBounds.intersect(fCropRect))
 | 
| +    if (!localBounds.intersect(fCropRect)) {
 | 
|          return;
 | 
| +    }
 | 
|      SkIRect localIBounds = localBounds.roundOut();
 | 
|      SkAutoTUnref<SkBaseDevice> localDevice(proxy->createDevice(localIBounds.width(), localIBounds.height()));
 | 
|  
 | 
| -    // Pass explicit surface props, as the simplified canvas constructor discards device properties.
 | 
| -    // FIXME: switch back to the public constructor (and unfriend) after
 | 
| -    //        https://code.google.com/p/skia/issues/detail?id=3142 is fixed.
 | 
| -    SkCanvas localCanvas(localDevice, &proxy->surfaceProps(), SkCanvas::kDefault_InitFlags);
 | 
| +    SkCanvas localCanvas(localDevice);
 | 
|      localCanvas.translate(-SkIntToScalar(localIBounds.fLeft), -SkIntToScalar(localIBounds.fTop));
 | 
|      localCanvas.drawPicture(fPicture);
 | 
|  
 | 
| -    // Pass explicit surface props, as the simplified canvas constructor discards device properties.
 | 
| -    // FIXME: switch back to the public constructor (and unfriend) after
 | 
| -    //        https://code.google.com/p/skia/issues/detail?id=3142 is fixed.
 | 
| -    SkCanvas canvas(device, &proxy->surfaceProps(), SkCanvas::kDefault_InitFlags);
 | 
| +    SkCanvas canvas(device);
 | 
|  
 | 
|      canvas.translate(-SkIntToScalar(deviceBounds.fLeft), -SkIntToScalar(deviceBounds.fTop));
 | 
|      canvas.concat(ctx.ctm());
 | 
| @@ -165,7 +159,6 @@ void SkPictureImageFilter::drawPictureAtLocalResolution(Proxy* proxy, SkBaseDevi
 | 
|      paint.setFilterQuality(fFilterQuality);
 | 
|      canvas.drawBitmap(localDevice.get()->accessBitmap(false), SkIntToScalar(localIBounds.fLeft),
 | 
|                        SkIntToScalar(localIBounds.fTop), &paint);
 | 
| -    //canvas.drawPicture(fPicture);
 | 
|  }
 | 
|  
 | 
|  #ifndef SK_IGNORE_TO_STRING
 | 
| 
 |