skia2/gm/skbug_9819.cpp
Kevin Lubick 5e8f45faf1 [includes] Prepare for moving SkColorSpace to forward declare
This updates all our callsites in preparation for removing
the #include "include/core/SkColorSpace.h" from SkImageInfo.h

According to go/chrome-includes [1], this will save ~150MB
(0.07%) from the compilation size. I think SkColorSpace is
a big include because it loads the skcms header, which is
big.

The follow-on CL will remove that link, once clients have
been updated as well.

[1] https://commondatastorage.googleapis.com/chromium-browser-clang/chrome_includes_2022-03-31_124042.html#view=edges&filter=%5Ethird_party%2Fskia%2Finclude%2Fcore%2FSkImageInfo%5C.h%24&sort=asize&reverse=&includer=%5Ethird_party%2Fskia%2Finclude%2Fcore%2FSkImageInfo%5C.h%24&included=&limit=1000

Change-Id: I1b5ff491ac495317b0e5af3a2082b080d43697ae
Bug: skia:13052
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/525639
Reviewed-by: Robert Phillips <robertphillips@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
Reviewed-by: Florin Malita <fmalita@google.com>
Commit-Queue: Kevin Lubick <kjlubick@google.com>
2022-03-31 19:50:10 +00:00

56 lines
1.7 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"
#include "include/core/SkColorSpace.h"
#include "include/core/SkImage.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->drawImage(rgba.asImage(), 0,0);
c->drawImage(bgra.asImage(), 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);
}