blob: 747ad1019474f8c96595b67261804b77b025e1a4 [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);
47 REPORTER_ASSERT(reporter, configs[0]->asConfigGpu()->getUseDIText() == false);
48 REPORTER_ASSERT(reporter, configs[0]->asConfigGpu()->getSamples() == 0);
bsalomon33069252016-09-28 08:49:53 -070049 REPORTER_ASSERT(reporter, configs[0]->asConfigGpu()->getColorType() == kRGBA_8888_SkColorType);
brianosmanb109b8c2016-06-16 13:03:24 -070050 REPORTER_ASSERT(reporter, configs[0]->asConfigGpu()->getColorSpace() == nullptr);
kkinnunen3e980c32015-12-23 01:33:00 -080051#endif
52}
53
54DEF_TEST(ParseConfigs_OutParam, reporter) {
55 // Clears the out parameter.
Brian Salomon6405e712017-03-20 08:54:16 -040056 SkCommandLineFlags::StringArray config1 = make_string_array({"gles"});
kkinnunen3e980c32015-12-23 01:33:00 -080057 SkCommandLineConfigArray configs;
58 ParseConfigs(config1, &configs);
59 REPORTER_ASSERT(reporter, configs.count() == 1);
Brian Salomon6405e712017-03-20 08:54:16 -040060 REPORTER_ASSERT(reporter, configs[0]->getTag().equals("gles"));
bsalomonb8797bb2016-04-05 08:49:38 -070061
kkinnunen3e980c32015-12-23 01:33:00 -080062 SkCommandLineFlags::StringArray config2 = make_string_array({"8888"});
63 ParseConfigs(config2, &configs);
64 REPORTER_ASSERT(reporter, configs.count() == 1);
65 REPORTER_ASSERT(reporter, configs[0]->getTag().equals("8888"));
bsalomonb8797bb2016-04-05 08:49:38 -070066
67 SkCommandLineFlags::StringArray config3 = make_string_array({"gl"});
68 ParseConfigs(config3, &configs);
69 REPORTER_ASSERT(reporter, configs.count() == 1);
70 REPORTER_ASSERT(reporter, configs[0]->getTag().equals("gl"));
kkinnunen3e980c32015-12-23 01:33:00 -080071}
72
73DEF_TEST(ParseConfigs_DefaultConfigs, reporter) {
74 // Parses all default configs and returns correct "tag".
75
76 SkCommandLineFlags::StringArray config1 = make_string_array({
Brian Salomon8fe24272017-07-07 12:56:11 -040077 "565",
78 "8888",
79 "debuggl",
80 "gl",
81 "gldft",
82 "nullgl",
83 "glmsaa8",
84 "glmsaa4",
85 "nonrendering",
86 "nullgl",
87 "gles",
88 "glnvpr8",
89 "glnvpr4",
90 "glnvprdit8",
91 "glesnvprdit4",
92 "pdf",
93 "skp",
94 "svg",
95 "xps",
96 "angle_d3d11_es2",
97 "angle_gl_es2",
98 "commandbuffer",
99 "mesa",
100 "hwui",
101 "glf16",
102 "glessrgb",
103 "gl",
104 "glnvpr4",
105 "glnvprdit4",
106 "glsrgb",
107 "glmsaa4",
108 "vk",
Brian Salomon8fe24272017-07-07 12:56:11 -0400109 "glwide",
110 "glnarrow",
111 "glnostencils",
Greg Daniel2811aa22017-07-13 15:34:56 -0400112 "mock",
Brian Salomonce5ee602017-07-17 11:31:31 -0400113 "mtl",
114 "gl4444",
Brian Osmanf9810662017-08-30 10:02:10 -0400115 "gl565",
116 "gltestthreading"
kkinnunen3e980c32015-12-23 01:33:00 -0800117 });
118
119 SkCommandLineConfigArray configs;
120 ParseConfigs(config1, &configs);
121
Matt Sarett77a7a1b2017-02-07 13:56:11 -0500122 auto srgbColorSpace = SkColorSpace::MakeSRGB();
brianosmanb109b8c2016-06-16 13:03:24 -0700123
kkinnunen3e980c32015-12-23 01:33:00 -0800124 REPORTER_ASSERT(reporter, configs.count() == config1.count());
125 for (int i = 0; i < config1.count(); ++i) {
126 REPORTER_ASSERT(reporter, configs[i]->getTag().equals(config1[i]));
127 REPORTER_ASSERT(reporter, configs[i]->getViaParts().count() == 0);
128 }
129#if SK_SUPPORT_GPU
130 REPORTER_ASSERT(reporter, !configs[0]->asConfigGpu());
131 REPORTER_ASSERT(reporter, !configs[1]->asConfigGpu());
132 REPORTER_ASSERT(reporter, configs[2]->asConfigGpu());
133 REPORTER_ASSERT(reporter, configs[3]->asConfigGpu());
Brian Salomon6405e712017-03-20 08:54:16 -0400134 REPORTER_ASSERT(reporter, configs[4]->asConfigGpu()->getUseDIText());
135 REPORTER_ASSERT(reporter, configs[5]->asConfigGpu());
Brian Salomondcf0ab02017-03-20 11:10:21 -0400136 REPORTER_ASSERT(reporter, configs[6]->asConfigGpu()->getSamples() == 8);
Brian Salomon6405e712017-03-20 08:54:16 -0400137 REPORTER_ASSERT(reporter, configs[7]->asConfigGpu()->getSamples() == 4);
138 REPORTER_ASSERT(reporter, !configs[8]->asConfigGpu());
139 REPORTER_ASSERT(reporter, configs[9]->asConfigGpu());
140 REPORTER_ASSERT(reporter, configs[10]->asConfigGpu());
Brian Salomondcf0ab02017-03-20 11:10:21 -0400141 REPORTER_ASSERT(reporter, configs[11]->asConfigGpu()->getSamples() == 8);
Brian Salomon6405e712017-03-20 08:54:16 -0400142 REPORTER_ASSERT(reporter, configs[11]->asConfigGpu()->getUseNVPR());
143 REPORTER_ASSERT(reporter, !configs[11]->asConfigGpu()->getUseDIText());
144 REPORTER_ASSERT(reporter, configs[12]->asConfigGpu()->getSamples() == 4);
kkinnunen3e980c32015-12-23 01:33:00 -0800145 REPORTER_ASSERT(reporter, configs[12]->asConfigGpu()->getUseNVPR());
cdaltonc28afdb2016-03-29 20:05:07 -0700146 REPORTER_ASSERT(reporter, !configs[12]->asConfigGpu()->getUseDIText());
Brian Salomondcf0ab02017-03-20 11:10:21 -0400147 REPORTER_ASSERT(reporter, configs[13]->asConfigGpu()->getSamples() == 8);
kkinnunen3e980c32015-12-23 01:33:00 -0800148 REPORTER_ASSERT(reporter, configs[13]->asConfigGpu()->getUseNVPR());
Brian Salomon6405e712017-03-20 08:54:16 -0400149 REPORTER_ASSERT(reporter, configs[13]->asConfigGpu()->getUseDIText());
150 REPORTER_ASSERT(reporter, configs[14]->asConfigGpu()->getSamples() == 4);
cdaltonc28afdb2016-03-29 20:05:07 -0700151 REPORTER_ASSERT(reporter, configs[14]->asConfigGpu()->getUseNVPR());
152 REPORTER_ASSERT(reporter, configs[14]->asConfigGpu()->getUseDIText());
Brian Salomon6405e712017-03-20 08:54:16 -0400153 REPORTER_ASSERT(reporter, !configs[15]->asConfigGpu());
kkinnunen3e980c32015-12-23 01:33:00 -0800154 REPORTER_ASSERT(reporter, !configs[16]->asConfigGpu());
155 REPORTER_ASSERT(reporter, !configs[17]->asConfigGpu());
156 REPORTER_ASSERT(reporter, !configs[18]->asConfigGpu());
Brian Salomon6405e712017-03-20 08:54:16 -0400157 REPORTER_ASSERT(reporter, !configs[23]->asConfigGpu());
158 REPORTER_ASSERT(reporter, configs[24]->asConfigGpu()->getColorType() == kRGBA_F16_SkColorType);
159 REPORTER_ASSERT(reporter, configs[24]->asConfigGpu()->getColorSpace());
160 REPORTER_ASSERT(reporter, configs[24]->asConfigGpu()->getColorSpace()->gammaIsLinear());
Brian Osman36703d92017-12-12 14:09:31 -0500161 const SkMatrix44* srgbXYZ = srgbColorSpace->toXYZD50();
raftias94888332016-10-18 10:02:51 -0700162 SkASSERT(srgbXYZ);
Brian Osman36703d92017-12-12 14:09:31 -0500163 const SkMatrix44* config25XYZ = configs[24]->asConfigGpu()->getColorSpace()->toXYZD50();
raftias94888332016-10-18 10:02:51 -0700164 SkASSERT(config25XYZ);
165 REPORTER_ASSERT(reporter, *config25XYZ == *srgbXYZ);
Brian Salomon6405e712017-03-20 08:54:16 -0400166 REPORTER_ASSERT(reporter, configs[25]->asConfigGpu()->getColorType() == kRGBA_8888_SkColorType);
167 REPORTER_ASSERT(reporter, configs[25]->asConfigGpu()->getColorSpace() == srgbColorSpace.get());
Brian Salomonf06c3582017-12-07 14:34:36 -0500168 REPORTER_ASSERT(reporter, configs[32]->asConfigGpu()->getColorType() == kRGBA_F16_SkColorType);
169 REPORTER_ASSERT(reporter, configs[32]->asConfigGpu()->getColorSpace());
170 REPORTER_ASSERT(reporter, configs[32]->asConfigGpu()->getColorSpace()->gammaIsLinear());
Brian Osman36703d92017-12-12 14:09:31 -0500171 const SkMatrix44* config41XYZ = configs[32]->asConfigGpu()->getColorSpace()->toXYZD50();
Brian Salomon6405e712017-03-20 08:54:16 -0400172 SkASSERT(config41XYZ);
173 REPORTER_ASSERT(reporter, *config41XYZ != *srgbXYZ);
Brian Salomonf06c3582017-12-07 14:34:36 -0500174 REPORTER_ASSERT(reporter, configs[33]->asConfigGpu()->getColorType() == kRGBA_F16_SkColorType);
175 REPORTER_ASSERT(reporter, configs[33]->asConfigGpu()->getColorSpace());
176 REPORTER_ASSERT(reporter, configs[33]->asConfigGpu()->getColorSpace()->gammaIsLinear());
Brian Osman36703d92017-12-12 14:09:31 -0500177 REPORTER_ASSERT(reporter, *configs[33]->asConfigGpu()->getColorSpace()->toXYZD50() !=
178 *srgbColorSpace->toXYZD50());
csmartdaltone0d36292016-07-29 08:14:20 -0700179 REPORTER_ASSERT(reporter, configs[34]->asConfigGpu()->getContextType() ==
180 GrContextFactory::kGL_ContextType);
Brian Salomonf06c3582017-12-07 14:34:36 -0500181 REPORTER_ASSERT(reporter, SkToBool(configs[34]->asConfigGpu()->getContextOverrides() &
182 SkCommandLineConfigGpu::ContextOverrides::kAvoidStencilBuffers));
csmartdaltone0d36292016-07-29 08:14:20 -0700183 REPORTER_ASSERT(reporter, configs[35]->asConfigGpu()->getContextType() ==
Brian Salomonf06c3582017-12-07 14:34:36 -0500184 GrContextFactory::kMock_ContextType);
Brian Salomon6405e712017-03-20 08:54:16 -0400185 REPORTER_ASSERT(reporter, configs[19]->asConfigGpu());
halcanary3c4521a2016-04-04 12:14:46 -0700186 REPORTER_ASSERT(reporter, configs[20]->asConfigGpu());
kkinnunen3e980c32015-12-23 01:33:00 -0800187 REPORTER_ASSERT(reporter, configs[21]->asConfigGpu());
Brian Salomonf06c3582017-12-07 14:34:36 -0500188 REPORTER_ASSERT(reporter, configs[37]->asConfigGpu()->getContextType() ==
Brian Salomonce5ee602017-07-17 11:31:31 -0400189 GrContextFactory::kGL_ContextType);
Brian Salomonf06c3582017-12-07 14:34:36 -0500190 REPORTER_ASSERT(reporter, configs[37]->asConfigGpu()->getColorType() == kARGB_4444_SkColorType);
191 REPORTER_ASSERT(reporter, configs[37]->asConfigGpu()->getAlphaType() == kPremul_SkAlphaType);
192 REPORTER_ASSERT(reporter, configs[38]->asConfigGpu()->getContextType() ==
Brian Salomonce5ee602017-07-17 11:31:31 -0400193 GrContextFactory::kGL_ContextType);
Brian Salomonf06c3582017-12-07 14:34:36 -0500194 REPORTER_ASSERT(reporter, configs[38]->asConfigGpu()->getColorType() == kRGB_565_SkColorType);
195 REPORTER_ASSERT(reporter, configs[38]->asConfigGpu()->getAlphaType() == kOpaque_SkAlphaType);
Brian Salomon6405e712017-03-20 08:54:16 -0400196 REPORTER_ASSERT(reporter, !configs[22]->asConfigGpu());
Brian Salomon6405e712017-03-20 08:54:16 -0400197 REPORTER_ASSERT(reporter, configs[26]->asConfigGpu());
bsalomonb8797bb2016-04-05 08:49:38 -0700198 REPORTER_ASSERT(reporter, configs[27]->asConfigGpu());
Brian Salomon6405e712017-03-20 08:54:16 -0400199 REPORTER_ASSERT(reporter, configs[27]->asConfigGpu()->getSamples() == 4);
200 REPORTER_ASSERT(reporter, configs[27]->asConfigGpu()->getUseNVPR());
bsalomonb8797bb2016-04-05 08:49:38 -0700201 REPORTER_ASSERT(reporter, configs[28]->asConfigGpu());
202 REPORTER_ASSERT(reporter, configs[28]->asConfigGpu()->getSamples() == 4);
203 REPORTER_ASSERT(reporter, configs[28]->asConfigGpu()->getUseNVPR());
Brian Salomon6405e712017-03-20 08:54:16 -0400204 REPORTER_ASSERT(reporter, configs[28]->asConfigGpu()->getUseDIText());
bsalomonb8797bb2016-04-05 08:49:38 -0700205 REPORTER_ASSERT(reporter, configs[29]->asConfigGpu());
Brian Salomon6405e712017-03-20 08:54:16 -0400206 REPORTER_ASSERT(reporter, configs[29]->asConfigGpu()->getColorType() == kRGBA_8888_SkColorType);
207 REPORTER_ASSERT(reporter, configs[29]->asConfigGpu()->getColorSpace() == srgbColorSpace.get());
bsalomonb8797bb2016-04-05 08:49:38 -0700208 REPORTER_ASSERT(reporter, configs[30]->asConfigGpu());
Brian Salomon6405e712017-03-20 08:54:16 -0400209 REPORTER_ASSERT(reporter, configs[30]->asConfigGpu()->getSamples() == 4);
Brian Salomonf06c3582017-12-07 14:34:36 -0500210 REPORTER_ASSERT(reporter, configs[39]->asConfigGpu());
211 REPORTER_ASSERT(reporter, configs[39]->asConfigGpu()->getTestThreading());
bsalomondc0fcd42016-04-11 14:21:33 -0700212#ifdef SK_VULKAN
Brian Salomon6405e712017-03-20 08:54:16 -0400213 REPORTER_ASSERT(reporter, configs[31]->asConfigGpu());
bsalomondc0fcd42016-04-11 14:21:33 -0700214#endif
kkinnunen3e980c32015-12-23 01:33:00 -0800215#endif
216}
217
218DEF_TEST(ParseConfigs_ExtendedGpuConfigsCorrect, reporter) {
219 SkCommandLineFlags::StringArray config1 = make_string_array({
Brian Salomon6405e712017-03-20 08:54:16 -0400220 "gpu[api=gl,nvpr=true,dit=false]",
bsalomon11abd8d2016-10-14 08:13:48 -0700221 "gpu[api=angle_d3d9_es2]",
222 "gpu[api=angle_gl_es3]",
bsalomon808ecbb2016-09-28 12:40:22 -0700223 "gpu[api=mesa,samples=77]",
224 "gpu[dit=true,api=commandbuffer]",
bsalomon808ecbb2016-09-28 12:40:22 -0700225 "gpu[api=gles]",
226 "gpu[api=gl]",
227 "gpu[api=vulkan]",
Greg Daniel2811aa22017-07-13 15:34:56 -0400228 "gpu[api=metal]",
Brian Salomon8fe24272017-07-07 12:56:11 -0400229 "gpu[api=mock]",
kkinnunen3e980c32015-12-23 01:33:00 -0800230 });
231
232 SkCommandLineConfigArray configs;
233 ParseConfigs(config1, &configs);
234 REPORTER_ASSERT(reporter, configs.count() == config1.count());
235 for (int i = 0; i < config1.count(); ++i) {
236 REPORTER_ASSERT(reporter, configs[i]->getTag().equals(config1[i]));
237 }
238#if SK_SUPPORT_GPU
239 REPORTER_ASSERT(reporter, configs[0]->asConfigGpu()->getContextType() ==
Brian Salomon6405e712017-03-20 08:54:16 -0400240 GrContextFactory::kGL_ContextType);
kkinnunen3e980c32015-12-23 01:33:00 -0800241 REPORTER_ASSERT(reporter, configs[0]->asConfigGpu()->getUseNVPR());
kkinnunene3c2f802015-12-29 08:57:32 -0800242 REPORTER_ASSERT(reporter, !configs[0]->asConfigGpu()->getUseDIText());
kkinnunen3e980c32015-12-23 01:33:00 -0800243 REPORTER_ASSERT(reporter, configs[0]->asConfigGpu()->getSamples() == 0);
kkinnunen3e980c32015-12-23 01:33:00 -0800244 REPORTER_ASSERT(reporter, configs[1]->asConfigGpu()->getContextType() ==
bsalomon11abd8d2016-10-14 08:13:48 -0700245 GrContextFactory::kANGLE_D3D9_ES2_ContextType);
246 REPORTER_ASSERT(reporter, configs[1]->asConfigGpu());
kkinnunen3e980c32015-12-23 01:33:00 -0800247 REPORTER_ASSERT(reporter, configs[2]->asConfigGpu()->getContextType() ==
bsalomon11abd8d2016-10-14 08:13:48 -0700248 GrContextFactory::kANGLE_GL_ES3_ContextType);
249 REPORTER_ASSERT(reporter, configs[2]->asConfigGpu());
kkinnunen3e980c32015-12-23 01:33:00 -0800250 REPORTER_ASSERT(reporter, !configs[3]->asConfigGpu());
kkinnunen3e980c32015-12-23 01:33:00 -0800251 REPORTER_ASSERT(reporter, configs[4]->asConfigGpu()->getContextType() ==
bsalomon85b4b532016-04-05 11:06:27 -0700252 GrContextFactory::kCommandBuffer_ContextType);
kkinnunen3e980c32015-12-23 01:33:00 -0800253 REPORTER_ASSERT(reporter, configs[5]->asConfigGpu()->getContextType() ==
Brian Salomon6405e712017-03-20 08:54:16 -0400254 GrContextFactory::kGLES_ContextType);
kkinnunen3e980c32015-12-23 01:33:00 -0800255 REPORTER_ASSERT(reporter, !configs[5]->asConfigGpu()->getUseNVPR());
256 REPORTER_ASSERT(reporter, !configs[5]->asConfigGpu()->getUseDIText());
257 REPORTER_ASSERT(reporter, configs[5]->asConfigGpu()->getSamples() == 0);
258 REPORTER_ASSERT(reporter, configs[6]->asConfigGpu()->getContextType() ==
Brian Salomon6405e712017-03-20 08:54:16 -0400259 GrContextFactory::kGL_ContextType);
kkinnunen3e980c32015-12-23 01:33:00 -0800260 REPORTER_ASSERT(reporter, !configs[6]->asConfigGpu()->getUseNVPR());
261 REPORTER_ASSERT(reporter, !configs[6]->asConfigGpu()->getUseDIText());
262 REPORTER_ASSERT(reporter, configs[6]->asConfigGpu()->getSamples() == 0);
bsalomondc0fcd42016-04-11 14:21:33 -0700263#ifdef SK_VULKAN
Brian Salomon6405e712017-03-20 08:54:16 -0400264 REPORTER_ASSERT(reporter, configs[7]->asConfigGpu()->getContextType() ==
bsalomondc0fcd42016-04-11 14:21:33 -0700265 GrContextFactory::kVulkan_ContextType);
266 REPORTER_ASSERT(reporter, !configs[7]->asConfigGpu()->getUseNVPR());
267 REPORTER_ASSERT(reporter, !configs[7]->asConfigGpu()->getUseDIText());
268 REPORTER_ASSERT(reporter, configs[7]->asConfigGpu()->getSamples() == 0);
269#endif
Greg Daniel2811aa22017-07-13 15:34:56 -0400270#ifdef SK_METAL
Brian Salomon8fe24272017-07-07 12:56:11 -0400271 REPORTER_ASSERT(reporter, configs[8]->asConfigGpu()->getContextType() ==
Greg Daniel2811aa22017-07-13 15:34:56 -0400272 GrContextFactory::kMetal_ContextType);
273 REPORTER_ASSERT(reporter, !configs[8]->asConfigGpu()->getUseNVPR());
274 REPORTER_ASSERT(reporter, !configs[8]->asConfigGpu()->getUseDIText());
275 REPORTER_ASSERT(reporter, configs[8]->asConfigGpu()->getSamples() == 0);
276#endif
277 REPORTER_ASSERT(reporter, configs[9]->asConfigGpu()->getContextType() ==
Brian Salomon8fe24272017-07-07 12:56:11 -0400278 GrContextFactory::kMock_ContextType);
kkinnunen3e980c32015-12-23 01:33:00 -0800279#endif
280}
281
282DEF_TEST(ParseConfigs_ExtendedGpuConfigsIncorrect, reporter) {
283 SkCommandLineFlags::StringArray config1 = make_string_array({
Brian Salomon6405e712017-03-20 08:54:16 -0400284 "gpu[api=gl,nvpr=1]", // Number as bool.
bsalomon808ecbb2016-09-28 12:40:22 -0700285 "gpu[api=gl,]", // Trailing in comma.
bsalomon11abd8d2016-10-14 08:13:48 -0700286 "gpu[api=angle_glu]", // Unknown api.
bsalomon808ecbb2016-09-28 12:40:22 -0700287 "gpu[api=,samples=0]", // Empty api.
Brian Salomon6405e712017-03-20 08:54:16 -0400288 "gpu[api=gl,samples=true]", // Value true as a number.
289 "gpu[api=gl,samples=0,samples=0]", // Duplicate option key.
290 "gpu[,api=gl,samples=0]", // Leading comma.
bsalomon808ecbb2016-09-28 12:40:22 -0700291 "gpu[samples=54", // Missing closing parenthesis.
kkinnunen3e980c32015-12-23 01:33:00 -0800292 ",,",
Brian Salomon6405e712017-03-20 08:54:16 -0400293 "gpu[]", // Missing required api specifier
294 "gpu[samples=4]", // Missing required api specifier
bsalomon808ecbb2016-09-28 12:40:22 -0700295 "gpu[", // Missing bracket.
kkinnunen3e980c32015-12-23 01:33:00 -0800296 "samples=54" // No backend.
bsalomon808ecbb2016-09-28 12:40:22 -0700297 "gpu[nvpr=true ]", // Space.
kkinnunen3e980c32015-12-23 01:33:00 -0800298 });
299
300 SkCommandLineConfigArray configs;
301 ParseConfigs(config1, &configs);
302 REPORTER_ASSERT(reporter, configs.count() == config1.count());
303 for (int i = 0; i < config1.count(); ++i) {
304 REPORTER_ASSERT(reporter, configs[i]->getTag().equals(config1[i]));
305 REPORTER_ASSERT(reporter, configs[i]->getBackend().equals(config1[i]));
306#if SK_SUPPORT_GPU
307 REPORTER_ASSERT(reporter, !configs[i]->asConfigGpu());
308#endif
309 }
310}
311
kkinnunen3e980c32015-12-23 01:33:00 -0800312DEF_TEST(ParseConfigs_ExtendedGpuConfigsSurprises, reporter) {
313 // These just list explicitly some properties of the system.
314 SkCommandLineFlags::StringArray config1 = make_string_array({
315 // Options are not canonized -> two same configs have a different tag.
Brian Salomon6405e712017-03-20 08:54:16 -0400316 "gpu[api=gl,nvpr=true,dit=true]", "gpu[api=gl,dit=true,nvpr=true]",
317 "gpu[api=debuggl]", "gpu[api=gl]", "gpu[api=gles]", ""
318 "gpu[api=gl]", "gpu[api=gl,samples=0]", "gpu[api=gles,samples=0]"
kkinnunen3e980c32015-12-23 01:33:00 -0800319 });
320 SkCommandLineConfigArray configs;
321 ParseConfigs(config1, &configs);
322 REPORTER_ASSERT(reporter, configs.count() == config1.count());
323 for (int i = 0; i < config1.count(); ++i) {
324 REPORTER_ASSERT(reporter, configs[i]->getTag().equals(config1[i]));
325#if SK_SUPPORT_GPU
326 REPORTER_ASSERT(reporter, configs[i]->getBackend().equals("gpu"));
327 REPORTER_ASSERT(reporter, configs[i]->asConfigGpu());
328#else
329 REPORTER_ASSERT(reporter, configs[i]->getBackend().equals(config1[i]));
330#endif
331 }
332}
Mike Klein2af5d682017-04-13 12:24:53 -0400333
334#if SK_SUPPORT_GPU
kkinnunen3e980c32015-12-23 01:33:00 -0800335DEF_TEST(ParseConfigs_ViaParsing, reporter) {
336 SkCommandLineFlags::StringArray config1 = make_string_array({
337 "a-b-c-8888",
338 "zz-qq-gpu",
bsalomon11abd8d2016-10-14 08:13:48 -0700339 "a-angle_gl_es2"
kkinnunen3e980c32015-12-23 01:33:00 -0800340 });
341
342 SkCommandLineConfigArray configs;
343 ParseConfigs(config1, &configs);
344 const struct {
345 const char* backend;
346 const char* vias[3];
347 } expectedConfigs[] = {
348 {"8888", {"a", "b", "c"}},
349 {"gpu", {"zz", "qq", nullptr}},
bsalomon11abd8d2016-10-14 08:13:48 -0700350 {"gpu", { "a", nullptr, nullptr }}
kkinnunen3e980c32015-12-23 01:33:00 -0800351 };
352 for (int i = 0; i < config1.count(); ++i) {
353 REPORTER_ASSERT(reporter, configs[i]->getTag().equals(config1[i]));
354 REPORTER_ASSERT(reporter, configs[i]->getBackend().equals(expectedConfigs[i].backend));
355 for (int j = 0; j < static_cast<int>(SK_ARRAY_COUNT(expectedConfigs[i].vias)); ++j) {
356 if (!expectedConfigs[i].vias[j]) {
357 REPORTER_ASSERT(reporter, configs[i]->getViaParts().count() == j);
358 break;
359 }
360 REPORTER_ASSERT(reporter,
361 configs[i]->getViaParts()[j].equals(expectedConfigs[i].vias[j]));
362 }
363 }
364}
Mike Klein2af5d682017-04-13 12:24:53 -0400365#endif
kkinnunen3e980c32015-12-23 01:33:00 -0800366
367DEF_TEST(ParseConfigs_ViaParsingExtendedForm, reporter) {
368 SkCommandLineFlags::StringArray config1 = make_string_array({
bsalomon808ecbb2016-09-28 12:40:22 -0700369 "zz-qq-gpu[api=gles]",
bsalomon11abd8d2016-10-14 08:13:48 -0700370 "abc-nbc-cbs-gpu[api=angle_d3d9_es2,samples=1]",
Brian Salomon6405e712017-03-20 08:54:16 -0400371 "a-gpu[api=gl",
372 "abc-def-angle_gl_es2[api=gles]",
kkinnunen3e980c32015-12-23 01:33:00 -0800373 });
374
375 SkCommandLineConfigArray configs;
376 ParseConfigs(config1, &configs);
377 const struct {
378 const char* backend;
379 const char* vias[3];
380 } expectedConfigs[] = {
381#if SK_SUPPORT_GPU
382 {"gpu", {"zz", "qq", nullptr}},
bsalomon11abd8d2016-10-14 08:13:48 -0700383 {"gpu", {"abc", "nbc", "cbs"}},
kkinnunen3e980c32015-12-23 01:33:00 -0800384#else
bsalomon808ecbb2016-09-28 12:40:22 -0700385 {"gpu[api=gles]", {"zz", "qq", nullptr}},
bsalomon11abd8d2016-10-14 08:13:48 -0700386 {"gpu[api=angle_d3d9_es2,samples=1]", {"abc", "nbc", "cbs"}},
kkinnunen3e980c32015-12-23 01:33:00 -0800387#endif
Brian Salomon6405e712017-03-20 08:54:16 -0400388 {"gpu[api=gl", {"a", nullptr, nullptr}}, // Missing bracket makes this is not extended
389 // form but via still works as expected.
390 {"angle_gl_es2[api=gles]", {"abc", "def", nullptr}} // This is not extended form.
391 // angle_gl_es2 is an api type not a
392 // backend.
kkinnunen3e980c32015-12-23 01:33:00 -0800393 };
394 for (int i = 0; i < config1.count(); ++i) {
395 REPORTER_ASSERT(reporter, configs[i]->getTag().equals(config1[i]));
396 REPORTER_ASSERT(reporter, configs[i]->getBackend().equals(expectedConfigs[i].backend));
397 for (int j = 0; j < static_cast<int>(SK_ARRAY_COUNT(expectedConfigs[i].vias)); ++j) {
398 if (!expectedConfigs[i].vias[j]) {
399 REPORTER_ASSERT(reporter, configs[i]->getViaParts().count() ==
400 static_cast<int>(j));
401 break;
402 }
403 REPORTER_ASSERT(reporter,
404 configs[i]->getViaParts()[j].equals(expectedConfigs[i].vias[j]));
405 }
406 }
407#if SK_SUPPORT_GPU
408 REPORTER_ASSERT(reporter, configs[0]->asConfigGpu());
bsalomon11abd8d2016-10-14 08:13:48 -0700409 REPORTER_ASSERT(reporter, configs[1]->asConfigGpu());
kkinnunen3e980c32015-12-23 01:33:00 -0800410 REPORTER_ASSERT(reporter, !configs[2]->asConfigGpu());
bsalomon11abd8d2016-10-14 08:13:48 -0700411 REPORTER_ASSERT(reporter, !configs[3]->asConfigGpu());
kkinnunen3e980c32015-12-23 01:33:00 -0800412#endif
413}