| Index: dm/DM.cpp
|
| diff --git a/dm/DM.cpp b/dm/DM.cpp
|
| index becea6ca6cf00c2c6eae2c548ec4692cd850628b..578e39cd648b996c2eb7d255b5c9ddda74188eba 100644
|
| --- a/dm/DM.cpp
|
| +++ b/dm/DM.cpp
|
| @@ -327,12 +327,123 @@ static void push_codec_srcs(Path path) {
|
| }
|
| }
|
|
|
| -static bool codec_supported(const char* ext) {
|
| - // FIXME: Once other versions of SkCodec are available, we can add them to this
|
| - // list (and eventually we can remove this check once they are all supported).
|
| +static bool brd_color_type_supported(SkBitmapRegionDecoderInterface::Strategy strategy,
|
| + CodecSrc::DstColorType dstColorType) {
|
| + switch (strategy) {
|
| + case SkBitmapRegionDecoderInterface::kCanvas_Strategy:
|
| + if (CodecSrc::kGetFromCanvas_DstColorType == dstColorType) {
|
| + return true;
|
| + }
|
| + return false;
|
| + case SkBitmapRegionDecoderInterface::kOriginal_Strategy:
|
| + switch (dstColorType) {
|
| + case CodecSrc::kGetFromCanvas_DstColorType:
|
| + case CodecSrc::kIndex8_Always_DstColorType:
|
| + case CodecSrc::kGrayscale_Always_DstColorType:
|
| + return true;
|
| + default:
|
| + return false;
|
| + }
|
| + default:
|
| + SkASSERT(false);
|
| + return false;
|
| + }
|
| +}
|
| +
|
| +static void push_brd_src(Path path, SkBitmapRegionDecoderInterface::Strategy strategy,
|
| + CodecSrc::DstColorType dstColorType, BRDSrc::Mode mode, uint32_t sampleSize) {
|
| + SkString folder;
|
| + switch (strategy) {
|
| + case SkBitmapRegionDecoderInterface::kCanvas_Strategy:
|
| + folder.append("brd_canvas");
|
| + break;
|
| + case SkBitmapRegionDecoderInterface::kOriginal_Strategy:
|
| + folder.append("brd_sample");
|
| + break;
|
| + default:
|
| + SkASSERT(false);
|
| + return;
|
| + }
|
| +
|
| + switch (mode) {
|
| + case BRDSrc::kFullImage_Mode:
|
| + break;
|
| + case BRDSrc::kDivisor_Mode:
|
| + folder.append("_divisor");
|
| + break;
|
| + default:
|
| + SkASSERT(false);
|
| + return;
|
| + }
|
| +
|
| + switch (dstColorType) {
|
| + case CodecSrc::kGetFromCanvas_DstColorType:
|
| + break;
|
| + case CodecSrc::kIndex8_Always_DstColorType:
|
| + folder.append("_kIndex");
|
| + break;
|
| + case CodecSrc::kGrayscale_Always_DstColorType:
|
| + folder.append("_kGray");
|
| + break;
|
| + default:
|
| + SkASSERT(false);
|
| + return;
|
| + }
|
| +
|
| + if (1 != sampleSize) {
|
| + folder.appendf("_%.3f", BRDSrc::GetScale(sampleSize));
|
| + }
|
| +
|
| + BRDSrc* src = new BRDSrc(path, strategy, mode, dstColorType, sampleSize);
|
| + push_src("image", folder, src);
|
| +}
|
| +
|
| +static void push_brd_srcs(Path path) {
|
| +
|
| + const SkBitmapRegionDecoderInterface::Strategy strategies[] = {
|
| + SkBitmapRegionDecoderInterface::kCanvas_Strategy,
|
| + SkBitmapRegionDecoderInterface::kOriginal_Strategy
|
| + };
|
| +
|
| + // We will only test to one backend (8888), but we will test all of the
|
| + // color types that we need to decode to on this backend.
|
| + const CodecSrc::DstColorType dstColorTypes[] = {
|
| + CodecSrc::kGetFromCanvas_DstColorType,
|
| + CodecSrc::kIndex8_Always_DstColorType,
|
| + CodecSrc::kGrayscale_Always_DstColorType,
|
| + };
|
| +
|
| + const BRDSrc::Mode modes[] = {
|
| + BRDSrc::kFullImage_Mode,
|
| + BRDSrc::kDivisor_Mode
|
| + };
|
| +
|
| + const uint32_t sampleSizes[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
|
| +
|
| + for (SkBitmapRegionDecoderInterface::Strategy strategy : strategies) {
|
| + // We disable png testing for kOriginal_Strategy because the implementation leaks
|
| + // memory in our forked libpng.
|
| + // TODO (msarett): Decide if we want to test pngs in this mode and how we might do this.
|
| + if (SkBitmapRegionDecoderInterface::kOriginal_Strategy == strategy &&
|
| + (path.endsWith(".png") || path.endsWith(".PNG"))) {
|
| + continue;
|
| + }
|
| + for (CodecSrc::DstColorType dstColorType : dstColorTypes) {
|
| + if (brd_color_type_supported(strategy, dstColorType)) {
|
| + for (BRDSrc::Mode mode : modes) {
|
| + for (uint32_t sampleSize : sampleSizes) {
|
| + push_brd_src(path, strategy, dstColorType, mode, sampleSize);
|
| + }
|
| + }
|
| + }
|
| + }
|
| + }
|
| +}
|
| +
|
| +static bool brd_supported(const char* ext) {
|
| static const char* const exts[] = {
|
| - "bmp", "gif", "jpg", "jpeg", "png", "ico", "wbmp", "webp",
|
| - "BMP", "GIF", "JPG", "JPEG", "PNG", "ICO", "WBMP", "WEBP",
|
| + "jpg", "jpeg", "png", "webp",
|
| + "JPG", "JPEG", "PNG", "WEBP",
|
| };
|
|
|
| for (uint32_t i = 0; i < SK_ARRAY_COUNT(exts); i++) {
|
| @@ -371,8 +482,9 @@ static void gather_srcs() {
|
| SkString path = SkOSPath::Join(flag, file.c_str());
|
| push_src("image", "decode", new ImageSrc(path)); // Decode entire image
|
| push_src("image", "subset", new ImageSrc(path, 2)); // Decode into 2x2 subsets
|
| - if (codec_supported(exts[j])) {
|
| - push_codec_srcs(path);
|
| + push_codec_srcs(path);
|
| + if (brd_supported(exts[j])) {
|
| + push_brd_srcs(path);
|
| }
|
| }
|
| }
|
| @@ -381,6 +493,7 @@ static void gather_srcs() {
|
| push_src("image", "decode", new ImageSrc(flag)); // Decode entire image.
|
| push_src("image", "subset", new ImageSrc(flag, 2)); // Decode into 2 x 2 subsets
|
| push_codec_srcs(flag);
|
| + push_brd_srcs(flag);
|
| }
|
| }
|
| }
|
|
|