| Index: dm/DM.cpp
|
| diff --git a/dm/DM.cpp b/dm/DM.cpp
|
| index 2ecba1da7a5d5b086e3a7bd821d9f31e8c146608..becea6ca6cf00c2c6eae2c548ec4692cd850628b 100644
|
| --- a/dm/DM.cpp
|
| +++ b/dm/DM.cpp
|
| @@ -225,7 +225,7 @@ static void push_codec_src(Path path, CodecSrc::Mode mode, CodecSrc::DstColorTyp
|
| folder.append("stripe");
|
| break;
|
| case CodecSrc::kSubset_Mode:
|
| - folder.append("subset");
|
| + folder.append("codec_subset");
|
| break;
|
| }
|
|
|
| @@ -260,34 +260,69 @@ static void push_codec_srcs(Path path) {
|
| return;
|
| }
|
|
|
| - // Choose scales for scaling tests.
|
| + // Native Scales
|
| // TODO (msarett): Implement scaling tests for SkImageDecoder in order to compare with these
|
| // tests. SkImageDecoder supports downscales by integer factors.
|
| // SkJpegCodec natively supports scaling to: 0.125, 0.25, 0.375, 0.5, 0.625, 0.75, 0.875
|
| - // 0.1, 0.16, 0.2 etc allow us to test SkScaledCodec with sampleSize 10, 6, 5, etc
|
| - // 0.4, 0.7 etc allow to test what happens when the client requests a scale that
|
| - // does not exactly match a sampleSize or native scaling capability
|
| - const float scales[] = { 0.1f, 0.125f, 0.166f, 0.2f, 0.25f, 0.333f, 0.375f, 0.4f, 0.5f, 0.6f,
|
| - 0.625f, 0.750f, 0.8f, 0.875f, 1.0f };
|
| + const float nativeScales[] = { 0.125f, 0.25f, 0.375f, 0.5f, 0.625f, 0.750f, 0.875f, 1.0f };
|
| +
|
| + const CodecSrc::Mode nativeModes[] = { CodecSrc::kCodec_Mode, CodecSrc::kScanline_Mode,
|
| + CodecSrc::kScanline_Subset_Mode, CodecSrc::kStripe_Mode, CodecSrc::kSubset_Mode };
|
| +
|
| + CodecSrc::DstColorType colorTypes[3];
|
| + uint32_t numColorTypes;
|
| + switch (codec->getInfo().colorType()) {
|
| + case kGray_8_SkColorType:
|
| + // FIXME: Is this a long term solution for testing wbmps decodes to kIndex8?
|
| + // Further discussion on this topic is at skbug.com/3683
|
| + colorTypes[0] = CodecSrc::kGetFromCanvas_DstColorType;
|
| + colorTypes[1] = CodecSrc::kGrayscale_Always_DstColorType;
|
| + colorTypes[2] = CodecSrc::kIndex8_Always_DstColorType;
|
| + numColorTypes = 3;
|
| + break;
|
| + case kIndex_8_SkColorType:
|
| + colorTypes[0] = CodecSrc::kGetFromCanvas_DstColorType;
|
| + colorTypes[1] = CodecSrc::kIndex8_Always_DstColorType;
|
| + numColorTypes = 2;
|
| + break;
|
| + default:
|
| + colorTypes[0] = CodecSrc::kGetFromCanvas_DstColorType;
|
| + numColorTypes = 1;
|
| + break;
|
| + }
|
|
|
| - const CodecSrc::Mode modes[] = { CodecSrc::kCodec_Mode, CodecSrc::kScaledCodec_Mode,
|
| - CodecSrc::kScanline_Mode, CodecSrc::kScanline_Subset_Mode, CodecSrc::kStripe_Mode,
|
| - CodecSrc::kSubset_Mode };
|
| + for (float scale : nativeScales) {
|
| + if (scale != 1.0f && (path.endsWith(".webp") || path.endsWith(".WEBP"))) {
|
| + // FIXME: skbug.com/4038 Scaling webp seems to leave some pixels uninitialized/
|
| + // compute their colors based on uninitialized values.
|
| + continue;
|
| + }
|
| +
|
| + for (CodecSrc::Mode mode : nativeModes) {
|
| + for (uint32_t i = 0; i < numColorTypes; i++) {
|
| + push_codec_src(path, mode, colorTypes[i], scale);
|
| + }
|
| + }
|
| + }
|
|
|
| - const CodecSrc::DstColorType colorTypes[] = { CodecSrc::kGetFromCanvas_DstColorType,
|
| - CodecSrc::kGrayscale_Always_DstColorType, CodecSrc::kIndex8_Always_DstColorType };
|
| + // SkScaledCodec Scales
|
| + // The native scales are included to make sure that SkScaledCodec defaults to the native
|
| + // scaling strategy when possible.
|
| + // 0.1, 0.16, 0.2 etc allow us to test SkScaledCodec with sampleSize 10, 6, 5, etc.
|
| + // 0.4, 0.7 etc allow to test what happens when the client requests a scale that
|
| + // does not exactly match a sampleSize or native scaling capability.
|
| + const float samplingScales[] = { 0.1f, 0.125f, 0.166f, 0.2f, 0.25f, 0.333f, 0.375f, 0.4f, 0.5f,
|
| + 0.6f, 0.625f, 0.750f, 0.8f, 0.875f, 1.0f };
|
|
|
| - for (float scale : scales) {
|
| + for (float scale : samplingScales) {
|
| if (scale != 1.0f && (path.endsWith(".webp") || path.endsWith(".WEBP"))) {
|
| // FIXME: skbug.com/4038 Scaling webp seems to leave some pixels uninitialized/
|
| // compute their colors based on uninitialized values.
|
| continue;
|
| }
|
|
|
| - for (CodecSrc::Mode mode : modes) {
|
| - for (CodecSrc::DstColorType colorType : colorTypes) {
|
| - push_codec_src(path, mode, colorType, scale);
|
| - }
|
| + for (uint32_t i = 0; i < numColorTypes; i++) {
|
| + push_codec_src(path, CodecSrc::kScaledCodec_Mode, colorTypes[i], scale);
|
| }
|
| }
|
| }
|
|
|