GrTestUtils.h revision 3f655f34a234aceaa0c2947ce999a2127c729dea
1/* 2 * Copyright 2015 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#ifndef GrTestUtils_DEFINED 9#define GrTestUtils_DEFINED 10 11#include "SkTypes.h" 12 13#ifdef GR_TEST_UTILS 14 15#include "GrColor.h" 16#include "SkRandom.h" 17 18class SkMatrix; 19struct SkRect; 20 21namespace GrTest { 22/** 23 * A helper for use in Test functions. 24 */ 25const SkMatrix& TestMatrix(SkRandom*); 26const SkRect& TestRect(SkRandom*); 27 28} 29 30static inline GrColor GrRandomColor(SkRandom* random) { 31 // There are only a few cases of random colors which interest us 32 enum ColorMode { 33 kAllOnes_ColorMode, 34 kAllZeros_ColorMode, 35 kAlphaOne_ColorMode, 36 kRandom_ColorMode, 37 kLast_ColorMode = kRandom_ColorMode 38 }; 39 40 ColorMode colorMode = ColorMode(random->nextULessThan(kLast_ColorMode + 1)); 41 GrColor color; 42 switch (colorMode) { 43 case kAllOnes_ColorMode: 44 color = GrColorPackRGBA(0xFF, 0xFF, 0xFF, 0xFF); 45 break; 46 case kAllZeros_ColorMode: 47 color = GrColorPackRGBA(0, 0, 0, 0); 48 break; 49 case kAlphaOne_ColorMode: 50 color = GrColorPackRGBA(random->nextULessThan(256), 51 random->nextULessThan(256), 52 random->nextULessThan(256), 53 0xFF); 54 break; 55 case kRandom_ColorMode: { 56 uint8_t alpha = random->nextULessThan(256); 57 color = GrColorPackRGBA(random->nextRangeU(0, alpha), 58 random->nextRangeU(0, alpha), 59 random->nextRangeU(0, alpha), 60 alpha); 61 break; 62 } 63 } 64 GrColorIsPMAssert(color); 65 return color; 66} 67 68static inline uint8_t GrRandomCoverage(SkRandom* random) { 69 enum CoverageMode { 70 kZero_CoverageMode, 71 kAllOnes_CoverageMode, 72 kRandom_CoverageMode, 73 kLast_CoverageMode = kRandom_CoverageMode 74 }; 75 76 CoverageMode colorMode = CoverageMode(random->nextULessThan(kLast_CoverageMode + 1)); 77 uint8_t coverage; 78 switch (colorMode) { 79 case kZero_CoverageMode: 80 coverage = 0; 81 case kAllOnes_CoverageMode: 82 coverage = 0xff; 83 break; 84 case kRandom_CoverageMode: 85 coverage = random->nextULessThan(256); 86 break; 87 } 88 return coverage; 89} 90 91#endif 92#endif 93