Better testing of SkCodec to 565

If getPixels returns an unexpected result, do not create a digest
and compare it to digests for premul and unpremul.

Print a better error message, including the name of the image and
string versions of the SkCodec::Result.

Change-Id: Ie98e350a1ef91c0745fe9de0855192e5793e033c
Reviewed-on: https://skia-review.googlesource.com/c/176582
Auto-Submit: Leon Scroggins <scroggo@google.com>
Reviewed-by: Nigel Tao <nigeltao@google.com>
Commit-Queue: Leon Scroggins <scroggo@google.com>
This commit is contained in:
Leon Scroggins III 2018-12-11 10:37:07 -05:00 committed by Skia Commit-Bot
parent cfb012032b
commit b41321b584

View File

@ -169,9 +169,9 @@ static void test_in_stripes(skiatest::Reporter* r, SkCodec* codec, const SkImage
}
template<typename Codec>
static void test_codec(skiatest::Reporter* r, Codec* codec, SkBitmap& bm, const SkImageInfo& info,
const SkISize& size, SkCodec::Result expectedResult, SkMD5::Digest* digest,
const SkMD5::Digest* goodDigest) {
static void test_codec(skiatest::Reporter* r, const char* path, Codec* codec, SkBitmap& bm,
const SkImageInfo& info, const SkISize& size, SkCodec::Result expectedResult,
SkMD5::Digest* digest, const SkMD5::Digest* goodDigest) {
REPORTER_ASSERT(r, info.dimensions() == size);
bm.allocPixels(info);
@ -195,16 +195,21 @@ static void test_codec(skiatest::Reporter* r, Codec* codec, SkBitmap& bm, const
// This will allow comparison even if the image is incomplete.
bm565.eraseColor(SK_ColorBLACK);
REPORTER_ASSERT(r, expectedResult == codec->getPixels(info565,
bm565.getPixels(), bm565.rowBytes()));
auto actualResult = codec->getPixels(info565, bm565.getPixels(), bm565.rowBytes());
if (actualResult == expectedResult) {
SkMD5::Digest digest565;
md5(bm565, &digest565);
SkMD5::Digest digest565;
md5(bm565, &digest565);
// A dumb client's request for non-opaque should also succeed.
for (auto alpha : { kPremul_SkAlphaType, kUnpremul_SkAlphaType }) {
info565 = info565.makeAlphaType(alpha);
test_info(r, codec, info565, expectedResult, &digest565);
// A request for non-opaque should also succeed.
for (auto alpha : { kPremul_SkAlphaType, kUnpremul_SkAlphaType }) {
info565 = info565.makeAlphaType(alpha);
test_info(r, codec, info565, expectedResult, &digest565);
}
} else {
ERRORF(r, "Decoding %s to 565 failed with result \"%s\"\n\t\t\t\texpected:\"%s\"",
path,
SkCodec::ResultToString(actualResult),
SkCodec::ResultToString(expectedResult));
}
} else {
test_info(r, codec, info565, SkCodec::kInvalidConversion, nullptr);
@ -310,7 +315,7 @@ static void check(skiatest::Reporter* r,
SkBitmap bm;
SkCodec::Result expectedResult =
supportsIncomplete ? SkCodec::kIncompleteInput : SkCodec::kSuccess;
test_codec(r, codec.get(), bm, info, size, expectedResult, &codecDigest, nullptr);
test_codec(r, path, codec.get(), bm, info, size, expectedResult, &codecDigest, nullptr);
// Scanline decoding follows.
@ -436,7 +441,7 @@ static void check(skiatest::Reporter* r,
SkBitmap bm;
SkMD5::Digest androidCodecDigest;
test_codec(r, androidCodec.get(), bm, info, size, expectedResult, &androidCodecDigest,
test_codec(r, path, androidCodec.get(), bm, info, size, expectedResult, &androidCodecDigest,
&codecDigest);
}