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: |