xref: /aosp_15_r20/external/skia/gm/all_bitmap_configs.cpp (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Worker /*
2*c8dee2aaSAndroid Build Coastguard Worker  * Copyright 2015 Google Inc.
3*c8dee2aaSAndroid Build Coastguard Worker  *
4*c8dee2aaSAndroid Build Coastguard Worker  * Use of this source code is governed by a BSD-style license that can be
5*c8dee2aaSAndroid Build Coastguard Worker  * found in the LICENSE file.
6*c8dee2aaSAndroid Build Coastguard Worker  */
7*c8dee2aaSAndroid Build Coastguard Worker 
8*c8dee2aaSAndroid Build Coastguard Worker #include "gm/gm.h"
9*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkBitmap.h"
10*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkCanvas.h"
11*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkColor.h"
12*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkColorSpace.h"
13*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkFont.h"
14*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkFontStyle.h"
15*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkFontTypes.h"
16*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkImage.h"
17*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkImageInfo.h"
18*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkPaint.h"
19*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkPixmap.h"
20*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkRect.h"
21*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkRefCnt.h"
22*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkScalar.h"
23*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkTypeface.h"
24*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkTypes.h"
25*c8dee2aaSAndroid Build Coastguard Worker #include "tools/DecodeUtils.h"
26*c8dee2aaSAndroid Build Coastguard Worker #include "tools/Resources.h"
27*c8dee2aaSAndroid Build Coastguard Worker #include "tools/ToolUtils.h"
28*c8dee2aaSAndroid Build Coastguard Worker #include "tools/fonts/FontToolUtils.h"
29*c8dee2aaSAndroid Build Coastguard Worker 
30*c8dee2aaSAndroid Build Coastguard Worker #include <string.h>
31*c8dee2aaSAndroid Build Coastguard Worker #include <initializer_list>
32*c8dee2aaSAndroid Build Coastguard Worker 
copy_bitmap(const SkBitmap & src,SkColorType colorType)33*c8dee2aaSAndroid Build Coastguard Worker static SkBitmap copy_bitmap(const SkBitmap& src, SkColorType colorType) {
34*c8dee2aaSAndroid Build Coastguard Worker     const SkBitmap* srcPtr = &src;
35*c8dee2aaSAndroid Build Coastguard Worker     SkBitmap tmp(src);
36*c8dee2aaSAndroid Build Coastguard Worker     if (kRGB_565_SkColorType == colorType) {
37*c8dee2aaSAndroid Build Coastguard Worker         tmp.setAlphaType(kOpaque_SkAlphaType);
38*c8dee2aaSAndroid Build Coastguard Worker         srcPtr = &tmp;
39*c8dee2aaSAndroid Build Coastguard Worker     }
40*c8dee2aaSAndroid Build Coastguard Worker 
41*c8dee2aaSAndroid Build Coastguard Worker     SkBitmap copy;
42*c8dee2aaSAndroid Build Coastguard Worker     ToolUtils::copy_to(&copy, colorType, *srcPtr);
43*c8dee2aaSAndroid Build Coastguard Worker     copy.setImmutable();
44*c8dee2aaSAndroid Build Coastguard Worker     return copy;
45*c8dee2aaSAndroid Build Coastguard Worker }
46*c8dee2aaSAndroid Build Coastguard Worker 
47*c8dee2aaSAndroid Build Coastguard Worker #define SCALE 128
48*c8dee2aaSAndroid Build Coastguard Worker 
49*c8dee2aaSAndroid Build Coastguard Worker // Make either A8 or gray8 bitmap.
make_bitmap(SkColorType ct)50*c8dee2aaSAndroid Build Coastguard Worker static SkBitmap make_bitmap(SkColorType ct) {
51*c8dee2aaSAndroid Build Coastguard Worker     SkBitmap bm;
52*c8dee2aaSAndroid Build Coastguard Worker     switch (ct) {
53*c8dee2aaSAndroid Build Coastguard Worker         case kAlpha_8_SkColorType:
54*c8dee2aaSAndroid Build Coastguard Worker             bm.allocPixels(SkImageInfo::MakeA8(SCALE, SCALE));
55*c8dee2aaSAndroid Build Coastguard Worker             break;
56*c8dee2aaSAndroid Build Coastguard Worker         case kGray_8_SkColorType:
57*c8dee2aaSAndroid Build Coastguard Worker             bm.allocPixels(
58*c8dee2aaSAndroid Build Coastguard Worker                     SkImageInfo::Make(SCALE, SCALE, ct, kOpaque_SkAlphaType));
59*c8dee2aaSAndroid Build Coastguard Worker             break;
60*c8dee2aaSAndroid Build Coastguard Worker         default:
61*c8dee2aaSAndroid Build Coastguard Worker             SkASSERT(false);
62*c8dee2aaSAndroid Build Coastguard Worker             return bm;
63*c8dee2aaSAndroid Build Coastguard Worker     }
64*c8dee2aaSAndroid Build Coastguard Worker     uint8_t spectrum[256];
65*c8dee2aaSAndroid Build Coastguard Worker     for (int y = 0; y < 256; ++y) {
66*c8dee2aaSAndroid Build Coastguard Worker         spectrum[y] = y;
67*c8dee2aaSAndroid Build Coastguard Worker     }
68*c8dee2aaSAndroid Build Coastguard Worker     for (int y = 0; y < 128; ++y) {
69*c8dee2aaSAndroid Build Coastguard Worker         // Shift over one byte each scanline.
70*c8dee2aaSAndroid Build Coastguard Worker         memcpy(bm.getAddr8(0, y), &spectrum[y], 128);
71*c8dee2aaSAndroid Build Coastguard Worker     }
72*c8dee2aaSAndroid Build Coastguard Worker     bm.setImmutable();
73*c8dee2aaSAndroid Build Coastguard Worker     return bm;
74*c8dee2aaSAndroid Build Coastguard Worker }
75*c8dee2aaSAndroid Build Coastguard Worker 
draw_center_letter(char c,const SkFont & font,SkColor color,SkScalar x,SkScalar y,SkCanvas * canvas)76*c8dee2aaSAndroid Build Coastguard Worker static void draw_center_letter(char c, const SkFont& font, SkColor color,
77*c8dee2aaSAndroid Build Coastguard Worker                                SkScalar x, SkScalar y, SkCanvas* canvas) {
78*c8dee2aaSAndroid Build Coastguard Worker     SkRect bounds;
79*c8dee2aaSAndroid Build Coastguard Worker     font.measureText(&c, 1, SkTextEncoding::kUTF8, &bounds);
80*c8dee2aaSAndroid Build Coastguard Worker     canvas->drawSimpleText(&c, 1, SkTextEncoding::kUTF8,
81*c8dee2aaSAndroid Build Coastguard Worker                            x - bounds.centerX(), y - bounds.centerY(),
82*c8dee2aaSAndroid Build Coastguard Worker                            font, SkPaint(SkColor4f::FromColor(color)));
83*c8dee2aaSAndroid Build Coastguard Worker }
84*c8dee2aaSAndroid Build Coastguard Worker 
color_wheel_native(SkCanvas * canvas)85*c8dee2aaSAndroid Build Coastguard Worker static void color_wheel_native(SkCanvas* canvas) {
86*c8dee2aaSAndroid Build Coastguard Worker     SkAutoCanvasRestore autoCanvasRestore(canvas, true);
87*c8dee2aaSAndroid Build Coastguard Worker     canvas->translate(0.5f * SCALE, 0.5f * SCALE);
88*c8dee2aaSAndroid Build Coastguard Worker     canvas->drawCircle(0.0f, 0.0f, SCALE * 0.5f, SkPaint(SkColors::kWhite));
89*c8dee2aaSAndroid Build Coastguard Worker 
90*c8dee2aaSAndroid Build Coastguard Worker     const double sqrt_3_over_2 = 0.8660254037844387;
91*c8dee2aaSAndroid Build Coastguard Worker     const SkScalar Z = 0.0f;
92*c8dee2aaSAndroid Build Coastguard Worker     const SkScalar D = 0.3f * SkIntToScalar(SCALE);
93*c8dee2aaSAndroid Build Coastguard Worker     const SkScalar X = SkDoubleToScalar(D * sqrt_3_over_2);
94*c8dee2aaSAndroid Build Coastguard Worker     const SkScalar Y = D * SK_ScalarHalf;
95*c8dee2aaSAndroid Build Coastguard Worker 
96*c8dee2aaSAndroid Build Coastguard Worker     SkFont font;
97*c8dee2aaSAndroid Build Coastguard Worker     font.setEdging(SkFont::Edging::kAlias);
98*c8dee2aaSAndroid Build Coastguard Worker     font.setTypeface(ToolUtils::CreatePortableTypeface("Sans", SkFontStyle::Bold()));
99*c8dee2aaSAndroid Build Coastguard Worker     font.setSize(0.28125f * SCALE);
100*c8dee2aaSAndroid Build Coastguard Worker     draw_center_letter('K', font, SK_ColorBLACK, Z, Z, canvas);
101*c8dee2aaSAndroid Build Coastguard Worker     draw_center_letter('R', font, SK_ColorRED, Z, D, canvas);
102*c8dee2aaSAndroid Build Coastguard Worker     draw_center_letter('G', font, SK_ColorGREEN, -X, -Y, canvas);
103*c8dee2aaSAndroid Build Coastguard Worker     draw_center_letter('B', font, SK_ColorBLUE, X, -Y, canvas);
104*c8dee2aaSAndroid Build Coastguard Worker     draw_center_letter('C', font, SK_ColorCYAN, Z, -D, canvas);
105*c8dee2aaSAndroid Build Coastguard Worker     draw_center_letter('M', font, SK_ColorMAGENTA, X, Y, canvas);
106*c8dee2aaSAndroid Build Coastguard Worker     draw_center_letter('Y', font, SK_ColorYELLOW, -X, Y, canvas);
107*c8dee2aaSAndroid Build Coastguard Worker }
108*c8dee2aaSAndroid Build Coastguard Worker 
109*c8dee2aaSAndroid Build Coastguard Worker template <typename T>
find(T * array,int N,T item)110*c8dee2aaSAndroid Build Coastguard Worker int find(T* array, int N, T item) {
111*c8dee2aaSAndroid Build Coastguard Worker     for (int i = 0; i < N; ++i) {
112*c8dee2aaSAndroid Build Coastguard Worker         if (array[i] == item) {
113*c8dee2aaSAndroid Build Coastguard Worker             return i;
114*c8dee2aaSAndroid Build Coastguard Worker         }
115*c8dee2aaSAndroid Build Coastguard Worker     }
116*c8dee2aaSAndroid Build Coastguard Worker     return -1;
117*c8dee2aaSAndroid Build Coastguard Worker }
118*c8dee2aaSAndroid Build Coastguard Worker 
draw(SkCanvas * canvas,const SkPaint & p,const SkFont & font,const SkBitmap & src,SkColorType colorType,const char text[])119*c8dee2aaSAndroid Build Coastguard Worker static void draw(SkCanvas* canvas,
120*c8dee2aaSAndroid Build Coastguard Worker                  const SkPaint& p,
121*c8dee2aaSAndroid Build Coastguard Worker                  const SkFont& font,
122*c8dee2aaSAndroid Build Coastguard Worker                  const SkBitmap& src,
123*c8dee2aaSAndroid Build Coastguard Worker                  SkColorType colorType,
124*c8dee2aaSAndroid Build Coastguard Worker                  const char text[]) {
125*c8dee2aaSAndroid Build Coastguard Worker     SkASSERT(src.colorType() == colorType);
126*c8dee2aaSAndroid Build Coastguard Worker     canvas->drawImage(src.asImage(), 0.0f, 0.0f);
127*c8dee2aaSAndroid Build Coastguard Worker     canvas->drawSimpleText(text, strlen(text), SkTextEncoding::kUTF8, 0.0f, 12.0f, font, p);
128*c8dee2aaSAndroid Build Coastguard Worker }
129*c8dee2aaSAndroid Build Coastguard Worker 
130*c8dee2aaSAndroid Build Coastguard Worker DEF_SIMPLE_GM(all_bitmap_configs, canvas, SCALE, 6 * SCALE) {
131*c8dee2aaSAndroid Build Coastguard Worker     SkAutoCanvasRestore autoCanvasRestore(canvas, true);
132*c8dee2aaSAndroid Build Coastguard Worker     SkPaint p(SkColors::kBlack);
133*c8dee2aaSAndroid Build Coastguard Worker     p.setAntiAlias(true);
134*c8dee2aaSAndroid Build Coastguard Worker 
135*c8dee2aaSAndroid Build Coastguard Worker     SkFont font = ToolUtils::DefaultPortableFont();
136*c8dee2aaSAndroid Build Coastguard Worker 
137*c8dee2aaSAndroid Build Coastguard Worker     ToolUtils::draw_checkerboard(canvas, SK_ColorLTGRAY, SK_ColorWHITE, 8);
138*c8dee2aaSAndroid Build Coastguard Worker 
139*c8dee2aaSAndroid Build Coastguard Worker     SkBitmap bitmap;
140*c8dee2aaSAndroid Build Coastguard Worker     if (ToolUtils::GetResourceAsBitmap("images/color_wheel.png", &bitmap)) {
141*c8dee2aaSAndroid Build Coastguard Worker         bitmap.setImmutable();
142*c8dee2aaSAndroid Build Coastguard Worker         draw(canvas, p, font, bitmap, kN32_SkColorType, "Native 32");
143*c8dee2aaSAndroid Build Coastguard Worker 
144*c8dee2aaSAndroid Build Coastguard Worker         canvas->translate(0.0f, SkIntToScalar(SCALE));
145*c8dee2aaSAndroid Build Coastguard Worker         SkBitmap copy565 = copy_bitmap(bitmap, kRGB_565_SkColorType);
146*c8dee2aaSAndroid Build Coastguard Worker         p.setColor(SK_ColorRED);
147*c8dee2aaSAndroid Build Coastguard Worker         draw(canvas, p, font, copy565, kRGB_565_SkColorType, "RGB 565");
148*c8dee2aaSAndroid Build Coastguard Worker         p.setColor(SK_ColorBLACK);
149*c8dee2aaSAndroid Build Coastguard Worker 
150*c8dee2aaSAndroid Build Coastguard Worker         canvas->translate(0.0f, SkIntToScalar(SCALE));
151*c8dee2aaSAndroid Build Coastguard Worker         SkBitmap copy4444 = copy_bitmap(bitmap, kARGB_4444_SkColorType);
152*c8dee2aaSAndroid Build Coastguard Worker         draw(canvas, p, font, copy4444, kARGB_4444_SkColorType, "ARGB 4444");
153*c8dee2aaSAndroid Build Coastguard Worker 
154*c8dee2aaSAndroid Build Coastguard Worker         canvas->translate(0.0f, SkIntToScalar(SCALE));
155*c8dee2aaSAndroid Build Coastguard Worker         SkBitmap copyF16 = copy_bitmap(bitmap, kRGBA_F16_SkColorType);
156*c8dee2aaSAndroid Build Coastguard Worker         draw(canvas, p, font, copyF16, kRGBA_F16_SkColorType, "RGBA F16");
157*c8dee2aaSAndroid Build Coastguard Worker 
158*c8dee2aaSAndroid Build Coastguard Worker     } else {
159*c8dee2aaSAndroid Build Coastguard Worker         canvas->translate(0.0f, SkIntToScalar(3 * SCALE));
160*c8dee2aaSAndroid Build Coastguard Worker     }
161*c8dee2aaSAndroid Build Coastguard Worker 
162*c8dee2aaSAndroid Build Coastguard Worker     canvas->translate(0.0f, SkIntToScalar(SCALE));
163*c8dee2aaSAndroid Build Coastguard Worker     SkBitmap bitmapA8 = make_bitmap(kAlpha_8_SkColorType);
164*c8dee2aaSAndroid Build Coastguard Worker     draw(canvas, p, font, bitmapA8, kAlpha_8_SkColorType, "Alpha 8");
165*c8dee2aaSAndroid Build Coastguard Worker 
166*c8dee2aaSAndroid Build Coastguard Worker     p.setColor(SK_ColorRED);
167*c8dee2aaSAndroid Build Coastguard Worker     canvas->translate(0.0f, SkIntToScalar(SCALE));
168*c8dee2aaSAndroid Build Coastguard Worker     SkBitmap bitmapG8 = make_bitmap(kGray_8_SkColorType);
169*c8dee2aaSAndroid Build Coastguard Worker     draw(canvas, p, font, bitmapG8, kGray_8_SkColorType, "Gray 8");
170*c8dee2aaSAndroid Build Coastguard Worker }
171*c8dee2aaSAndroid Build Coastguard Worker 
make_not_native32_color_wheel()172*c8dee2aaSAndroid Build Coastguard Worker sk_sp<SkImage> make_not_native32_color_wheel() {
173*c8dee2aaSAndroid Build Coastguard Worker     SkBitmap n32bitmap, notN32bitmap;
174*c8dee2aaSAndroid Build Coastguard Worker     n32bitmap.allocN32Pixels(SCALE, SCALE);
175*c8dee2aaSAndroid Build Coastguard Worker     n32bitmap.eraseColor(SK_ColorTRANSPARENT);
176*c8dee2aaSAndroid Build Coastguard Worker     SkCanvas n32canvas(n32bitmap);
177*c8dee2aaSAndroid Build Coastguard Worker     color_wheel_native(&n32canvas);
178*c8dee2aaSAndroid Build Coastguard Worker     #if SK_PMCOLOR_BYTE_ORDER(B,G,R,A)
179*c8dee2aaSAndroid Build Coastguard Worker         const SkColorType ct = kRGBA_8888_SkColorType;
180*c8dee2aaSAndroid Build Coastguard Worker     #elif SK_PMCOLOR_BYTE_ORDER(R,G,B,A)
181*c8dee2aaSAndroid Build Coastguard Worker         const SkColorType ct = kBGRA_8888_SkColorType;
182*c8dee2aaSAndroid Build Coastguard Worker     #endif
183*c8dee2aaSAndroid Build Coastguard Worker     static_assert(ct != kN32_SkColorType, "BRGA!=RGBA");
184*c8dee2aaSAndroid Build Coastguard Worker     SkAssertResult(ToolUtils::copy_to(&notN32bitmap, ct, n32bitmap));
185*c8dee2aaSAndroid Build Coastguard Worker     SkASSERT(notN32bitmap.colorType() == ct);
186*c8dee2aaSAndroid Build Coastguard Worker     return notN32bitmap.asImage();
187*c8dee2aaSAndroid Build Coastguard Worker }
188*c8dee2aaSAndroid Build Coastguard Worker 
DEF_SIMPLE_GM(not_native32_bitmap_config,canvas,SCALE,SCALE)189*c8dee2aaSAndroid Build Coastguard Worker DEF_SIMPLE_GM(not_native32_bitmap_config, canvas, SCALE, SCALE) {
190*c8dee2aaSAndroid Build Coastguard Worker     sk_sp<SkImage> notN32image(make_not_native32_color_wheel());
191*c8dee2aaSAndroid Build Coastguard Worker     SkASSERT(notN32image);
192*c8dee2aaSAndroid Build Coastguard Worker     ToolUtils::draw_checkerboard(canvas, SK_ColorLTGRAY, SK_ColorWHITE, 8);
193*c8dee2aaSAndroid Build Coastguard Worker     canvas->drawImage(notN32image.get(), 0.0f, 0.0f);
194*c8dee2aaSAndroid Build Coastguard Worker }
195*c8dee2aaSAndroid Build Coastguard Worker 
make_pixel(int x,int y,SkAlphaType alphaType)196*c8dee2aaSAndroid Build Coastguard Worker static uint32_t make_pixel(int x, int y, SkAlphaType alphaType) {
197*c8dee2aaSAndroid Build Coastguard Worker     SkASSERT(x >= 0 && x < SCALE);
198*c8dee2aaSAndroid Build Coastguard Worker     SkASSERT(y >= 0 && y < SCALE);
199*c8dee2aaSAndroid Build Coastguard Worker 
200*c8dee2aaSAndroid Build Coastguard Worker     SkScalar R = SCALE / 2.0f;
201*c8dee2aaSAndroid Build Coastguard Worker 
202*c8dee2aaSAndroid Build Coastguard Worker     uint32_t alpha = 0x00;
203*c8dee2aaSAndroid Build Coastguard Worker 
204*c8dee2aaSAndroid Build Coastguard Worker     if ((x - R) * (x - R) + (y - R) * (y - R) < R * R) {
205*c8dee2aaSAndroid Build Coastguard Worker         alpha = 0xFF;
206*c8dee2aaSAndroid Build Coastguard Worker     }
207*c8dee2aaSAndroid Build Coastguard Worker 
208*c8dee2aaSAndroid Build Coastguard Worker     uint32_t component;
209*c8dee2aaSAndroid Build Coastguard Worker     switch (alphaType) {
210*c8dee2aaSAndroid Build Coastguard Worker         case kPremul_SkAlphaType:
211*c8dee2aaSAndroid Build Coastguard Worker             component = alpha;
212*c8dee2aaSAndroid Build Coastguard Worker             break;
213*c8dee2aaSAndroid Build Coastguard Worker         case kUnpremul_SkAlphaType:
214*c8dee2aaSAndroid Build Coastguard Worker             component = 0xFF;
215*c8dee2aaSAndroid Build Coastguard Worker             break;
216*c8dee2aaSAndroid Build Coastguard Worker         default:
217*c8dee2aaSAndroid Build Coastguard Worker             SK_ABORT("Should not get here - invalid alpha type");
218*c8dee2aaSAndroid Build Coastguard Worker     }
219*c8dee2aaSAndroid Build Coastguard Worker     return alpha << 24 | component;
220*c8dee2aaSAndroid Build Coastguard Worker }
221*c8dee2aaSAndroid Build Coastguard Worker 
make_color_test_bitmap_variant(SkColorType colorType,SkAlphaType alphaType,sk_sp<SkColorSpace> colorSpace,SkBitmap * bm)222*c8dee2aaSAndroid Build Coastguard Worker static void make_color_test_bitmap_variant(
223*c8dee2aaSAndroid Build Coastguard Worker     SkColorType colorType,
224*c8dee2aaSAndroid Build Coastguard Worker     SkAlphaType alphaType,
225*c8dee2aaSAndroid Build Coastguard Worker     sk_sp<SkColorSpace> colorSpace,
226*c8dee2aaSAndroid Build Coastguard Worker     SkBitmap* bm)
227*c8dee2aaSAndroid Build Coastguard Worker {
228*c8dee2aaSAndroid Build Coastguard Worker     SkASSERT(colorType == kRGBA_8888_SkColorType || colorType == kBGRA_8888_SkColorType);
229*c8dee2aaSAndroid Build Coastguard Worker     SkASSERT(alphaType == kPremul_SkAlphaType || alphaType == kUnpremul_SkAlphaType);
230*c8dee2aaSAndroid Build Coastguard Worker     bm->allocPixels(
231*c8dee2aaSAndroid Build Coastguard Worker         SkImageInfo::Make(SCALE, SCALE, colorType, alphaType, colorSpace));
232*c8dee2aaSAndroid Build Coastguard Worker     const SkPixmap& pm = bm->pixmap();
233*c8dee2aaSAndroid Build Coastguard Worker     for (int y = 0; y < pm.height(); y++) {
234*c8dee2aaSAndroid Build Coastguard Worker         for (int x = 0; x < pm.width(); x++) {
235*c8dee2aaSAndroid Build Coastguard Worker             *pm.writable_addr32(x, y) = make_pixel(x, y, alphaType);
236*c8dee2aaSAndroid Build Coastguard Worker         }
237*c8dee2aaSAndroid Build Coastguard Worker     }
238*c8dee2aaSAndroid Build Coastguard Worker }
239*c8dee2aaSAndroid Build Coastguard Worker 
240*c8dee2aaSAndroid Build Coastguard Worker DEF_SIMPLE_GM(all_variants_8888, canvas, 4 * SCALE + 30, 2 * SCALE + 10) {
241*c8dee2aaSAndroid Build Coastguard Worker     ToolUtils::draw_checkerboard(canvas, SK_ColorLTGRAY, SK_ColorWHITE, 8);
242*c8dee2aaSAndroid Build Coastguard Worker 
243*c8dee2aaSAndroid Build Coastguard Worker     sk_sp<SkColorSpace> colorSpaces[] {
244*c8dee2aaSAndroid Build Coastguard Worker         SkColorSpace::MakeSRGB(),
245*c8dee2aaSAndroid Build Coastguard Worker         nullptr,
246*c8dee2aaSAndroid Build Coastguard Worker     };
247*c8dee2aaSAndroid Build Coastguard Worker     for (const sk_sp<SkColorSpace>& colorSpace : colorSpaces) {
248*c8dee2aaSAndroid Build Coastguard Worker         canvas->save();
249*c8dee2aaSAndroid Build Coastguard Worker         for (auto alphaType : {kPremul_SkAlphaType, kUnpremul_SkAlphaType}) {
250*c8dee2aaSAndroid Build Coastguard Worker             canvas->save();
251*c8dee2aaSAndroid Build Coastguard Worker             for (auto colorType : {kRGBA_8888_SkColorType, kBGRA_8888_SkColorType}) {
252*c8dee2aaSAndroid Build Coastguard Worker                 SkBitmap bm;
253*c8dee2aaSAndroid Build Coastguard Worker                 make_color_test_bitmap_variant(colorType, alphaType, colorSpace, &bm);
254*c8dee2aaSAndroid Build Coastguard Worker                 canvas->drawImage(bm.asImage(), 0.0f, 0.0f);
255*c8dee2aaSAndroid Build Coastguard Worker                 canvas->translate(SCALE + 10, 0.0f);
256*c8dee2aaSAndroid Build Coastguard Worker             }
257*c8dee2aaSAndroid Build Coastguard Worker             canvas->restore();
258*c8dee2aaSAndroid Build Coastguard Worker             canvas->translate(0.0f, SCALE + 10);
259*c8dee2aaSAndroid Build Coastguard Worker         }
260*c8dee2aaSAndroid Build Coastguard Worker         canvas->restore();
261*c8dee2aaSAndroid Build Coastguard Worker         canvas->translate(2 * (SCALE + 10), 0.0f);
262*c8dee2aaSAndroid Build Coastguard Worker     }
263*c8dee2aaSAndroid Build Coastguard Worker }
264