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 #ifndef GrTestUtils_DEFINED 9*c8dee2aaSAndroid Build Coastguard Worker #define GrTestUtils_DEFINED 10*c8dee2aaSAndroid Build Coastguard Worker 11*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkTypes.h" 12*c8dee2aaSAndroid Build Coastguard Worker 13*c8dee2aaSAndroid Build Coastguard Worker #if defined(GPU_TEST_UTILS) 14*c8dee2aaSAndroid Build Coastguard Worker 15*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkPathEffect.h" 16*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkRefCnt.h" 17*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkScalar.h" 18*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkStrokeRec.h" 19*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkSurfaceProps.h" 20*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkTypes.h" 21*c8dee2aaSAndroid Build Coastguard Worker #include "include/private/base/SkTemplates.h" 22*c8dee2aaSAndroid Build Coastguard Worker #include "src/core/SkPathEffectBase.h" 23*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/GrColor.h" 24*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/GrFPArgs.h" 25*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/GrSamplerState.h" 26*c8dee2aaSAndroid Build Coastguard Worker 27*c8dee2aaSAndroid Build Coastguard Worker #include <cstdint> 28*c8dee2aaSAndroid Build Coastguard Worker #include <memory> 29*c8dee2aaSAndroid Build Coastguard Worker 30*c8dee2aaSAndroid Build Coastguard Worker class GrColorInfo; 31*c8dee2aaSAndroid Build Coastguard Worker class GrColorSpaceXform; 32*c8dee2aaSAndroid Build Coastguard Worker class GrProcessorTestData; 33*c8dee2aaSAndroid Build Coastguard Worker class GrStyle; 34*c8dee2aaSAndroid Build Coastguard Worker class SkColorSpace; 35*c8dee2aaSAndroid Build Coastguard Worker class SkMatrix; 36*c8dee2aaSAndroid Build Coastguard Worker class SkPath; 37*c8dee2aaSAndroid Build Coastguard Worker class SkRRect; 38*c8dee2aaSAndroid Build Coastguard Worker class SkRandom; 39*c8dee2aaSAndroid Build Coastguard Worker struct SkRect; 40*c8dee2aaSAndroid Build Coastguard Worker 41*c8dee2aaSAndroid Build Coastguard Worker namespace GrTest { 42*c8dee2aaSAndroid Build Coastguard Worker /** 43*c8dee2aaSAndroid Build Coastguard Worker * Helpers for use in Test functions. 44*c8dee2aaSAndroid Build Coastguard Worker */ 45*c8dee2aaSAndroid Build Coastguard Worker const SkMatrix& TestMatrix(SkRandom*); 46*c8dee2aaSAndroid Build Coastguard Worker const SkMatrix& TestMatrixPreservesRightAngles(SkRandom*); 47*c8dee2aaSAndroid Build Coastguard Worker const SkMatrix& TestMatrixRectStaysRect(SkRandom*); 48*c8dee2aaSAndroid Build Coastguard Worker const SkMatrix& TestMatrixInvertible(SkRandom*); 49*c8dee2aaSAndroid Build Coastguard Worker const SkMatrix& TestMatrixPerspective(SkRandom*); 50*c8dee2aaSAndroid Build Coastguard Worker void TestWrapModes(SkRandom*, GrSamplerState::WrapMode[2]); 51*c8dee2aaSAndroid Build Coastguard Worker const SkRect& TestRect(SkRandom*); 52*c8dee2aaSAndroid Build Coastguard Worker const SkRect& TestSquare(SkRandom*); 53*c8dee2aaSAndroid Build Coastguard Worker const SkRRect& TestRRectSimple(SkRandom*); 54*c8dee2aaSAndroid Build Coastguard Worker const SkPath& TestPath(SkRandom*); 55*c8dee2aaSAndroid Build Coastguard Worker const SkPath& TestPathConvex(SkRandom*); 56*c8dee2aaSAndroid Build Coastguard Worker SkStrokeRec TestStrokeRec(SkRandom*); 57*c8dee2aaSAndroid Build Coastguard Worker /** Creates styles with dash path effects and null path effects */ 58*c8dee2aaSAndroid Build Coastguard Worker void TestStyle(SkRandom*, GrStyle*); 59*c8dee2aaSAndroid Build Coastguard Worker sk_sp<SkColorSpace> TestColorSpace(SkRandom*); 60*c8dee2aaSAndroid Build Coastguard Worker sk_sp<GrColorSpaceXform> TestColorXform(SkRandom*); 61*c8dee2aaSAndroid Build Coastguard Worker 62*c8dee2aaSAndroid Build Coastguard Worker GrColor RandomColor(SkRandom* random); 63*c8dee2aaSAndroid Build Coastguard Worker uint8_t RandomCoverage(SkRandom* random); 64*c8dee2aaSAndroid Build Coastguard Worker 65*c8dee2aaSAndroid Build Coastguard Worker class TestAsFPArgs { 66*c8dee2aaSAndroid Build Coastguard Worker public: 67*c8dee2aaSAndroid Build Coastguard Worker TestAsFPArgs(GrProcessorTestData*); 68*c8dee2aaSAndroid Build Coastguard Worker ~TestAsFPArgs(); args()69*c8dee2aaSAndroid Build Coastguard Worker const GrFPArgs& args() const { return fArgs; } 70*c8dee2aaSAndroid Build Coastguard Worker 71*c8dee2aaSAndroid Build Coastguard Worker private: 72*c8dee2aaSAndroid Build Coastguard Worker std::unique_ptr<GrColorInfo> fColorInfoStorage; 73*c8dee2aaSAndroid Build Coastguard Worker SkSurfaceProps fSurfaceProps; 74*c8dee2aaSAndroid Build Coastguard Worker GrFPArgs fArgs; 75*c8dee2aaSAndroid Build Coastguard Worker }; 76*c8dee2aaSAndroid Build Coastguard Worker 77*c8dee2aaSAndroid Build Coastguard Worker // We have a simplified dash path effect here to avoid relying on SkDashPathEffect which 78*c8dee2aaSAndroid Build Coastguard Worker // is in the optional build target effects. 79*c8dee2aaSAndroid Build Coastguard Worker class TestDashPathEffect : public SkPathEffectBase { 80*c8dee2aaSAndroid Build Coastguard Worker public: Make(const SkScalar * intervals,int count,SkScalar phase)81*c8dee2aaSAndroid Build Coastguard Worker static sk_sp<SkPathEffect> Make(const SkScalar* intervals, int count, SkScalar phase) { 82*c8dee2aaSAndroid Build Coastguard Worker return sk_sp<SkPathEffect>(new TestDashPathEffect(intervals, count, phase)); 83*c8dee2aaSAndroid Build Coastguard Worker } 84*c8dee2aaSAndroid Build Coastguard Worker getFactory()85*c8dee2aaSAndroid Build Coastguard Worker Factory getFactory() const override { return nullptr; } getTypeName()86*c8dee2aaSAndroid Build Coastguard Worker const char* getTypeName() const override { return nullptr; } 87*c8dee2aaSAndroid Build Coastguard Worker 88*c8dee2aaSAndroid Build Coastguard Worker protected: 89*c8dee2aaSAndroid Build Coastguard Worker bool onFilterPath(SkPath* dst, const SkPath&, SkStrokeRec* , const SkRect*, 90*c8dee2aaSAndroid Build Coastguard Worker const SkMatrix&) const override; 91*c8dee2aaSAndroid Build Coastguard Worker DashType asADash(DashInfo* info) const override; 92*c8dee2aaSAndroid Build Coastguard Worker 93*c8dee2aaSAndroid Build Coastguard Worker private: 94*c8dee2aaSAndroid Build Coastguard Worker TestDashPathEffect(const SkScalar* intervals, int count, SkScalar phase); 95*c8dee2aaSAndroid Build Coastguard Worker computeFastBounds(SkRect * bounds)96*c8dee2aaSAndroid Build Coastguard Worker bool computeFastBounds(SkRect* bounds) const override { return true; } 97*c8dee2aaSAndroid Build Coastguard Worker 98*c8dee2aaSAndroid Build Coastguard Worker int fCount; 99*c8dee2aaSAndroid Build Coastguard Worker skia_private::AutoTArray<SkScalar> fIntervals; 100*c8dee2aaSAndroid Build Coastguard Worker SkScalar fPhase; 101*c8dee2aaSAndroid Build Coastguard Worker SkScalar fInitialDashLength; 102*c8dee2aaSAndroid Build Coastguard Worker int fInitialDashIndex; 103*c8dee2aaSAndroid Build Coastguard Worker SkScalar fIntervalLength; 104*c8dee2aaSAndroid Build Coastguard Worker }; 105*c8dee2aaSAndroid Build Coastguard Worker 106*c8dee2aaSAndroid Build Coastguard Worker } // namespace GrTest 107*c8dee2aaSAndroid Build Coastguard Worker 108*c8dee2aaSAndroid Build Coastguard Worker #endif 109*c8dee2aaSAndroid Build Coastguard Worker #endif 110