skia2/gm/skbug_9819.cpp
Mike Klein 5e58f94d67 tweak grading in gm/skbug_9819 for G8
We can look at the luma to test correctness,
which lets G8 destinations be tested correctly.

Change-Id: I412381e5b2829258f0f9f340fb28ff88344e7f02
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/267225
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: Mike Klein <mtklein@google.com>
2020-01-28 22:10:36 +00:00

54 lines
1.6 KiB
C++

/*
* Copyright 2020 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#include "gm/gm.h"
#include "include/core/SkBitmap.h"
#include "include/core/SkCanvas.h"
// This GM should draw two yellow boxes; the bug drew one in cyan.
DEF_SIMPLE_GM(skbug_9819, c, 256, 256) {
auto info = SkImageInfo::Make(1,1, kUnknown_SkColorType, kPremul_SkAlphaType);
SkBitmap rgba,
bgra;
rgba.allocPixels(info.makeColorType(kRGBA_8888_SkColorType));
bgra.allocPixels(info.makeColorType(kBGRA_8888_SkColorType));
SkColor yellow = 0xffffff00;
rgba.eraseColor(yellow);
bgra.eraseColor(yellow);
c->save();
c->scale(128,128);
c->drawBitmap(rgba, 0,0);
c->drawBitmap(bgra, 0,1);
c->restore();
auto grade = [&](int x, int y){
SkBitmap bm;
bm.allocPixels(SkImageInfo::Make(1,1,
kGray_8_SkColorType,
kUnpremul_SkAlphaType,
SkColorSpace::MakeSRGB()));
if (!c->readPixels(bm, x,y)) {
// Picture-backed canvases, that sort of thing. Just assume they're good.
MarkGMGood(c, x+128, y);
return;
}
// We test only luma so that grayscale destinations are also correctly graded:
// - yellow (good) is around 237
// - cyan (bad) is around 202
uint8_t gray = *bm.getAddr8(0,0);
(abs(gray - 237) > 2 ? MarkGMBad
: MarkGMGood)(c, x+128,y);
};
grade(64, 64);
grade(64, 192);
}