| Index: dm/DMSrcSink.h | 
| diff --git a/dm/DMSrcSink.h b/dm/DMSrcSink.h | 
| index efae87138e50c6684b0ef1e65bfbbb7272aedaab..fe6c91dfadeb5228fddaa3bbb19e0b9188e0e22b 100644 | 
| --- a/dm/DMSrcSink.h | 
| +++ b/dm/DMSrcSink.h | 
| @@ -12,6 +12,7 @@ | 
| #include "SkBBHFactory.h" | 
| #include "SkBBoxHierarchy.h" | 
| #include "SkBitmap.h" | 
| +#include "SkBitmapRegionDecoderInterface.h" | 
| #include "SkCanvas.h" | 
| #include "SkData.h" | 
| #include "SkGPipe.h" | 
| @@ -128,6 +129,34 @@ private: | 
| float                   fScale; | 
| }; | 
|  | 
| +// Allows for testing of various implementations of Android's BitmapRegionDecoder | 
| +class BRDSrc : public Src { | 
| +public: | 
| +    enum Mode { | 
| +        // Decode the entire image as one region. | 
| +        kFullImage_Mode, | 
| +        // Splits the image into multiple regions using a divisor and decodes the regions | 
| +        // separately.  Also, this test adds a border of a few pixels to each of the regions | 
| +        // that it is decoding.  This tests the behavior when a client asks for a region that | 
| +        // does not fully fit in the image. | 
| +        kDivisor_Mode, | 
| +    }; | 
| + | 
| +    BRDSrc(Path, SkBitmapRegionDecoderInterface::Strategy, Mode, CodecSrc::DstColorType, uint32_t); | 
| + | 
| +    static float GetScale(uint32_t sampleSize) { return 1.0f / (float) sampleSize; } | 
| + | 
| +    Error draw(SkCanvas*) const override; | 
| +    SkISize size() const override; | 
| +    Name name() const override; | 
| +    bool veto(SinkFlags) const override; | 
| +private: | 
| +    Path                                     fPath; | 
| +    SkBitmapRegionDecoderInterface::Strategy fStrategy; | 
| +    Mode                                     fMode; | 
| +    CodecSrc::DstColorType                   fDstColorType; | 
| +    uint32_t                                 fSampleSize; | 
| +}; | 
|  | 
| class ImageSrc : public Src { | 
| public: | 
|  |