xref: /aosp_15_r20/external/skia/gm/skbug_9819.cpp (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1 /*
2  * Copyright 2020 Google Inc.
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7 
8 #include "gm/gm.h"
9 #include "include/core/SkBitmap.h"
10 #include "include/core/SkCanvas.h"
11 #include "include/core/SkColorSpace.h"
12 #include "include/core/SkImage.h"
13 
14 // This GM should draw two yellow boxes; the bug drew one in cyan.
15 
16 DEF_SIMPLE_GM(skbug_9819, c, 256, 256) {
17     auto info = SkImageInfo::Make(1,1, kUnknown_SkColorType, kPremul_SkAlphaType);
18     SkBitmap rgba,
19              bgra;
20     rgba.allocPixels(info.makeColorType(kRGBA_8888_SkColorType));
21     bgra.allocPixels(info.makeColorType(kBGRA_8888_SkColorType));
22 
23     SkColor yellow = 0xffffff00;
24     rgba.eraseColor(yellow);
25     bgra.eraseColor(yellow);
26 
27     c->save();
28         c->scale(128,128);
29         c->drawImage(rgba.asImage(), 0,0);
30         c->drawImage(bgra.asImage(), 0,1);
31     c->restore();
32 
__anon63a81f680102(int x, int y)33     auto grade = [&](int x, int y){
34         SkBitmap bm;
35         bm.allocPixels(SkImageInfo::Make(1,1,
36                                          kGray_8_SkColorType,
37                                          kUnpremul_SkAlphaType,
38                                          SkColorSpace::MakeSRGB()));
39         if (!c->readPixels(bm, x,y)) {
40             // Picture-backed canvases, that sort of thing.  Just assume they're good.
41             MarkGMGood(c, x+128, y);
42             return;
43         }
44 
45         // We test only luma so that grayscale destinations are also correctly graded:
46         //    - yellow (good) is around 237
47         //    - cyan   (bad)  is around 202
48         uint8_t gray = *bm.getAddr8(0,0);
49         (abs(gray - 237) > 2 ? MarkGMBad
50                              : MarkGMGood)(c, x+128,y);
51     };
52 
53     grade(64,  64);
54     grade(64, 192);
55 }
56