1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2020 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/SkColorSpace.h" 12*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkImage.h" 13*c8dee2aaSAndroid Build Coastguard Worker 14*c8dee2aaSAndroid Build Coastguard Worker // This GM should draw two yellow boxes; the bug drew one in cyan. 15*c8dee2aaSAndroid Build Coastguard Worker 16*c8dee2aaSAndroid Build Coastguard Worker DEF_SIMPLE_GM(skbug_9819, c, 256, 256) { 17*c8dee2aaSAndroid Build Coastguard Worker auto info = SkImageInfo::Make(1,1, kUnknown_SkColorType, kPremul_SkAlphaType); 18*c8dee2aaSAndroid Build Coastguard Worker SkBitmap rgba, 19*c8dee2aaSAndroid Build Coastguard Worker bgra; 20*c8dee2aaSAndroid Build Coastguard Worker rgba.allocPixels(info.makeColorType(kRGBA_8888_SkColorType)); 21*c8dee2aaSAndroid Build Coastguard Worker bgra.allocPixels(info.makeColorType(kBGRA_8888_SkColorType)); 22*c8dee2aaSAndroid Build Coastguard Worker 23*c8dee2aaSAndroid Build Coastguard Worker SkColor yellow = 0xffffff00; 24*c8dee2aaSAndroid Build Coastguard Worker rgba.eraseColor(yellow); 25*c8dee2aaSAndroid Build Coastguard Worker bgra.eraseColor(yellow); 26*c8dee2aaSAndroid Build Coastguard Worker 27*c8dee2aaSAndroid Build Coastguard Worker c->save(); 28*c8dee2aaSAndroid Build Coastguard Worker c->scale(128,128); 29*c8dee2aaSAndroid Build Coastguard Worker c->drawImage(rgba.asImage(), 0,0); 30*c8dee2aaSAndroid Build Coastguard Worker c->drawImage(bgra.asImage(), 0,1); 31*c8dee2aaSAndroid Build Coastguard Worker c->restore(); 32*c8dee2aaSAndroid Build Coastguard Worker __anon63a81f680102(int x, int y)33*c8dee2aaSAndroid Build Coastguard Worker auto grade = [&](int x, int y){ 34*c8dee2aaSAndroid Build Coastguard Worker SkBitmap bm; 35*c8dee2aaSAndroid Build Coastguard Worker bm.allocPixels(SkImageInfo::Make(1,1, 36*c8dee2aaSAndroid Build Coastguard Worker kGray_8_SkColorType, 37*c8dee2aaSAndroid Build Coastguard Worker kUnpremul_SkAlphaType, 38*c8dee2aaSAndroid Build Coastguard Worker SkColorSpace::MakeSRGB())); 39*c8dee2aaSAndroid Build Coastguard Worker if (!c->readPixels(bm, x,y)) { 40*c8dee2aaSAndroid Build Coastguard Worker // Picture-backed canvases, that sort of thing. Just assume they're good. 41*c8dee2aaSAndroid Build Coastguard Worker MarkGMGood(c, x+128, y); 42*c8dee2aaSAndroid Build Coastguard Worker return; 43*c8dee2aaSAndroid Build Coastguard Worker } 44*c8dee2aaSAndroid Build Coastguard Worker 45*c8dee2aaSAndroid Build Coastguard Worker // We test only luma so that grayscale destinations are also correctly graded: 46*c8dee2aaSAndroid Build Coastguard Worker // - yellow (good) is around 237 47*c8dee2aaSAndroid Build Coastguard Worker // - cyan (bad) is around 202 48*c8dee2aaSAndroid Build Coastguard Worker uint8_t gray = *bm.getAddr8(0,0); 49*c8dee2aaSAndroid Build Coastguard Worker (abs(gray - 237) > 2 ? MarkGMBad 50*c8dee2aaSAndroid Build Coastguard Worker : MarkGMGood)(c, x+128,y); 51*c8dee2aaSAndroid Build Coastguard Worker }; 52*c8dee2aaSAndroid Build Coastguard Worker 53*c8dee2aaSAndroid Build Coastguard Worker grade(64, 64); 54*c8dee2aaSAndroid Build Coastguard Worker grade(64, 192); 55*c8dee2aaSAndroid Build Coastguard Worker } 56