blob: ca91f5ba20e8a596ae547f80cab4fb261eacf3da [file] [log] [blame]
kkinnunen3e980c32015-12-23 01:33:00 -08001/*
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#include "SkCommonFlagsConfig.h"
msarett7802c3d2016-09-28 11:15:27 -07009#include "SkColorSpace_Base.h"
kkinnunen3e980c32015-12-23 01:33:00 -080010#include "Test.h"
11#include <initializer_list>
12
bsalomon3724e572016-03-30 18:56:19 -070013using sk_gpu_test::GrContextFactory;
14
kkinnunen3e980c32015-12-23 01:33:00 -080015namespace {
16// The code
17// SkCommandLineFlags::StringArray FLAGS_config1 = make_string_array({"a", "b"})
18// can be used to construct string array that one gets with command line flags.
19// For example, the call above is equivalent of
20// DEFINE_string(config1, "a b", "");
21// in cases where the default command line flag value ("a b") is used.
22// make_string_array can be used to construct StringArray strings that have spaces in
23// them.
24SkCommandLineFlags::StringArray make_string_array(std::initializer_list<const char*> strings) {
25 SkTArray<SkString> array;
26 for (auto& s : strings) {
27 array.push_back(SkString(s));
28 }
29 return SkCommandLineFlags::StringArray(array);
30}
31}
32DEF_TEST(ParseConfigs_Gpu, reporter) {
33 // Parses a normal config and returns correct "tag".
Brian Salomon6405e712017-03-20 08:54:16 -040034 // Simple GL config works
35 SkCommandLineFlags::StringArray config1 = make_string_array({"gl"});
kkinnunen3e980c32015-12-23 01:33:00 -080036 SkCommandLineConfigArray configs;
37 ParseConfigs(config1, &configs);
38
39 REPORTER_ASSERT(reporter, configs.count() == 1);
Brian Salomon6405e712017-03-20 08:54:16 -040040 REPORTER_ASSERT(reporter, configs[0]->getTag().equals("gl"));
kkinnunen3e980c32015-12-23 01:33:00 -080041 REPORTER_ASSERT(reporter, configs[0]->getViaParts().count() == 0);
42#if SK_SUPPORT_GPU
43 REPORTER_ASSERT(reporter, configs[0]->asConfigGpu());
44 REPORTER_ASSERT(reporter, configs[0]->asConfigGpu()->getContextType()
Brian Salomon6405e712017-03-20 08:54:16 -040045 == GrContextFactory::kGL_ContextType);
kkinnunen3e980c32015-12-23 01:33:00 -080046 REPORTER_ASSERT(reporter, configs[0]->asConfigGpu()->getUseNVPR() == false);
csmartdaltone0d36292016-07-29 08:14:20 -070047 REPORTER_ASSERT(reporter, configs[0]->asConfigGpu()->getUseInstanced() == false);
kkinnunen3e980c32015-12-23 01:33:00 -080048 REPORTER_ASSERT(reporter, configs[0]->asConfigGpu()->getUseDIText() == false);
49 REPORTER_ASSERT(reporter, configs[0]->asConfigGpu()->getSamples() == 0);
bsalomon33069252016-09-28 08:49:53 -070050 REPORTER_ASSERT(reporter, configs[0]->asConfigGpu()->getColorType() == kRGBA_8888_SkColorType);
brianosmanb109b8c2016-06-16 13:03:24 -070051 REPORTER_ASSERT(reporter, configs[0]->asConfigGpu()->getColorSpace() == nullptr);
kkinnunen3e980c32015-12-23 01:33:00 -080052#endif
53}
54
55DEF_TEST(ParseConfigs_OutParam, reporter) {
56 // Clears the out parameter.
Brian Salomon6405e712017-03-20 08:54:16 -040057 SkCommandLineFlags::StringArray config1 = make_string_array({"gles"});
kkinnunen3e980c32015-12-23 01:33:00 -080058 SkCommandLineConfigArray configs;
59 ParseConfigs(config1, &configs);
60 REPORTER_ASSERT(reporter, configs.count() == 1);
Brian Salomon6405e712017-03-20 08:54:16 -040061 REPORTER_ASSERT(reporter, configs[0]->getTag().equals("gles"));
bsalomonb8797bb2016-04-05 08:49:38 -070062
kkinnunen3e980c32015-12-23 01:33:00 -080063 SkCommandLineFlags::StringArray config2 = make_string_array({"8888"});
64 ParseConfigs(config2, &configs);
65 REPORTER_ASSERT(reporter, configs.count() == 1);
66 REPORTER_ASSERT(reporter, configs[0]->getTag().equals("8888"));
bsalomonb8797bb2016-04-05 08:49:38 -070067
68 SkCommandLineFlags::StringArray config3 = make_string_array({"gl"});
69 ParseConfigs(config3, &configs);
70 REPORTER_ASSERT(reporter, configs.count() == 1);
71 REPORTER_ASSERT(reporter, configs[0]->getTag().equals("gl"));
kkinnunen3e980c32015-12-23 01:33:00 -080072}
73
74DEF_TEST(ParseConfigs_DefaultConfigs, reporter) {
75 // Parses all default configs and returns correct "tag".
76
77 SkCommandLineFlags::StringArray config1 = make_string_array({
Brian Salomon8fe24272017-07-07 12:56:11 -040078 "565",
79 "8888",
80 "debuggl",
81 "gl",
82 "gldft",
83 "nullgl",
84 "glmsaa8",
85 "glmsaa4",
86 "nonrendering",
87 "nullgl",
88 "gles",
89 "glnvpr8",
90 "glnvpr4",
91 "glnvprdit8",
92 "glesnvprdit4",
93 "pdf",
94 "skp",
95 "svg",
96 "xps",
97 "angle_d3d11_es2",
98 "angle_gl_es2",
99 "commandbuffer",
100 "mesa",
101 "hwui",
102 "glf16",
103 "glessrgb",
104 "gl",
105 "glnvpr4",
106 "glnvprdit4",
107 "glsrgb",
108 "glmsaa4",
109 "vk",
110 "glinst",
111 "glinst4",
112 "glinstdit4",
113 "glinst8",
114 "glinstdit8",
115 "glesinst",
116 "glesinst4",
117 "glesinstdit4",
118 "glwide",
119 "glnarrow",
120 "glnostencils",
121 "mock"
kkinnunen3e980c32015-12-23 01:33:00 -0800122 });
123
124 SkCommandLineConfigArray configs;
125 ParseConfigs(config1, &configs);
126
Matt Sarett77a7a1b2017-02-07 13:56:11 -0500127 auto srgbColorSpace = SkColorSpace::MakeSRGB();
brianosmanb109b8c2016-06-16 13:03:24 -0700128
kkinnunen3e980c32015-12-23 01:33:00 -0800129 REPORTER_ASSERT(reporter, configs.count() == config1.count());
130 for (int i = 0; i < config1.count(); ++i) {
131 REPORTER_ASSERT(reporter, configs[i]->getTag().equals(config1[i]));
132 REPORTER_ASSERT(reporter, configs[i]->getViaParts().count() == 0);
133 }
134#if SK_SUPPORT_GPU
135 REPORTER_ASSERT(reporter, !configs[0]->asConfigGpu());
136 REPORTER_ASSERT(reporter, !configs[1]->asConfigGpu());
137 REPORTER_ASSERT(reporter, configs[2]->asConfigGpu());
138 REPORTER_ASSERT(reporter, configs[3]->asConfigGpu());
Brian Salomon6405e712017-03-20 08:54:16 -0400139 REPORTER_ASSERT(reporter, configs[4]->asConfigGpu()->getUseDIText());
140 REPORTER_ASSERT(reporter, configs[5]->asConfigGpu());
Brian Salomondcf0ab02017-03-20 11:10:21 -0400141 REPORTER_ASSERT(reporter, configs[6]->asConfigGpu()->getSamples() == 8);
Brian Salomon6405e712017-03-20 08:54:16 -0400142 REPORTER_ASSERT(reporter, configs[7]->asConfigGpu()->getSamples() == 4);
143 REPORTER_ASSERT(reporter, !configs[8]->asConfigGpu());
144 REPORTER_ASSERT(reporter, configs[9]->asConfigGpu());
145 REPORTER_ASSERT(reporter, configs[10]->asConfigGpu());
Brian Salomondcf0ab02017-03-20 11:10:21 -0400146 REPORTER_ASSERT(reporter, configs[11]->asConfigGpu()->getSamples() == 8);
Brian Salomon6405e712017-03-20 08:54:16 -0400147 REPORTER_ASSERT(reporter, configs[11]->asConfigGpu()->getUseNVPR());
148 REPORTER_ASSERT(reporter, !configs[11]->asConfigGpu()->getUseDIText());
149 REPORTER_ASSERT(reporter, configs[12]->asConfigGpu()->getSamples() == 4);
kkinnunen3e980c32015-12-23 01:33:00 -0800150 REPORTER_ASSERT(reporter, configs[12]->asConfigGpu()->getUseNVPR());
cdaltonc28afdb2016-03-29 20:05:07 -0700151 REPORTER_ASSERT(reporter, !configs[12]->asConfigGpu()->getUseDIText());
Brian Salomondcf0ab02017-03-20 11:10:21 -0400152 REPORTER_ASSERT(reporter, configs[13]->asConfigGpu()->getSamples() == 8);
kkinnunen3e980c32015-12-23 01:33:00 -0800153 REPORTER_ASSERT(reporter, configs[13]->asConfigGpu()->getUseNVPR());
Brian Salomon6405e712017-03-20 08:54:16 -0400154 REPORTER_ASSERT(reporter, configs[13]->asConfigGpu()->getUseDIText());
155 REPORTER_ASSERT(reporter, configs[14]->asConfigGpu()->getSamples() == 4);
cdaltonc28afdb2016-03-29 20:05:07 -0700156 REPORTER_ASSERT(reporter, configs[14]->asConfigGpu()->getUseNVPR());
157 REPORTER_ASSERT(reporter, configs[14]->asConfigGpu()->getUseDIText());
Brian Salomon6405e712017-03-20 08:54:16 -0400158 REPORTER_ASSERT(reporter, !configs[15]->asConfigGpu());
kkinnunen3e980c32015-12-23 01:33:00 -0800159 REPORTER_ASSERT(reporter, !configs[16]->asConfigGpu());
160 REPORTER_ASSERT(reporter, !configs[17]->asConfigGpu());
161 REPORTER_ASSERT(reporter, !configs[18]->asConfigGpu());
Brian Salomon6405e712017-03-20 08:54:16 -0400162 REPORTER_ASSERT(reporter, !configs[23]->asConfigGpu());
163 REPORTER_ASSERT(reporter, configs[24]->asConfigGpu()->getColorType() == kRGBA_F16_SkColorType);
164 REPORTER_ASSERT(reporter, configs[24]->asConfigGpu()->getColorSpace());
165 REPORTER_ASSERT(reporter, configs[24]->asConfigGpu()->getColorSpace()->gammaIsLinear());
raftias94888332016-10-18 10:02:51 -0700166 const SkMatrix44* srgbXYZ = as_CSB(srgbColorSpace)->toXYZD50();
167 SkASSERT(srgbXYZ);
168 const SkMatrix44* config25XYZ =
Brian Salomon6405e712017-03-20 08:54:16 -0400169 as_CSB(configs[24]->asConfigGpu()->getColorSpace())->toXYZD50();
raftias94888332016-10-18 10:02:51 -0700170 SkASSERT(config25XYZ);
171 REPORTER_ASSERT(reporter, *config25XYZ == *srgbXYZ);
Brian Salomon6405e712017-03-20 08:54:16 -0400172 REPORTER_ASSERT(reporter, configs[25]->asConfigGpu()->getColorType() == kRGBA_8888_SkColorType);
173 REPORTER_ASSERT(reporter, configs[25]->asConfigGpu()->getColorSpace() == srgbColorSpace.get());
174 REPORTER_ASSERT(reporter, configs[40]->asConfigGpu()->getColorType() == kRGBA_F16_SkColorType);
175 REPORTER_ASSERT(reporter, configs[40]->asConfigGpu()->getColorSpace());
176 REPORTER_ASSERT(reporter, configs[40]->asConfigGpu()->getColorSpace()->gammaIsLinear());
177 const SkMatrix44* config41XYZ =
178 as_CSB(configs[40]->asConfigGpu()->getColorSpace())->toXYZD50();
179 SkASSERT(config41XYZ);
180 REPORTER_ASSERT(reporter, *config41XYZ != *srgbXYZ);
181 REPORTER_ASSERT(reporter, configs[32]->asConfigGpu()->getContextType() ==
182 GrContextFactory::kGL_ContextType);
brianosman4562f6e2016-09-19 14:42:04 -0700183 REPORTER_ASSERT(reporter, configs[41]->asConfigGpu()->getColorType() == kRGBA_F16_SkColorType);
184 REPORTER_ASSERT(reporter, configs[41]->asConfigGpu()->getColorSpace());
185 REPORTER_ASSERT(reporter, configs[41]->asConfigGpu()->getColorSpace()->gammaIsLinear());
Brian Salomon6405e712017-03-20 08:54:16 -0400186 REPORTER_ASSERT(reporter, *as_CSB(configs[41]->asConfigGpu()->getColorSpace())->toXYZD50() !=
187 *as_CSB(srgbColorSpace)->toXYZD50());
Brian Salomon8fe24272017-07-07 12:56:11 -0400188 REPORTER_ASSERT(reporter, configs[42]->asConfigGpu()->getContextType() ==
189 GrContextFactory::kGL_ContextType);
190 REPORTER_ASSERT(reporter, SkToBool(configs[42]->asConfigGpu()->getContextOverrides() &
191 SkCommandLineConfigGpu::ContextOverrides::kAvoidStencilBuffers));
192 REPORTER_ASSERT(reporter, configs[43]->asConfigGpu()->getContextType() ==
193 GrContextFactory::kMock_ContextType);
Brian Salomon6405e712017-03-20 08:54:16 -0400194 REPORTER_ASSERT(reporter, configs[32]->asConfigGpu()->getUseInstanced());
raftias94888332016-10-18 10:02:51 -0700195 REPORTER_ASSERT(reporter, configs[33]->asConfigGpu()->getContextType() ==
196 GrContextFactory::kGL_ContextType);
csmartdaltone0d36292016-07-29 08:14:20 -0700197 REPORTER_ASSERT(reporter, configs[33]->asConfigGpu()->getUseInstanced());
Brian Salomon6405e712017-03-20 08:54:16 -0400198 REPORTER_ASSERT(reporter, configs[33]->asConfigGpu()->getSamples() == 4);
csmartdaltone0d36292016-07-29 08:14:20 -0700199 REPORTER_ASSERT(reporter, configs[34]->asConfigGpu()->getContextType() ==
200 GrContextFactory::kGL_ContextType);
201 REPORTER_ASSERT(reporter, configs[34]->asConfigGpu()->getUseInstanced());
Brian Salomon6405e712017-03-20 08:54:16 -0400202 REPORTER_ASSERT(reporter, configs[34]->asConfigGpu()->getUseDIText());
csmartdaltone0d36292016-07-29 08:14:20 -0700203 REPORTER_ASSERT(reporter, configs[34]->asConfigGpu()->getSamples() == 4);
204 REPORTER_ASSERT(reporter, configs[35]->asConfigGpu()->getContextType() ==
205 GrContextFactory::kGL_ContextType);
206 REPORTER_ASSERT(reporter, configs[35]->asConfigGpu()->getUseInstanced());
Brian Salomondcf0ab02017-03-20 11:10:21 -0400207 REPORTER_ASSERT(reporter, configs[35]->asConfigGpu()->getSamples() == 8);
csmartdaltone0d36292016-07-29 08:14:20 -0700208 REPORTER_ASSERT(reporter, configs[36]->asConfigGpu()->getContextType() ==
209 GrContextFactory::kGL_ContextType);
210 REPORTER_ASSERT(reporter, configs[36]->asConfigGpu()->getUseInstanced());
Brian Salomon6405e712017-03-20 08:54:16 -0400211 REPORTER_ASSERT(reporter, configs[36]->asConfigGpu()->getUseDIText());
Brian Salomondcf0ab02017-03-20 11:10:21 -0400212 REPORTER_ASSERT(reporter, configs[36]->asConfigGpu()->getSamples() == 8);
csmartdaltone0d36292016-07-29 08:14:20 -0700213 REPORTER_ASSERT(reporter, configs[37]->asConfigGpu()->getContextType() ==
Brian Salomon6405e712017-03-20 08:54:16 -0400214 GrContextFactory::kGLES_ContextType);
csmartdaltone0d36292016-07-29 08:14:20 -0700215 REPORTER_ASSERT(reporter, configs[37]->asConfigGpu()->getUseInstanced());
csmartdaltone0d36292016-07-29 08:14:20 -0700216 REPORTER_ASSERT(reporter, configs[38]->asConfigGpu()->getContextType() ==
217 GrContextFactory::kGLES_ContextType);
218 REPORTER_ASSERT(reporter, configs[38]->asConfigGpu()->getUseInstanced());
Brian Salomon6405e712017-03-20 08:54:16 -0400219 REPORTER_ASSERT(reporter, configs[38]->asConfigGpu()->getSamples() == 4);
csmartdaltone0d36292016-07-29 08:14:20 -0700220 REPORTER_ASSERT(reporter, configs[39]->asConfigGpu()->getContextType() ==
221 GrContextFactory::kGLES_ContextType);
222 REPORTER_ASSERT(reporter, configs[39]->asConfigGpu()->getUseInstanced());
Brian Salomon6405e712017-03-20 08:54:16 -0400223 REPORTER_ASSERT(reporter, configs[39]->asConfigGpu()->getUseDIText());
csmartdaltone0d36292016-07-29 08:14:20 -0700224 REPORTER_ASSERT(reporter, configs[39]->asConfigGpu()->getSamples() == 4);
Brian Salomon6405e712017-03-20 08:54:16 -0400225 REPORTER_ASSERT(reporter, configs[19]->asConfigGpu());
halcanary3c4521a2016-04-04 12:14:46 -0700226 REPORTER_ASSERT(reporter, configs[20]->asConfigGpu());
kkinnunen3e980c32015-12-23 01:33:00 -0800227 REPORTER_ASSERT(reporter, configs[21]->asConfigGpu());
halcanary3c4521a2016-04-04 12:14:46 -0700228#if SK_MESA
cdaltonc28afdb2016-03-29 20:05:07 -0700229 REPORTER_ASSERT(reporter, configs[23]->asConfigGpu());
230#else
Brian Salomon6405e712017-03-20 08:54:16 -0400231 REPORTER_ASSERT(reporter, !configs[22]->asConfigGpu());
cdaltonc28afdb2016-03-29 20:05:07 -0700232#endif
Brian Salomon6405e712017-03-20 08:54:16 -0400233 REPORTER_ASSERT(reporter, configs[26]->asConfigGpu());
bsalomonb8797bb2016-04-05 08:49:38 -0700234 REPORTER_ASSERT(reporter, configs[27]->asConfigGpu());
Brian Salomon6405e712017-03-20 08:54:16 -0400235 REPORTER_ASSERT(reporter, configs[27]->asConfigGpu()->getSamples() == 4);
236 REPORTER_ASSERT(reporter, configs[27]->asConfigGpu()->getUseNVPR());
bsalomonb8797bb2016-04-05 08:49:38 -0700237 REPORTER_ASSERT(reporter, configs[28]->asConfigGpu());
238 REPORTER_ASSERT(reporter, configs[28]->asConfigGpu()->getSamples() == 4);
239 REPORTER_ASSERT(reporter, configs[28]->asConfigGpu()->getUseNVPR());
Brian Salomon6405e712017-03-20 08:54:16 -0400240 REPORTER_ASSERT(reporter, configs[28]->asConfigGpu()->getUseDIText());
bsalomonb8797bb2016-04-05 08:49:38 -0700241 REPORTER_ASSERT(reporter, configs[29]->asConfigGpu());
Brian Salomon6405e712017-03-20 08:54:16 -0400242 REPORTER_ASSERT(reporter, configs[29]->asConfigGpu()->getColorType() == kRGBA_8888_SkColorType);
243 REPORTER_ASSERT(reporter, configs[29]->asConfigGpu()->getColorSpace() == srgbColorSpace.get());
bsalomonb8797bb2016-04-05 08:49:38 -0700244 REPORTER_ASSERT(reporter, configs[30]->asConfigGpu());
Brian Salomon6405e712017-03-20 08:54:16 -0400245 REPORTER_ASSERT(reporter, configs[30]->asConfigGpu()->getSamples() == 4);
bsalomondc0fcd42016-04-11 14:21:33 -0700246#ifdef SK_VULKAN
Brian Salomon6405e712017-03-20 08:54:16 -0400247 REPORTER_ASSERT(reporter, configs[31]->asConfigGpu());
bsalomondc0fcd42016-04-11 14:21:33 -0700248#endif
kkinnunen3e980c32015-12-23 01:33:00 -0800249#endif
250}
251
252DEF_TEST(ParseConfigs_ExtendedGpuConfigsCorrect, reporter) {
253 SkCommandLineFlags::StringArray config1 = make_string_array({
Brian Salomon6405e712017-03-20 08:54:16 -0400254 "gpu[api=gl,nvpr=true,dit=false]",
bsalomon11abd8d2016-10-14 08:13:48 -0700255 "gpu[api=angle_d3d9_es2]",
256 "gpu[api=angle_gl_es3]",
bsalomon808ecbb2016-09-28 12:40:22 -0700257 "gpu[api=mesa,samples=77]",
258 "gpu[dit=true,api=commandbuffer]",
bsalomon808ecbb2016-09-28 12:40:22 -0700259 "gpu[api=gles]",
260 "gpu[api=gl]",
261 "gpu[api=vulkan]",
Brian Salomon8fe24272017-07-07 12:56:11 -0400262 "gpu[api=mock]",
kkinnunen3e980c32015-12-23 01:33:00 -0800263 });
264
265 SkCommandLineConfigArray configs;
266 ParseConfigs(config1, &configs);
267 REPORTER_ASSERT(reporter, configs.count() == config1.count());
268 for (int i = 0; i < config1.count(); ++i) {
269 REPORTER_ASSERT(reporter, configs[i]->getTag().equals(config1[i]));
270 }
271#if SK_SUPPORT_GPU
272 REPORTER_ASSERT(reporter, configs[0]->asConfigGpu()->getContextType() ==
Brian Salomon6405e712017-03-20 08:54:16 -0400273 GrContextFactory::kGL_ContextType);
kkinnunen3e980c32015-12-23 01:33:00 -0800274 REPORTER_ASSERT(reporter, configs[0]->asConfigGpu()->getUseNVPR());
kkinnunene3c2f802015-12-29 08:57:32 -0800275 REPORTER_ASSERT(reporter, !configs[0]->asConfigGpu()->getUseDIText());
kkinnunen3e980c32015-12-23 01:33:00 -0800276 REPORTER_ASSERT(reporter, configs[0]->asConfigGpu()->getSamples() == 0);
kkinnunen3e980c32015-12-23 01:33:00 -0800277 REPORTER_ASSERT(reporter, configs[1]->asConfigGpu()->getContextType() ==
bsalomon11abd8d2016-10-14 08:13:48 -0700278 GrContextFactory::kANGLE_D3D9_ES2_ContextType);
279 REPORTER_ASSERT(reporter, configs[1]->asConfigGpu());
kkinnunen3e980c32015-12-23 01:33:00 -0800280 REPORTER_ASSERT(reporter, configs[2]->asConfigGpu()->getContextType() ==
bsalomon11abd8d2016-10-14 08:13:48 -0700281 GrContextFactory::kANGLE_GL_ES3_ContextType);
282 REPORTER_ASSERT(reporter, configs[2]->asConfigGpu());
kkinnunen3e980c32015-12-23 01:33:00 -0800283#if SK_MESA
284 REPORTER_ASSERT(reporter, configs[3]->asConfigGpu()->getContextType() ==
bsalomon85b4b532016-04-05 11:06:27 -0700285 GrContextFactory::kMESA_ContextType);
kkinnunen3e980c32015-12-23 01:33:00 -0800286#else
287 REPORTER_ASSERT(reporter, !configs[3]->asConfigGpu());
288#endif
kkinnunen3e980c32015-12-23 01:33:00 -0800289 REPORTER_ASSERT(reporter, configs[4]->asConfigGpu()->getContextType() ==
bsalomon85b4b532016-04-05 11:06:27 -0700290 GrContextFactory::kCommandBuffer_ContextType);
kkinnunen3e980c32015-12-23 01:33:00 -0800291 REPORTER_ASSERT(reporter, configs[5]->asConfigGpu()->getContextType() ==
Brian Salomon6405e712017-03-20 08:54:16 -0400292 GrContextFactory::kGLES_ContextType);
kkinnunen3e980c32015-12-23 01:33:00 -0800293 REPORTER_ASSERT(reporter, !configs[5]->asConfigGpu()->getUseNVPR());
294 REPORTER_ASSERT(reporter, !configs[5]->asConfigGpu()->getUseDIText());
295 REPORTER_ASSERT(reporter, configs[5]->asConfigGpu()->getSamples() == 0);
296 REPORTER_ASSERT(reporter, configs[6]->asConfigGpu()->getContextType() ==
Brian Salomon6405e712017-03-20 08:54:16 -0400297 GrContextFactory::kGL_ContextType);
kkinnunen3e980c32015-12-23 01:33:00 -0800298 REPORTER_ASSERT(reporter, !configs[6]->asConfigGpu()->getUseNVPR());
299 REPORTER_ASSERT(reporter, !configs[6]->asConfigGpu()->getUseDIText());
300 REPORTER_ASSERT(reporter, configs[6]->asConfigGpu()->getSamples() == 0);
bsalomondc0fcd42016-04-11 14:21:33 -0700301#ifdef SK_VULKAN
Brian Salomon6405e712017-03-20 08:54:16 -0400302 REPORTER_ASSERT(reporter, configs[7]->asConfigGpu()->getContextType() ==
bsalomondc0fcd42016-04-11 14:21:33 -0700303 GrContextFactory::kVulkan_ContextType);
304 REPORTER_ASSERT(reporter, !configs[7]->asConfigGpu()->getUseNVPR());
305 REPORTER_ASSERT(reporter, !configs[7]->asConfigGpu()->getUseDIText());
306 REPORTER_ASSERT(reporter, configs[7]->asConfigGpu()->getSamples() == 0);
307#endif
Brian Salomon8fe24272017-07-07 12:56:11 -0400308 REPORTER_ASSERT(reporter, configs[8]->asConfigGpu()->getContextType() ==
309 GrContextFactory::kMock_ContextType);
kkinnunen3e980c32015-12-23 01:33:00 -0800310#endif
311}
312
313DEF_TEST(ParseConfigs_ExtendedGpuConfigsIncorrect, reporter) {
314 SkCommandLineFlags::StringArray config1 = make_string_array({
Brian Salomon6405e712017-03-20 08:54:16 -0400315 "gpu[api=gl,nvpr=1]", // Number as bool.
bsalomon808ecbb2016-09-28 12:40:22 -0700316 "gpu[api=gl,]", // Trailing in comma.
bsalomon11abd8d2016-10-14 08:13:48 -0700317 "gpu[api=angle_glu]", // Unknown api.
bsalomon808ecbb2016-09-28 12:40:22 -0700318 "gpu[api=,samples=0]", // Empty api.
Brian Salomon6405e712017-03-20 08:54:16 -0400319 "gpu[api=gl,samples=true]", // Value true as a number.
320 "gpu[api=gl,samples=0,samples=0]", // Duplicate option key.
321 "gpu[,api=gl,samples=0]", // Leading comma.
bsalomon808ecbb2016-09-28 12:40:22 -0700322 "gpu[samples=54", // Missing closing parenthesis.
kkinnunen3e980c32015-12-23 01:33:00 -0800323 ",,",
Brian Salomon6405e712017-03-20 08:54:16 -0400324 "gpu[]", // Missing required api specifier
325 "gpu[samples=4]", // Missing required api specifier
bsalomon808ecbb2016-09-28 12:40:22 -0700326 "gpu[", // Missing bracket.
kkinnunen3e980c32015-12-23 01:33:00 -0800327 "samples=54" // No backend.
bsalomon808ecbb2016-09-28 12:40:22 -0700328 "gpu[nvpr=true ]", // Space.
kkinnunen3e980c32015-12-23 01:33:00 -0800329 });
330
331 SkCommandLineConfigArray configs;
332 ParseConfigs(config1, &configs);
333 REPORTER_ASSERT(reporter, configs.count() == config1.count());
334 for (int i = 0; i < config1.count(); ++i) {
335 REPORTER_ASSERT(reporter, configs[i]->getTag().equals(config1[i]));
336 REPORTER_ASSERT(reporter, configs[i]->getBackend().equals(config1[i]));
337#if SK_SUPPORT_GPU
338 REPORTER_ASSERT(reporter, !configs[i]->asConfigGpu());
339#endif
340 }
341}
342
kkinnunen3e980c32015-12-23 01:33:00 -0800343DEF_TEST(ParseConfigs_ExtendedGpuConfigsSurprises, reporter) {
344 // These just list explicitly some properties of the system.
345 SkCommandLineFlags::StringArray config1 = make_string_array({
346 // Options are not canonized -> two same configs have a different tag.
Brian Salomon6405e712017-03-20 08:54:16 -0400347 "gpu[api=gl,nvpr=true,dit=true]", "gpu[api=gl,dit=true,nvpr=true]",
348 "gpu[api=debuggl]", "gpu[api=gl]", "gpu[api=gles]", ""
349 "gpu[api=gl]", "gpu[api=gl,samples=0]", "gpu[api=gles,samples=0]"
kkinnunen3e980c32015-12-23 01:33:00 -0800350 });
351 SkCommandLineConfigArray configs;
352 ParseConfigs(config1, &configs);
353 REPORTER_ASSERT(reporter, configs.count() == config1.count());
354 for (int i = 0; i < config1.count(); ++i) {
355 REPORTER_ASSERT(reporter, configs[i]->getTag().equals(config1[i]));
356#if SK_SUPPORT_GPU
357 REPORTER_ASSERT(reporter, configs[i]->getBackend().equals("gpu"));
358 REPORTER_ASSERT(reporter, configs[i]->asConfigGpu());
359#else
360 REPORTER_ASSERT(reporter, configs[i]->getBackend().equals(config1[i]));
361#endif
362 }
363}
Mike Klein2af5d682017-04-13 12:24:53 -0400364
365#if SK_SUPPORT_GPU
kkinnunen3e980c32015-12-23 01:33:00 -0800366DEF_TEST(ParseConfigs_ViaParsing, reporter) {
367 SkCommandLineFlags::StringArray config1 = make_string_array({
368 "a-b-c-8888",
369 "zz-qq-gpu",
bsalomon11abd8d2016-10-14 08:13:48 -0700370 "a-angle_gl_es2"
kkinnunen3e980c32015-12-23 01:33:00 -0800371 });
372
373 SkCommandLineConfigArray configs;
374 ParseConfigs(config1, &configs);
375 const struct {
376 const char* backend;
377 const char* vias[3];
378 } expectedConfigs[] = {
379 {"8888", {"a", "b", "c"}},
380 {"gpu", {"zz", "qq", nullptr}},
bsalomon11abd8d2016-10-14 08:13:48 -0700381 {"gpu", { "a", nullptr, nullptr }}
kkinnunen3e980c32015-12-23 01:33:00 -0800382 };
383 for (int i = 0; i < config1.count(); ++i) {
384 REPORTER_ASSERT(reporter, configs[i]->getTag().equals(config1[i]));
385 REPORTER_ASSERT(reporter, configs[i]->getBackend().equals(expectedConfigs[i].backend));
386 for (int j = 0; j < static_cast<int>(SK_ARRAY_COUNT(expectedConfigs[i].vias)); ++j) {
387 if (!expectedConfigs[i].vias[j]) {
388 REPORTER_ASSERT(reporter, configs[i]->getViaParts().count() == j);
389 break;
390 }
391 REPORTER_ASSERT(reporter,
392 configs[i]->getViaParts()[j].equals(expectedConfigs[i].vias[j]));
393 }
394 }
395}
Mike Klein2af5d682017-04-13 12:24:53 -0400396#endif
kkinnunen3e980c32015-12-23 01:33:00 -0800397
398DEF_TEST(ParseConfigs_ViaParsingExtendedForm, reporter) {
399 SkCommandLineFlags::StringArray config1 = make_string_array({
bsalomon808ecbb2016-09-28 12:40:22 -0700400 "zz-qq-gpu[api=gles]",
bsalomon11abd8d2016-10-14 08:13:48 -0700401 "abc-nbc-cbs-gpu[api=angle_d3d9_es2,samples=1]",
Brian Salomon6405e712017-03-20 08:54:16 -0400402 "a-gpu[api=gl",
403 "abc-def-angle_gl_es2[api=gles]",
kkinnunen3e980c32015-12-23 01:33:00 -0800404 });
405
406 SkCommandLineConfigArray configs;
407 ParseConfigs(config1, &configs);
408 const struct {
409 const char* backend;
410 const char* vias[3];
411 } expectedConfigs[] = {
412#if SK_SUPPORT_GPU
413 {"gpu", {"zz", "qq", nullptr}},
bsalomon11abd8d2016-10-14 08:13:48 -0700414 {"gpu", {"abc", "nbc", "cbs"}},
kkinnunen3e980c32015-12-23 01:33:00 -0800415#else
bsalomon808ecbb2016-09-28 12:40:22 -0700416 {"gpu[api=gles]", {"zz", "qq", nullptr}},
bsalomon11abd8d2016-10-14 08:13:48 -0700417 {"gpu[api=angle_d3d9_es2,samples=1]", {"abc", "nbc", "cbs"}},
kkinnunen3e980c32015-12-23 01:33:00 -0800418#endif
Brian Salomon6405e712017-03-20 08:54:16 -0400419 {"gpu[api=gl", {"a", nullptr, nullptr}}, // Missing bracket makes this is not extended
420 // form but via still works as expected.
421 {"angle_gl_es2[api=gles]", {"abc", "def", nullptr}} // This is not extended form.
422 // angle_gl_es2 is an api type not a
423 // backend.
kkinnunen3e980c32015-12-23 01:33:00 -0800424 };
425 for (int i = 0; i < config1.count(); ++i) {
426 REPORTER_ASSERT(reporter, configs[i]->getTag().equals(config1[i]));
427 REPORTER_ASSERT(reporter, configs[i]->getBackend().equals(expectedConfigs[i].backend));
428 for (int j = 0; j < static_cast<int>(SK_ARRAY_COUNT(expectedConfigs[i].vias)); ++j) {
429 if (!expectedConfigs[i].vias[j]) {
430 REPORTER_ASSERT(reporter, configs[i]->getViaParts().count() ==
431 static_cast<int>(j));
432 break;
433 }
434 REPORTER_ASSERT(reporter,
435 configs[i]->getViaParts()[j].equals(expectedConfigs[i].vias[j]));
436 }
437 }
438#if SK_SUPPORT_GPU
439 REPORTER_ASSERT(reporter, configs[0]->asConfigGpu());
bsalomon11abd8d2016-10-14 08:13:48 -0700440 REPORTER_ASSERT(reporter, configs[1]->asConfigGpu());
kkinnunen3e980c32015-12-23 01:33:00 -0800441 REPORTER_ASSERT(reporter, !configs[2]->asConfigGpu());
bsalomon11abd8d2016-10-14 08:13:48 -0700442 REPORTER_ASSERT(reporter, !configs[3]->asConfigGpu());
kkinnunen3e980c32015-12-23 01:33:00 -0800443#endif
444}