OLD | NEW |
| (Empty) |
1 Runtime Configuration | |
2 ===================== | |
3 | |
4 Skia supports the configuration of various aspects of its behavior at runtime, | |
5 allowing developers to enable\/disable features, or to experiment with numerical | |
6 quantities without recompiling. | |
7 | |
8 ## Enabling runtime configuration | |
9 | |
10 In order to use a runtime-configurable variable in your source, simply: | |
11 | |
12 <!--?prettify?--> | |
13 ~~~~ | |
14 #include "SkRTConf.h" | |
15 ~~~~ | |
16 | |
17 ## Declaring a runtime-configurable variable | |
18 | |
19 At file scope, declare your variable like so: | |
20 | |
21 <!--?prettify?--> | |
22 ~~~~ | |
23 SK_CONF_DECLARE( confType, varName, confName, defaultValue, description ); | |
24 ~~~~ | |
25 | |
26 For example, to declare a boolean variable called ` c_printShaders ` that can be | |
27 changed at runtime, you would do something like | |
28 | |
29 <!--?prettify?--> | |
30 ~~~~ | |
31 SK_CONF_DECLARE( bool, c_printShaders, "gpu.printShaders", false, "print the | |
32 source code of any internally generated GPU shaders" ); | |
33 ~~~~ | |
34 | |
35 It is safe to declare variables this way in header files; the variables will be | |
36 declared as static, but since they are read\-only\-ish \(they can be changed | |
37 through a special mechanism; see below\), this is safe. | |
38 | |
39 ## Using a runtime-configurable variable | |
40 | |
41 The variables created by `SK_CONF_DECLARE` can be used in normal C\+\+ code as | |
42 if they were regular contant variables. For example: | |
43 | |
44 <!--?prettify?--> | |
45 ~~~~ | |
46 if (c_printShaders) { | |
47 // actually print out the shaders | |
48 } | |
49 ~~~~ | |
50 | |
51 ## Changing a runtime-configurable variable after launch | |
52 | |
53 If, for some reason, you want to change the value of a runtime-configurable | |
54 variable after your program has started, you can do this with the `SK_CONF_SET` | |
55 macro: | |
56 | |
57 <!--?prettify?--> | |
58 ~~~~ | |
59 SK_CONF_SET( "gpu.printShaders", false ) | |
60 ~~~~ | |
61 | |
62 Note that we're using the `confName` parameter to the declaration, not | |
63 `varName`. This is because this configuration option may appear in multiple | |
64 files \(especially if you declared it in a header!\), and we need to make sure | |
65 to update all variables' values, not just the one that's locally visible to the | |
66 file you are currently in. | |
67 | |
68 ## Changing a runtime-configurable variable before launch | |
69 | |
70 This is the primary intended use of these variables. There are two ways that you | |
71 can control the values of runtime-configurable variables at launch time: a | |
72 skia.conf configuration file, or through the use of environment variables. | |
73 | |
74 ### Using skia.conf | |
75 | |
76 The skia.conf file is a simple line-based configuration file containing | |
77 key-value pairs. It supports python-style \# comments. For our example, we might | |
78 see a configuration file that looks like: | |
79 | |
80 <!--?prettify?--> | |
81 ~~~~ | |
82 gpu.printShaders true | |
83 gpu.somethingElse 3.14159 | |
84 matrix.invertProperly false # math is hard | |
85 ... | |
86 ~~~~ | |
87 | |
88 *Note: boolean values may be set as 1, 0, true, or false. Other values will | |
89 result in runtime errors.* | |
90 | |
91 If the skia library detects a skia.conf file at initialization time, it will | |
92 parse it and override the default values of any declared configuration variables | |
93 with the values found in the file. | |
94 | |
95 *Note: although it might appear that the configuration variables have a | |
96 hierarchical naming scheme involving periods, that's just a convention I have | |
97 adopted so that when all declared configuration variables are sorted | |
98 alphabetically, they are roughly grouped by component.* | |
99 | |
100 ## Using environment variables | |
101 | |
102 You can quickly override the value of one runtime-configurable variable using an | |
103 environment variable equal to the variable's key with "skia." prepended. So, for | |
104 example, one might run: | |
105 | |
106 <!--?prettify?--> | |
107 ~~~~ | |
108 prompt% skia.gpu.printShaders=true out/Debug/dm | |
109 ~~~~ | |
110 | |
111 or | |
112 | |
113 <!--?prettify?--> | |
114 ~~~~ | |
115 prompt% export skia.gpu.printShaders=true | |
116 prompt% out/Debug/dm | |
117 ~~~~ | |
118 | |
119 On many shells, it is illegal to have a period in an environment variable name, | |
120 so skia also supports underscores in place of the periods: | |
121 | |
122 <!--?prettify?--> | |
123 ~~~~ | |
124 prompt% skia_gpu_printShaders=true out/Debug/dm | |
125 ~~~~ | |
126 | |
127 or | |
128 | |
129 <!--?prettify?--> | |
130 ~~~~ | |
131 prompt% export skia_gpu_printShaders=true` | |
132 prompt% out/Debug/dm | |
133 ~~~~ | |
134 | |
135 ## Discovering all possible configuration variables | |
136 | |
137 As this system becomes more widely used in skia, there may be hundreds of | |
138 configuration variables. What are they all? What are their defaults? What do | |
139 they do? | |
140 | |
141 In order to find out, simply create a zero-length skia.conf file \(on unix, | |
142 `touch skia.conf` will do the trick\). If skia detects a zero-length | |
143 configuration file, it will overwrite it with a sorted list of all known | |
144 configuration variables, their defaults, and their description strings. Each | |
145 line will be commented out and have its value already equal to its default, so | |
146 you can then edit this file to your liking. | |
147 | |
148 To trigger this behavior, call the function | |
149 `skRTConfRegistry().possiblyDumpFile(); ` or simply use `SkAutoGraphics | |
150 ag;`, which also validates your configuration and print out active non-default | |
151 options. | |
152 | |
153 ## Are these things enabled all the time? | |
154 | |
155 No, they are only enabled in builds where SK_DEBUG is defined. This includes bot
h | |
156 `Debug` and `Release_Developer` gyp BUILDTYPES. The `Release_Developer` build ty
pe | |
157 has exactly the same build flags as `Release`, except it re-enables SK_DEBUG, wh
ich | |
158 in turn enables runtime configuration behavior. | |
159 Specifically: | |
160 | |
161 <!--?prettify?--> | |
162 ~~~~ | |
163 prompt% ninja -C BUILDTYPE=Release_Developer | |
164 ~~~~ | |
165 | |
166 ... wait a long time ... | |
167 | |
168 <!--?prettify?--> | |
169 ~~~~ | |
170 prompt % skia_gpu_printShaders=true out/Release_Developer/dm | |
171 ~~~~ | |
172 | |
173 ... enjoy ... | |
174 | |
175 ## Known issues / limitations | |
176 | |
177 Lines in 'skia.conf', including comments, are limited to 1024 characters. | |
178 Runtime configuration variables of type `char \* ` cannot currently have spaces | |
179 in them. | |
180 Runtime variables are only fully supported for `int`, `unsigned int`, `float`, | |
181 `double`, `bool`, and `char \*`. | |
OLD | NEW |