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 SK_COMMON_FLAGS_CONFIG_H 9 #define SK_COMMON_FLAGS_CONFIG_H 10 11 #include "SkCommandLineFlags.h" 12 13 #if SK_SUPPORT_GPU 14 #include "GrContextFactory.h" 15 #endif 16 17 DECLARE_string(config); 18 19 #if SK_SUPPORT_GPU 20 class SkCommandLineConfigGpu; 21 #endif 22 23 // SkCommandLineConfig represents a Skia rendering configuration string. 24 // The string has following form: 25 // tag: 26 // [via-]*backend 27 // where 'backend' consists of chars excluding hyphen 28 // and each 'via' consists of chars excluding hyphen. 29 class SkCommandLineConfig { 30 public: 31 SkCommandLineConfig(const SkString& tag, const SkString& backend, 32 const SkTArray<SkString>& viaParts); 33 virtual ~SkCommandLineConfig(); 34 #if SK_SUPPORT_GPU asConfigGpu()35 virtual const SkCommandLineConfigGpu* asConfigGpu() const { return nullptr; } 36 #endif getTag()37 const SkString& getTag() const { return fTag; } getBackend()38 const SkString& getBackend() const { return fBackend; } getViaParts()39 const SkTArray<SkString>& getViaParts() const { return fViaParts; } 40 private: 41 SkString fTag; 42 SkString fBackend; 43 SkTArray<SkString> fViaParts; 44 }; 45 46 #if SK_SUPPORT_GPU 47 // SkCommandLineConfigGpu is a SkCommandLineConfig that extracts information out of the backend 48 // part of the tag. It is constructed tags that have: 49 // * backends of form "gpu[option=value,option2=value,...]" 50 // * backends that represent a shorthand of above (such as "glmsaa16" representing 51 // "gpu(api=gl,samples=16)") 52 class SkCommandLineConfigGpu : public SkCommandLineConfig { 53 public: 54 typedef sk_gpu_test::GrContextFactory::ContextType ContextType; 55 typedef sk_gpu_test::GrContextFactory::ContextOverrides ContextOverrides; 56 SkCommandLineConfigGpu(const SkString& tag, const SkTArray<SkString>& viaParts, 57 ContextType contextType, bool useNVPR, bool useDIText, 58 int samples, SkColorType colorType, SkAlphaType alphaType, 59 sk_sp<SkColorSpace> colorSpace, bool useStencilBuffers, 60 bool testThreading); asConfigGpu()61 const SkCommandLineConfigGpu* asConfigGpu() const override { return this; } getContextType()62 ContextType getContextType() const { return fContextType; } getContextOverrides()63 ContextOverrides getContextOverrides() const { return fContextOverrides; } getUseNVPR()64 bool getUseNVPR() const { 65 SkASSERT(!(fContextOverrides & ContextOverrides::kRequireNVPRSupport) || 66 !(fContextOverrides & ContextOverrides::kDisableNVPR)); 67 return fContextOverrides & ContextOverrides::kRequireNVPRSupport; 68 } getUseDIText()69 bool getUseDIText() const { return fUseDIText; } getSamples()70 int getSamples() const { return fSamples; } getColorType()71 SkColorType getColorType() const { return fColorType; } getAlphaType()72 SkAlphaType getAlphaType() const { return fAlphaType; } getColorSpace()73 SkColorSpace* getColorSpace() const { return fColorSpace.get(); } getTestThreading()74 bool getTestThreading() const { return fTestThreading; } 75 76 private: 77 ContextType fContextType; 78 ContextOverrides fContextOverrides; 79 bool fUseDIText; 80 int fSamples; 81 SkColorType fColorType; 82 SkAlphaType fAlphaType; 83 sk_sp<SkColorSpace> fColorSpace; 84 bool fTestThreading; 85 }; 86 #endif 87 88 typedef SkTArray<std::unique_ptr<SkCommandLineConfig>, true> SkCommandLineConfigArray; 89 void ParseConfigs(const SkCommandLineFlags::StringArray& configList, 90 SkCommandLineConfigArray* outResult); 91 92 #endif 93