BitmapTest.cpp revision 4cba3fe576de7f48edd0271498745462564fdd6d
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" 104428734907480cdb4ccecb47152d7be8cd1aec32halcanary@google.com#include "Test.h" 114428734907480cdb4ccecb47152d7be8cd1aec32halcanary@google.com 12cb674144545866ed31a9ab5dd8e7152282017e40reedstatic void test_peekpixels(skiatest::Reporter* reporter) { 13cb674144545866ed31a9ab5dd8e7152282017e40reed const SkImageInfo info = SkImageInfo::MakeN32Premul(10, 10); 14cb674144545866ed31a9ab5dd8e7152282017e40reed 15cb674144545866ed31a9ab5dd8e7152282017e40reed SkPixmap pmap; 16cb674144545866ed31a9ab5dd8e7152282017e40reed SkBitmap bm; 17cb674144545866ed31a9ab5dd8e7152282017e40reed 18cb674144545866ed31a9ab5dd8e7152282017e40reed // empty should return false 1996fcdcc219d2a0d3579719b84b28bede76efba64halcanary REPORTER_ASSERT(reporter, !bm.peekPixels(nullptr)); 20cb674144545866ed31a9ab5dd8e7152282017e40reed REPORTER_ASSERT(reporter, !bm.peekPixels(&pmap)); 21cb674144545866ed31a9ab5dd8e7152282017e40reed 22cb674144545866ed31a9ab5dd8e7152282017e40reed // no pixels should return false 23cb674144545866ed31a9ab5dd8e7152282017e40reed bm.setInfo(SkImageInfo::MakeN32Premul(10, 10)); 2496fcdcc219d2a0d3579719b84b28bede76efba64halcanary REPORTER_ASSERT(reporter, !bm.peekPixels(nullptr)); 25cb674144545866ed31a9ab5dd8e7152282017e40reed REPORTER_ASSERT(reporter, !bm.peekPixels(&pmap)); 26cb674144545866ed31a9ab5dd8e7152282017e40reed 27cb674144545866ed31a9ab5dd8e7152282017e40reed // real pixels should return true 28cb674144545866ed31a9ab5dd8e7152282017e40reed bm.allocPixels(info); 2996fcdcc219d2a0d3579719b84b28bede76efba64halcanary REPORTER_ASSERT(reporter, bm.peekPixels(nullptr)); 30cb674144545866ed31a9ab5dd8e7152282017e40reed REPORTER_ASSERT(reporter, bm.peekPixels(&pmap)); 31cb674144545866ed31a9ab5dd8e7152282017e40reed REPORTER_ASSERT(reporter, pmap.info() == bm.info()); 32cb674144545866ed31a9ab5dd8e7152282017e40reed REPORTER_ASSERT(reporter, pmap.addr() == bm.getPixels()); 33cb674144545866ed31a9ab5dd8e7152282017e40reed REPORTER_ASSERT(reporter, pmap.rowBytes() == bm.rowBytes()); 34cb674144545866ed31a9ab5dd8e7152282017e40reed REPORTER_ASSERT(reporter, pmap.ctable() == bm.getColorTable()); 35cb674144545866ed31a9ab5dd8e7152282017e40reed} 36cb674144545866ed31a9ab5dd8e7152282017e40reed 372ff257bd95c732b9cebc3aac03fbed72d6e6082areed// https://code.google.com/p/chromium/issues/detail?id=446164 382ff257bd95c732b9cebc3aac03fbed72d6e6082areedstatic void test_bigalloc(skiatest::Reporter* reporter) { 392ff257bd95c732b9cebc3aac03fbed72d6e6082areed const int width = 0x40000001; 402ff257bd95c732b9cebc3aac03fbed72d6e6082areed const int height = 0x00000096; 412ff257bd95c732b9cebc3aac03fbed72d6e6082areed const SkImageInfo info = SkImageInfo::MakeN32Premul(width, height); 422ff257bd95c732b9cebc3aac03fbed72d6e6082areed 432ff257bd95c732b9cebc3aac03fbed72d6e6082areed SkBitmap bm; 442ff257bd95c732b9cebc3aac03fbed72d6e6082areed REPORTER_ASSERT(reporter, !bm.tryAllocPixels(info)); 452ff257bd95c732b9cebc3aac03fbed72d6e6082areed 4696fcdcc219d2a0d3579719b84b28bede76efba64halcanary SkPixelRef* pr = SkMallocPixelRef::NewAllocate(info, info.minRowBytes(), nullptr); 472ff257bd95c732b9cebc3aac03fbed72d6e6082areed REPORTER_ASSERT(reporter, !pr); 482ff257bd95c732b9cebc3aac03fbed72d6e6082areed} 492ff257bd95c732b9cebc3aac03fbed72d6e6082areed 50f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reedstatic void test_allocpixels(skiatest::Reporter* reporter) { 51f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed const int width = 10; 52f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed const int height = 10; 53f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed const SkImageInfo info = SkImageInfo::MakeN32Premul(width, height); 54f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed const size_t explicitRowBytes = info.minRowBytes() + 24; 55f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed 56f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed SkBitmap bm; 57f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed bm.setInfo(info); 58f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed REPORTER_ASSERT(reporter, info.minRowBytes() == bm.rowBytes()); 59f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed bm.allocPixels(); 60f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed REPORTER_ASSERT(reporter, info.minRowBytes() == bm.rowBytes()); 61f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed bm.reset(); 62f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed bm.allocPixels(info); 63f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed REPORTER_ASSERT(reporter, info.minRowBytes() == bm.rowBytes()); 64f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed 65f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed bm.setInfo(info, explicitRowBytes); 66f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed REPORTER_ASSERT(reporter, explicitRowBytes == bm.rowBytes()); 67f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed bm.allocPixels(); 68f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed REPORTER_ASSERT(reporter, explicitRowBytes == bm.rowBytes()); 69f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed bm.reset(); 70f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed bm.allocPixels(info, explicitRowBytes); 71f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed REPORTER_ASSERT(reporter, explicitRowBytes == bm.rowBytes()); 72f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed 73f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed bm.reset(); 74f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed bm.setInfo(info, 0); 75f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed REPORTER_ASSERT(reporter, info.minRowBytes() == bm.rowBytes()); 76f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed bm.reset(); 77f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed bm.allocPixels(info, 0); 78f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed REPORTER_ASSERT(reporter, info.minRowBytes() == bm.rowBytes()); 79f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed 80f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed bm.reset(); 81f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed bool success = bm.setInfo(info, info.minRowBytes() - 1); // invalid for 32bit 82f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed REPORTER_ASSERT(reporter, !success); 83f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed REPORTER_ASSERT(reporter, bm.isNull()); 84f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed} 85f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed 864856964eae9cdb779baa08ef9e5646ccb9a3140dreed@google.comstatic void test_bigwidth(skiatest::Reporter* reporter) { 874856964eae9cdb779baa08ef9e5646ccb9a3140dreed@google.com SkBitmap bm; 884856964eae9cdb779baa08ef9e5646ccb9a3140dreed@google.com int width = 1 << 29; // *4 will be the high-bit of 32bit int 894856964eae9cdb779baa08ef9e5646ccb9a3140dreed@google.com 90a3264e53ee3f3c5d6a2c813df7e44b5b96d207f2commit-bot@chromium.org SkImageInfo info = SkImageInfo::MakeA8(width, 1); 91a3264e53ee3f3c5d6a2c813df7e44b5b96d207f2commit-bot@chromium.org REPORTER_ASSERT(reporter, bm.setInfo(info)); 92e5ea500d4714a7d84de2bf913e81be3b65d2de68reed REPORTER_ASSERT(reporter, bm.setInfo(info.makeColorType(kRGB_565_SkColorType))); 93f5e1f63461d0a4dcb4bd5d0388ec6d392b97e5f0skia.committer@gmail.com 944856964eae9cdb779baa08ef9e5646ccb9a3140dreed@google.com // for a 4-byte config, this width will compute a rowbytes of 0x80000000, 954856964eae9cdb779baa08ef9e5646ccb9a3140dreed@google.com // which does not fit in a int32_t. setConfig should detect this, and fail. 964856964eae9cdb779baa08ef9e5646ccb9a3140dreed@google.com 974856964eae9cdb779baa08ef9e5646ccb9a3140dreed@google.com // TODO: perhaps skia can relax this, and only require that rowBytes fit 984856964eae9cdb779baa08ef9e5646ccb9a3140dreed@google.com // in a uint32_t (or larger), but for now this is the constraint. 994856964eae9cdb779baa08ef9e5646ccb9a3140dreed@google.com 100e5ea500d4714a7d84de2bf913e81be3b65d2de68reed REPORTER_ASSERT(reporter, !bm.setInfo(info.makeColorType(kN32_SkColorType))); 1014856964eae9cdb779baa08ef9e5646ccb9a3140dreed@google.com} 1024856964eae9cdb779baa08ef9e5646ccb9a3140dreed@google.com 1034428734907480cdb4ccecb47152d7be8cd1aec32halcanary@google.com/** 1044428734907480cdb4ccecb47152d7be8cd1aec32halcanary@google.com * This test contains basic sanity checks concerning bitmaps. 1054428734907480cdb4ccecb47152d7be8cd1aec32halcanary@google.com */ 1064428734907480cdb4ccecb47152d7be8cd1aec32halcanary@google.comDEF_TEST(Bitmap, reporter) { 1074428734907480cdb4ccecb47152d7be8cd1aec32halcanary@google.com // Zero-sized bitmaps are allowed 1084428734907480cdb4ccecb47152d7be8cd1aec32halcanary@google.com for (int width = 0; width < 2; ++width) { 1094428734907480cdb4ccecb47152d7be8cd1aec32halcanary@google.com for (int height = 0; height < 2; ++height) { 1104428734907480cdb4ccecb47152d7be8cd1aec32halcanary@google.com SkBitmap bm; 111a3264e53ee3f3c5d6a2c813df7e44b5b96d207f2commit-bot@chromium.org bool setConf = bm.setInfo(SkImageInfo::MakeN32Premul(width, height)); 1124428734907480cdb4ccecb47152d7be8cd1aec32halcanary@google.com REPORTER_ASSERT(reporter, setConf); 1134428734907480cdb4ccecb47152d7be8cd1aec32halcanary@google.com if (setConf) { 114848250415eddc54075f7eb8795e8db79e749c6abreed bm.allocPixels(); 1154428734907480cdb4ccecb47152d7be8cd1aec32halcanary@google.com } 1162af6c1204de73a2513189007b9623fec0e296dc2halcanary@google.com REPORTER_ASSERT(reporter, SkToBool(width & height) != bm.empty()); 1174428734907480cdb4ccecb47152d7be8cd1aec32halcanary@google.com } 1184428734907480cdb4ccecb47152d7be8cd1aec32halcanary@google.com } 119f5e1f63461d0a4dcb4bd5d0388ec6d392b97e5f0skia.committer@gmail.com 1204856964eae9cdb779baa08ef9e5646ccb9a3140dreed@google.com test_bigwidth(reporter); 121f0aed97aec3fa1c7f6460d8d6327358f3dcbabe6reed test_allocpixels(reporter); 1222ff257bd95c732b9cebc3aac03fbed72d6e6082areed test_bigalloc(reporter); 123cb674144545866ed31a9ab5dd8e7152282017e40reed test_peekpixels(reporter); 1244428734907480cdb4ccecb47152d7be8cd1aec32halcanary@google.com} 125b260d130ca8bead7713b290ff0b56b427761922dhalcanary 126b260d130ca8bead7713b290ff0b56b427761922dhalcanary/** 127b260d130ca8bead7713b290ff0b56b427761922dhalcanary * This test checks that getColor works for both swizzles. 128b260d130ca8bead7713b290ff0b56b427761922dhalcanary */ 129b260d130ca8bead7713b290ff0b56b427761922dhalcanaryDEF_TEST(Bitmap_getColor_Swizzle, r) { 130b260d130ca8bead7713b290ff0b56b427761922dhalcanary SkBitmap source; 131b260d130ca8bead7713b290ff0b56b427761922dhalcanary source.allocN32Pixels(1,1); 132b260d130ca8bead7713b290ff0b56b427761922dhalcanary source.eraseColor(SK_ColorRED); 133b260d130ca8bead7713b290ff0b56b427761922dhalcanary SkColorType colorTypes[] = { 134b260d130ca8bead7713b290ff0b56b427761922dhalcanary kRGBA_8888_SkColorType, 135b260d130ca8bead7713b290ff0b56b427761922dhalcanary kBGRA_8888_SkColorType, 136b260d130ca8bead7713b290ff0b56b427761922dhalcanary }; 137b260d130ca8bead7713b290ff0b56b427761922dhalcanary for (SkColorType ct : colorTypes) { 138b260d130ca8bead7713b290ff0b56b427761922dhalcanary SkBitmap copy; 139b260d130ca8bead7713b290ff0b56b427761922dhalcanary if (!source.copyTo(©, ct)) { 140b260d130ca8bead7713b290ff0b56b427761922dhalcanary ERRORF(r, "SkBitmap::copy failed %d", (int)ct); 141b260d130ca8bead7713b290ff0b56b427761922dhalcanary continue; 142b260d130ca8bead7713b290ff0b56b427761922dhalcanary } 143b260d130ca8bead7713b290ff0b56b427761922dhalcanary SkAutoLockPixels autoLockPixels1(copy); 144b260d130ca8bead7713b290ff0b56b427761922dhalcanary SkAutoLockPixels autoLockPixels2(source); 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