| Index: src/pdf/SkPDFDevice.cpp | 
| diff --git a/src/pdf/SkPDFDevice.cpp b/src/pdf/SkPDFDevice.cpp | 
| index e3134f4ac397ddac9faf50f518a40fe53e74e7db..e90edb1408fa790592e2f0766305eb923e72d3b6 100644 | 
| --- a/src/pdf/SkPDFDevice.cpp | 
| +++ b/src/pdf/SkPDFDevice.cpp | 
| @@ -648,8 +648,16 @@ private: | 
| void init(const SkClipStack* clipStack, const SkRegion& clipRegion, | 
| const SkMatrix& matrix, const SkPaint& paint, bool hasText) { | 
| fDstFormXObject = NULL; | 
| -        // Shape has to be flatten before we get here. | 
| -        NOT_IMPLEMENTED(!matrix.hasPerspective(), false); | 
| +        if (matrix.hasPerspective() || | 
| +                (paint.getShader() && | 
| +                 paint.getShader()->getLocalMatrix().hasPerspective())) { | 
| +            // Just report that PDF does not supports perspective | 
| +            // TODO(edisonn): update the shape when possible | 
| +            // or dump in an image otherwise | 
| +            NOT_IMPLEMENTED(true, false); | 
| +            return; | 
| +        } | 
| + | 
| if (paint.getXfermode()) { | 
| paint.getXfermode()->asMode(&fXfermode); | 
| } | 
| @@ -697,8 +705,9 @@ SkPDFDevice::SkPDFDevice(const SkISize& pageSize, const SkISize& contentSize, | 
| fLastMarginContentEntry(NULL), | 
| fClipStack(NULL), | 
| fEncoder(NULL) { | 
| -    // Just report that PDF does not supports perspective in the | 
| -    // initial transform. | 
| +    // just report that PDF does not supports perspective | 
| +    // TODO(edisonn): update the shape when possible | 
| +    // or dump in an image otherwise | 
| NOT_IMPLEMENTED(initialTransform.hasPerspective(), true); | 
|  | 
| // Skia generally uses the top left as the origin but PDF natively has the | 
|  |