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 17DECLARE_string(config); 18 19#if SK_SUPPORT_GPU 20class 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. 29class SkCommandLineConfig { 30 public: 31 SkCommandLineConfig(const SkString& tag, const SkString& backend, 32 const SkTArray<SkString>& viaParts); 33 virtual ~SkCommandLineConfig(); 34#if SK_SUPPORT_GPU 35 virtual const SkCommandLineConfigGpu* asConfigGpu() const { return nullptr; } 36#endif 37 const SkString& getTag() const { return fTag; } 38 const SkString& getBackend() const { return fBackend; } 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)") 52class 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 useInstanced, bool useDIText, 58 int samples, SkColorType colorType, sk_sp<SkColorSpace> colorSpace); 59 const SkCommandLineConfigGpu* asConfigGpu() const override { return this; } 60 ContextType getContextType() const { return fContextType; } 61 ContextOverrides getContextOverrides() const { return fContextOverrides; } 62 bool getUseNVPR() const { 63 SkASSERT(!(fContextOverrides & ContextOverrides::kRequireNVPRSupport) || 64 !(fContextOverrides & ContextOverrides::kDisableNVPR)); 65 return fContextOverrides & ContextOverrides::kRequireNVPRSupport; 66 } 67 bool getUseInstanced() const { return fContextOverrides & ContextOverrides::kUseInstanced; } 68 bool getUseDIText() const { return fUseDIText; } 69 int getSamples() const { return fSamples; } 70 SkColorType getColorType() const { return fColorType; } 71 SkColorSpace* getColorSpace() const { return fColorSpace.get(); } 72 73 private: 74 ContextType fContextType; 75 ContextOverrides fContextOverrides; 76 bool fUseDIText; 77 int fSamples; 78 SkColorType fColorType; 79 sk_sp<SkColorSpace> fColorSpace; 80}; 81#endif 82 83typedef SkTArray<std::unique_ptr<SkCommandLineConfig>, true> SkCommandLineConfigArray; 84void ParseConfigs(const SkCommandLineFlags::StringArray& configList, 85 SkCommandLineConfigArray* outResult); 86 87#endif 88