BitmapTest.cpp revision 68b8e3d50d0954eb5eeb7f625f06026c7fbd38c1
14428734907480cdb4ccecb47152d7be8cd1aec32halcanary@google.com/* 24428734907480cdb4ccecb47152d7be8cd1aec32halcanary@google.com * Copyright 2013 Google Inc. 34428734907480cdb4ccecb47152d7be8cd1aec32halcanary@google.com * 44428734907480cdb4ccecb47152d7be8cd1aec32halcanary@google.com * Use of this source code is governed by a BSD-style license that can be 54428734907480cdb4ccecb47152d7be8cd1aec32halcanary@google.com * found in the LICENSE file. 64428734907480cdb4ccecb47152d7be8cd1aec32halcanary@google.com */ 74428734907480cdb4ccecb47152d7be8cd1aec32halcanary@google.com 84428734907480cdb4ccecb47152d7be8cd1aec32halcanary@google.com#include "SkBitmap.h" 92ff257bd95c732b9cebc3aac03fbed72d6e6082areed#include "SkMallocPixelRef.h" 1002e65df343d7b6d2116d6ed2a17cea3f222978e0Hal Canary#include "SkRandom.h" 114428734907480cdb4ccecb47152d7be8cd1aec32halcanary@google.com#include "Test.h" 1268b8e3d50d0954eb5eeb7f625f06026c7fbd38c1Matt Sarett#include "sk_tool_utils.h" 134428734907480cdb4ccecb47152d7be8cd1aec32halcanary@google.com 14cb674144545866ed31a9ab5dd8e7152282017e40reedstatic void test_peekpixels(skiatest::Reporter* reporter) { 15cb674144545866ed31a9ab5dd8e7152282017e40reed const SkImageInfo info = SkImageInfo::MakeN32Premul(10, 10); 16cb674144545866ed31a9ab5dd8e7152282017e40reed 17cb674144545866ed31a9ab5dd8e7152282017e40reed SkPixmap pmap; 18cb674144545866ed31a9ab5dd8e7152282017e40reed SkBitmap bm; 19cb674144545866ed31a9ab5dd8e7152282017e40reed 20cb674144545866ed31a9ab5dd8e7152282017e40reed // empty should return false 2196fcdcc219d2a0d3579719b84b28bede76efba64halcanary REPORTER_ASSERT(reporter, !bm.peekPixels(nullptr)); 22cb674144545866ed31a9ab5dd8e7152282017e40reed REPORTER_ASSERT(reporter, !bm.peekPixels(&pmap)); 23cb674144545866ed31a9ab5dd8e7152282017e40reed 24cb674144545866ed31a9ab5dd8e7152282017e40reed // no pixels should return false 25cb674144545866ed31a9ab5dd8e7152282017e40reed bm.setInfo(SkImageInfo::MakeN32Premul(10, 10)); 2696fcdcc219d2a0d3579719b84b28bede76efba64halcanary REPORTER_ASSERT(reporter, !bm.peekPixels(nullptr)); 27cb674144545866ed31a9ab5dd8e7152282017e40reed REPORTER_ASSERT(reporter, !bm.peekPixels(&pmap)); 28cb674144545866ed31a9ab5dd8e7152282017e40reed 29cb674144545866ed31a9ab5dd8e7152282017e40reed // real pixels should return true 30cb674144545866ed31a9ab5dd8e7152282017e40reed bm.allocPixels(info); 3196fcdcc219d2a0d3579719b84b28bede76efba64halcanary REPORTER_ASSERT(reporter, bm.peekPixels(nullptr)); 32cb674144545866ed31a9ab5dd8e7152282017e40reed REPORTER_ASSERT(reporter, bm.peekPixels(&pmap)); 33cb674144545866ed31a9ab5dd8e7152282017e40reed REPORTER_ASSERT(reporter, pmap.info() == bm.info()); 34cb674144545866ed31a9ab5dd8e7152282017e40reed REPORTER_ASSERT(reporter, pmap.addr() == bm.getPixels()); 35cb674144545866ed31a9ab5dd8e7152282017e40reed REPORTER_ASSERT(reporter, pmap.rowBytes() == bm.rowBytes()); 36cb674144545866ed31a9ab5dd8e7152282017e40reed REPORTER_ASSERT(reporter, pmap.ctable() == bm.getColorTable()); 37cb674144545866ed31a9ab5dd8e7152282017e40reed} 38cb674144545866ed31a9ab5dd8e7152282017e40reed 392ff257bd95c732b9cebc3aac03fbed72d6e6082areed// https://code.google.com/p/chromium/issues/detail?id=446164 402ff257bd95c732b9cebc3aac03fbed72d6e6082areedstatic void test_bigalloc(skiatest::Reporter* reporter) { 412ff257bd95c732b9cebc3aac03fbed72d6e6082areed const int width = 0x40000001; 422ff257bd95c732b9cebc3aac03fbed72d6e6082areed const int height = 0x00000096; 432ff257bd95c732b9cebc3aac03fbed72d6e6082areed const SkImageInfo info = SkImageInfo::MakeN32Premul(width, height); 442ff257bd95c732b9cebc3aac03fbed72d6e6082areed 452ff257bd95c732b9cebc3aac03fbed72d6e6082areed SkBitmap bm; 462ff257bd95c732b9cebc3aac03fbed72d6e6082areed REPORTER_ASSERT(reporter, !bm.tryAllocPixels(info)); 472ff257bd95c732b9cebc3aac03fbed72d6e6082areed 486b3155c4be0476bc53541b0431c368a44e69f0a7Mike Reed sk_sp<SkPixelRef> pr = SkMallocPixelRef::MakeAllocate(info, info.minRowBytes(), nullptr); 492ff257bd95c732b9cebc3aac03fbed72d6e6082areed REPORTER_ASSERT(reporter, !pr); 502ff257bd95c732b9cebc3aac03fbed72d6e6082areed} 512ff257bd95c732b9cebc3aac03fbed72d6e6082areed 52f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reedstatic void test_allocpixels(skiatest::Reporter* reporter) { 53f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed const int width = 10; 54f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed const int height = 10; 55f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed const SkImageInfo info = SkImageInfo::MakeN32Premul(width, height); 56f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed const size_t explicitRowBytes = info.minRowBytes() + 24; 57f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed 58f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed SkBitmap bm; 59f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed bm.setInfo(info); 60f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed REPORTER_ASSERT(reporter, info.minRowBytes() == bm.rowBytes()); 61f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed bm.allocPixels(); 62f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed REPORTER_ASSERT(reporter, info.minRowBytes() == bm.rowBytes()); 63f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed bm.reset(); 64f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed bm.allocPixels(info); 65f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed REPORTER_ASSERT(reporter, info.minRowBytes() == bm.rowBytes()); 66f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed 67f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed bm.setInfo(info, explicitRowBytes); 68f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed REPORTER_ASSERT(reporter, explicitRowBytes == bm.rowBytes()); 69f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed bm.allocPixels(); 70f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed REPORTER_ASSERT(reporter, explicitRowBytes == bm.rowBytes()); 71f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed bm.reset(); 72f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed bm.allocPixels(info, explicitRowBytes); 73f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed REPORTER_ASSERT(reporter, explicitRowBytes == bm.rowBytes()); 74f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed 75f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed bm.reset(); 76f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed bm.setInfo(info, 0); 77f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed REPORTER_ASSERT(reporter, info.minRowBytes() == bm.rowBytes()); 78f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed bm.reset(); 79f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed bm.allocPixels(info, 0); 80f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed REPORTER_ASSERT(reporter, info.minRowBytes() == bm.rowBytes()); 81f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed 82f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed bm.reset(); 83f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed bool success = bm.setInfo(info, info.minRowBytes() - 1); // invalid for 32bit 84f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed REPORTER_ASSERT(reporter, !success); 85f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed REPORTER_ASSERT(reporter, bm.isNull()); 86f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed} 87f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed 884856964eae9cdb779baa08ef9e5646ccb9a3140dreed@google.comstatic void test_bigwidth(skiatest::Reporter* reporter) { 894856964eae9cdb779baa08ef9e5646ccb9a3140dreed@google.com SkBitmap bm; 904856964eae9cdb779baa08ef9e5646ccb9a3140dreed@google.com int width = 1 << 29; // *4 will be the high-bit of 32bit int 914856964eae9cdb779baa08ef9e5646ccb9a3140dreed@google.com 92a3264e53ee3f3c5d6a2c813df7e44b5b96d207f2commit-bot@chromium.org SkImageInfo info = SkImageInfo::MakeA8(width, 1); 93a3264e53ee3f3c5d6a2c813df7e44b5b96d207f2commit-bot@chromium.org REPORTER_ASSERT(reporter, bm.setInfo(info)); 94e5ea500d4714a7d84de2bf913e81be3b65d2de68reed REPORTER_ASSERT(reporter, bm.setInfo(info.makeColorType(kRGB_565_SkColorType))); 95f5e1f63461d0a4dcb4bd5d0388ec6d392b97e5f0skia.committer@gmail.com 964856964eae9cdb779baa08ef9e5646ccb9a3140dreed@google.com // for a 4-byte config, this width will compute a rowbytes of 0x80000000, 974856964eae9cdb779baa08ef9e5646ccb9a3140dreed@google.com // which does not fit in a int32_t. setConfig should detect this, and fail. 984856964eae9cdb779baa08ef9e5646ccb9a3140dreed@google.com 994856964eae9cdb779baa08ef9e5646ccb9a3140dreed@google.com // TODO: perhaps skia can relax this, and only require that rowBytes fit 1004856964eae9cdb779baa08ef9e5646ccb9a3140dreed@google.com // in a uint32_t (or larger), but for now this is the constraint. 1014856964eae9cdb779baa08ef9e5646ccb9a3140dreed@google.com 102e5ea500d4714a7d84de2bf913e81be3b65d2de68reed REPORTER_ASSERT(reporter, !bm.setInfo(info.makeColorType(kN32_SkColorType))); 1034856964eae9cdb779baa08ef9e5646ccb9a3140dreed@google.com} 1044856964eae9cdb779baa08ef9e5646ccb9a3140dreed@google.com 1054428734907480cdb4ccecb47152d7be8cd1aec32halcanary@google.com/** 1064428734907480cdb4ccecb47152d7be8cd1aec32halcanary@google.com * This test contains basic sanity checks concerning bitmaps. 1074428734907480cdb4ccecb47152d7be8cd1aec32halcanary@google.com */ 1084428734907480cdb4ccecb47152d7be8cd1aec32halcanary@google.comDEF_TEST(Bitmap, reporter) { 1094428734907480cdb4ccecb47152d7be8cd1aec32halcanary@google.com // Zero-sized bitmaps are allowed 1104428734907480cdb4ccecb47152d7be8cd1aec32halcanary@google.com for (int width = 0; width < 2; ++width) { 1114428734907480cdb4ccecb47152d7be8cd1aec32halcanary@google.com for (int height = 0; height < 2; ++height) { 1124428734907480cdb4ccecb47152d7be8cd1aec32halcanary@google.com SkBitmap bm; 113a3264e53ee3f3c5d6a2c813df7e44b5b96d207f2commit-bot@chromium.org bool setConf = bm.setInfo(SkImageInfo::MakeN32Premul(width, height)); 1144428734907480cdb4ccecb47152d7be8cd1aec32halcanary@google.com REPORTER_ASSERT(reporter, setConf); 1154428734907480cdb4ccecb47152d7be8cd1aec32halcanary@google.com if (setConf) { 116848250415eddc54075f7eb8795e8db79e749c6abreed bm.allocPixels(); 1174428734907480cdb4ccecb47152d7be8cd1aec32halcanary@google.com } 1182af6c1204de73a2513189007b9623fec0e296dc2halcanary@google.com REPORTER_ASSERT(reporter, SkToBool(width & height) != bm.empty()); 1194428734907480cdb4ccecb47152d7be8cd1aec32halcanary@google.com } 1204428734907480cdb4ccecb47152d7be8cd1aec32halcanary@google.com } 121f5e1f63461d0a4dcb4bd5d0388ec6d392b97e5f0skia.committer@gmail.com 1224856964eae9cdb779baa08ef9e5646ccb9a3140dreed@google.com test_bigwidth(reporter); 123f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed test_allocpixels(reporter); 1242ff257bd95c732b9cebc3aac03fbed72d6e6082areed test_bigalloc(reporter); 125cb674144545866ed31a9ab5dd8e7152282017e40reed test_peekpixels(reporter); 1264428734907480cdb4ccecb47152d7be8cd1aec32halcanary@google.com} 127b260d130ca8bead7713b290ff0b56b427761922dhalcanary 128b260d130ca8bead7713b290ff0b56b427761922dhalcanary/** 129b260d130ca8bead7713b290ff0b56b427761922dhalcanary * This test checks that getColor works for both swizzles. 130b260d130ca8bead7713b290ff0b56b427761922dhalcanary */ 131b260d130ca8bead7713b290ff0b56b427761922dhalcanaryDEF_TEST(Bitmap_getColor_Swizzle, r) { 132b260d130ca8bead7713b290ff0b56b427761922dhalcanary SkBitmap source; 133b260d130ca8bead7713b290ff0b56b427761922dhalcanary source.allocN32Pixels(1,1); 134b260d130ca8bead7713b290ff0b56b427761922dhalcanary source.eraseColor(SK_ColorRED); 135b260d130ca8bead7713b290ff0b56b427761922dhalcanary SkColorType colorTypes[] = { 136b260d130ca8bead7713b290ff0b56b427761922dhalcanary kRGBA_8888_SkColorType, 137b260d130ca8bead7713b290ff0b56b427761922dhalcanary kBGRA_8888_SkColorType, 138b260d130ca8bead7713b290ff0b56b427761922dhalcanary }; 139b260d130ca8bead7713b290ff0b56b427761922dhalcanary for (SkColorType ct : colorTypes) { 140b260d130ca8bead7713b290ff0b56b427761922dhalcanary SkBitmap copy; 14168b8e3d50d0954eb5eeb7f625f06026c7fbd38c1Matt Sarett if (!sk_tool_utils::copy_to(©, ct, source)) { 142b260d130ca8bead7713b290ff0b56b427761922dhalcanary ERRORF(r, "SkBitmap::copy failed %d", (int)ct); 143b260d130ca8bead7713b290ff0b56b427761922dhalcanary continue; 144b260d130ca8bead7713b290ff0b56b427761922dhalcanary } 145b260d130ca8bead7713b290ff0b56b427761922dhalcanary REPORTER_ASSERT(r, source.getColor(0, 0) == copy.getColor(0, 0)); 146b260d130ca8bead7713b290ff0b56b427761922dhalcanary } 147b260d130ca8bead7713b290ff0b56b427761922dhalcanary} 148a1bb8e02fe7956b2f85a0afadbca5f607a804403benjaminwagner 149a1bb8e02fe7956b2f85a0afadbca5f607a804403benjaminwagnerstatic void test_erasecolor_premul(skiatest::Reporter* reporter, SkColorType ct, SkColor input, 150a1bb8e02fe7956b2f85a0afadbca5f607a804403benjaminwagner SkColor expected) { 151a1bb8e02fe7956b2f85a0afadbca5f607a804403benjaminwagner SkBitmap bm; 152a1bb8e02fe7956b2f85a0afadbca5f607a804403benjaminwagner bm.allocPixels(SkImageInfo::Make(1, 1, ct, kPremul_SkAlphaType)); 153a1bb8e02fe7956b2f85a0afadbca5f607a804403benjaminwagner bm.eraseColor(input); 1547d57124a2a9ed7b271568fb75b3cfd949fdb313ahalcanary INFOF(reporter, "expected: %x actual: %x\n", expected, bm.getColor(0, 0)); 155a1bb8e02fe7956b2f85a0afadbca5f607a804403benjaminwagner REPORTER_ASSERT(reporter, bm.getColor(0, 0) == expected); 156a1bb8e02fe7956b2f85a0afadbca5f607a804403benjaminwagner} 157a1bb8e02fe7956b2f85a0afadbca5f607a804403benjaminwagner 158a1bb8e02fe7956b2f85a0afadbca5f607a804403benjaminwagner/** 159a1bb8e02fe7956b2f85a0afadbca5f607a804403benjaminwagner * This test checks that eraseColor premultiplies the color correctly. 160a1bb8e02fe7956b2f85a0afadbca5f607a804403benjaminwagner */ 161a1bb8e02fe7956b2f85a0afadbca5f607a804403benjaminwagnerDEF_TEST(Bitmap_eraseColor_Premul, r) { 162a1bb8e02fe7956b2f85a0afadbca5f607a804403benjaminwagner SkColor color = 0x80FF0080; 163a1bb8e02fe7956b2f85a0afadbca5f607a804403benjaminwagner test_erasecolor_premul(r, kAlpha_8_SkColorType, color, 0x80000000); 164a1bb8e02fe7956b2f85a0afadbca5f607a804403benjaminwagner test_erasecolor_premul(r, kRGB_565_SkColorType, color, 0xFF840042); 165a1bb8e02fe7956b2f85a0afadbca5f607a804403benjaminwagner test_erasecolor_premul(r, kARGB_4444_SkColorType, color, 0x88FF0080); 166a1bb8e02fe7956b2f85a0afadbca5f607a804403benjaminwagner test_erasecolor_premul(r, kRGBA_8888_SkColorType, color, color); 167a1bb8e02fe7956b2f85a0afadbca5f607a804403benjaminwagner test_erasecolor_premul(r, kBGRA_8888_SkColorType, color, color); 168a1bb8e02fe7956b2f85a0afadbca5f607a804403benjaminwagner} 1694cba3fe576de7f48edd0271498745462564fdd6dHal Canary 1704cba3fe576de7f48edd0271498745462564fdd6dHal Canary// Test that SkBitmap::ComputeOpaque() is correct for various colortypes. 1714cba3fe576de7f48edd0271498745462564fdd6dHal CanaryDEF_TEST(Bitmap_compute_is_opaque, r) { 1724cba3fe576de7f48edd0271498745462564fdd6dHal Canary struct { 1734cba3fe576de7f48edd0271498745462564fdd6dHal Canary SkColorType fCT; 1744cba3fe576de7f48edd0271498745462564fdd6dHal Canary SkAlphaType fAT; 1754cba3fe576de7f48edd0271498745462564fdd6dHal Canary } types[] = { 1764cba3fe576de7f48edd0271498745462564fdd6dHal Canary { kGray_8_SkColorType, kOpaque_SkAlphaType }, 1774cba3fe576de7f48edd0271498745462564fdd6dHal Canary { kAlpha_8_SkColorType, kPremul_SkAlphaType }, 1784cba3fe576de7f48edd0271498745462564fdd6dHal Canary { kARGB_4444_SkColorType, kPremul_SkAlphaType }, 1794cba3fe576de7f48edd0271498745462564fdd6dHal Canary { kRGB_565_SkColorType, kOpaque_SkAlphaType }, 1804cba3fe576de7f48edd0271498745462564fdd6dHal Canary { kBGRA_8888_SkColorType, kPremul_SkAlphaType }, 1814cba3fe576de7f48edd0271498745462564fdd6dHal Canary { kRGBA_8888_SkColorType, kPremul_SkAlphaType }, 1824cba3fe576de7f48edd0271498745462564fdd6dHal Canary { kRGBA_F16_SkColorType, kPremul_SkAlphaType }, 1834cba3fe576de7f48edd0271498745462564fdd6dHal Canary }; 1844cba3fe576de7f48edd0271498745462564fdd6dHal Canary for (auto type : types) { 1854cba3fe576de7f48edd0271498745462564fdd6dHal Canary SkBitmap bm; 1864cba3fe576de7f48edd0271498745462564fdd6dHal Canary REPORTER_ASSERT(r, !SkBitmap::ComputeIsOpaque(bm)); 1874cba3fe576de7f48edd0271498745462564fdd6dHal Canary 1884cba3fe576de7f48edd0271498745462564fdd6dHal Canary bm.allocPixels(SkImageInfo::Make(13, 17, type.fCT, type.fAT)); 1894cba3fe576de7f48edd0271498745462564fdd6dHal Canary bm.eraseColor(SkColorSetARGB(255, 10, 20, 30)); 1904cba3fe576de7f48edd0271498745462564fdd6dHal Canary REPORTER_ASSERT(r, SkBitmap::ComputeIsOpaque(bm)); 1914cba3fe576de7f48edd0271498745462564fdd6dHal Canary 1924cba3fe576de7f48edd0271498745462564fdd6dHal Canary bm.eraseColor(SkColorSetARGB(128, 255, 255, 255)); 1934cba3fe576de7f48edd0271498745462564fdd6dHal Canary bool isOpaque = SkBitmap::ComputeIsOpaque(bm); 1944cba3fe576de7f48edd0271498745462564fdd6dHal Canary bool shouldBeOpaque = (type.fAT == kOpaque_SkAlphaType); 1954cba3fe576de7f48edd0271498745462564fdd6dHal Canary REPORTER_ASSERT(r, isOpaque == shouldBeOpaque); 1964cba3fe576de7f48edd0271498745462564fdd6dHal Canary } 1974cba3fe576de7f48edd0271498745462564fdd6dHal Canary} 1984cba3fe576de7f48edd0271498745462564fdd6dHal Canary 1994cba3fe576de7f48edd0271498745462564fdd6dHal Canary// Test that erase+getColor round trips with RGBA_F16 pixels. 2004cba3fe576de7f48edd0271498745462564fdd6dHal CanaryDEF_TEST(Bitmap_erase_f16_erase_getColor, r) { 2014cba3fe576de7f48edd0271498745462564fdd6dHal Canary SkRandom random; 2024cba3fe576de7f48edd0271498745462564fdd6dHal Canary SkPixmap pm; 2034cba3fe576de7f48edd0271498745462564fdd6dHal Canary SkBitmap bm; 2044cba3fe576de7f48edd0271498745462564fdd6dHal Canary bm.allocPixels(SkImageInfo::Make(1, 1, kRGBA_F16_SkColorType, kPremul_SkAlphaType)); 2054cba3fe576de7f48edd0271498745462564fdd6dHal Canary REPORTER_ASSERT(r, bm.peekPixels(&pm)); 2064cba3fe576de7f48edd0271498745462564fdd6dHal Canary for (unsigned i = 0; i < 0x100; ++i) { 2074cba3fe576de7f48edd0271498745462564fdd6dHal Canary // Test all possible values of blue component. 2084cba3fe576de7f48edd0271498745462564fdd6dHal Canary SkColor color1 = (SkColor)((random.nextU() & 0xFFFFFF00) | i); 2094cba3fe576de7f48edd0271498745462564fdd6dHal Canary // Test all possible values of alpha component. 2104cba3fe576de7f48edd0271498745462564fdd6dHal Canary SkColor color2 = (SkColor)((random.nextU() & 0x00FFFFFF) | (i << 24)); 2114cba3fe576de7f48edd0271498745462564fdd6dHal Canary for (SkColor color : {color1, color2}) { 2124cba3fe576de7f48edd0271498745462564fdd6dHal Canary pm.erase(color); 2134cba3fe576de7f48edd0271498745462564fdd6dHal Canary if (SkColorGetA(color) != 0) { 2144cba3fe576de7f48edd0271498745462564fdd6dHal Canary REPORTER_ASSERT(r, color == pm.getColor(0, 0)); 2154cba3fe576de7f48edd0271498745462564fdd6dHal Canary } else { 2164cba3fe576de7f48edd0271498745462564fdd6dHal Canary REPORTER_ASSERT(r, 0 == SkColorGetA(pm.getColor(0, 0))); 2174cba3fe576de7f48edd0271498745462564fdd6dHal Canary } 2184cba3fe576de7f48edd0271498745462564fdd6dHal Canary } 2194cba3fe576de7f48edd0271498745462564fdd6dHal Canary } 2204cba3fe576de7f48edd0271498745462564fdd6dHal Canary} 2214cba3fe576de7f48edd0271498745462564fdd6dHal Canary 222