1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "gpu/config/gpu_info.h"
6 #include "gpu/config/gpu_test_config.h"
7 #include "testing/gtest/include/gtest/gtest.h"
8
9 namespace gpu {
10
11 class GPUTestConfigTest : public testing::Test {
12 public:
13 GPUTestConfigTest() = default;
14
15 ~GPUTestConfigTest() override = default;
16
17 protected:
SetUp()18 void SetUp() override {}
19
TearDown()20 void TearDown() override {}
21 };
22
TEST_F(GPUTestConfigTest,EmptyValues)23 TEST_F(GPUTestConfigTest, EmptyValues) {
24 GPUTestConfig config;
25 EXPECT_EQ(GPUTestConfig::kOsUnknown, config.os());
26 EXPECT_EQ(0u, config.gpu_vendor().size());
27 EXPECT_EQ(0u, config.gpu_device_id());
28 EXPECT_EQ(GPUTestConfig::kBuildTypeUnknown, config.build_type());
29 EXPECT_EQ(GPUTestConfig::kAPIUnknown, config.api());
30 EXPECT_EQ(GPUTestConfig::kCommandDecoderUnknown, config.command_decoder());
31 }
32
TEST_F(GPUTestConfigTest,SetGPUInfo)33 TEST_F(GPUTestConfigTest, SetGPUInfo) {
34 GPUInfo gpu_info;
35 gpu_info.gpu.vendor_id = 0x10de;
36 gpu_info.gpu.device_id = 0x0640;
37 GPUTestBotConfig config;
38 EXPECT_TRUE(config.SetGPUInfo(gpu_info));
39 EXPECT_EQ(1u, config.gpu_vendor().size());
40 EXPECT_EQ(gpu_info.gpu.vendor_id, config.gpu_vendor()[0]);
41 EXPECT_EQ(gpu_info.gpu.device_id, config.gpu_device_id());
42
43 gpu_info.gpu.vendor_id = 0x8086;
44 gpu_info.gpu.device_id = 0x0046;
45 EXPECT_TRUE(config.SetGPUInfo(gpu_info));
46 EXPECT_EQ(1u, config.gpu_vendor().size());
47 EXPECT_EQ(gpu_info.gpu.vendor_id, config.gpu_vendor()[0]);
48 EXPECT_EQ(gpu_info.gpu.device_id, config.gpu_device_id());
49 }
50
TEST_F(GPUTestConfigTest,IsValid)51 TEST_F(GPUTestConfigTest, IsValid) {
52 {
53 GPUTestConfig config;
54 config.set_gpu_device_id(0x0640);
55 EXPECT_FALSE(config.IsValid());
56 config.AddGPUVendor(0x10de);
57 EXPECT_TRUE(config.IsValid());
58 }
59
60 {
61 GPUTestBotConfig config;
62 config.set_build_type(GPUTestConfig::kBuildTypeRelease);
63 config.set_os(GPUTestConfig::kOsWin7);
64 config.set_gpu_device_id(0x0640);
65 EXPECT_FALSE(config.IsValid());
66 config.AddGPUVendor(0x10de);
67 EXPECT_TRUE(config.IsValid());
68
69 // Device ID of 0 is valid only on macOS.
70 config.set_gpu_device_id(0);
71 config.set_os(GPUTestConfig::kOsMacBigSur);
72 EXPECT_TRUE(config.IsValid());
73 config.set_os(GPUTestConfig::kOsWin7);
74 EXPECT_FALSE(config.IsValid());
75
76 config.set_gpu_device_id(0x0640);
77 EXPECT_TRUE(config.IsValid());
78
79 config.set_os(GPUTestConfig::kOsWin);
80 EXPECT_FALSE(config.IsValid());
81 config.set_os(GPUTestConfig::kOsWin7 | GPUTestConfig::kOsWinXP);
82 EXPECT_FALSE(config.IsValid());
83 config.set_os(GPUTestConfig::kOsWin7);
84 EXPECT_TRUE(config.IsValid());
85
86 config.set_build_type(GPUTestConfig::kBuildTypeUnknown);
87 EXPECT_FALSE(config.IsValid());
88 config.set_build_type(GPUTestConfig::kBuildTypeRelease);
89 EXPECT_TRUE(config.IsValid());
90 }
91 }
92
TEST_F(GPUTestConfigTest,Matches)93 TEST_F(GPUTestConfigTest, Matches) {
94 GPUTestBotConfig config;
95 config.set_os(GPUTestConfig::kOsWin7);
96 config.set_build_type(GPUTestConfig::kBuildTypeRelease);
97 config.AddGPUVendor(0x10de);
98 config.set_gpu_device_id(0x0640);
99 config.set_api(GPUTestConfig::kAPID3D11);
100 config.set_command_decoder(GPUTestConfig::kCommandDecoderPassthrough);
101 EXPECT_TRUE(config.IsValid());
102
103 { // os matching
104 GPUTestConfig config2;
105 EXPECT_TRUE(config.Matches(config2));
106 config2.set_os(GPUTestConfig::kOsWin);
107 EXPECT_TRUE(config.Matches(config2));
108 config2.set_os(GPUTestConfig::kOsWin7);
109 EXPECT_TRUE(config.Matches(config2));
110 config2.set_os(GPUTestConfig::kOsMac);
111 EXPECT_FALSE(config.Matches(config2));
112 config2.set_os(GPUTestConfig::kOsWin7 | GPUTestConfig::kOsLinux);
113 EXPECT_TRUE(config.Matches(config2));
114 }
115
116 { // gpu vendor matching
117 {
118 GPUTestConfig config2;
119 config2.AddGPUVendor(0x10de);
120 EXPECT_TRUE(config.Matches(config2));
121 config2.AddGPUVendor(0x1004);
122 EXPECT_TRUE(config.Matches(config2));
123 }
124 {
125 GPUTestConfig config2;
126 config2.AddGPUVendor(0x8086);
127 EXPECT_FALSE(config.Matches(config2));
128 }
129 }
130
131 { // build type matching
132 GPUTestConfig config2;
133 config2.set_build_type(GPUTestConfig::kBuildTypeRelease);
134 EXPECT_TRUE(config.Matches(config2));
135 config2.set_build_type(GPUTestConfig::kBuildTypeRelease |
136 GPUTestConfig::kBuildTypeDebug);
137 EXPECT_TRUE(config.Matches(config2));
138 config2.set_build_type(GPUTestConfig::kBuildTypeDebug);
139 EXPECT_FALSE(config.Matches(config2));
140 }
141
142 { // exact matching
143 GPUTestConfig config2;
144 config2.set_os(GPUTestConfig::kOsWin7);
145 config2.set_build_type(GPUTestConfig::kBuildTypeRelease);
146 config2.AddGPUVendor(0x10de);
147 config2.set_gpu_device_id(0x0640);
148 EXPECT_TRUE(config.Matches(config2));
149 config2.set_gpu_device_id(0x0641);
150 EXPECT_FALSE(config.Matches(config2));
151 }
152
153 { // api matching
154 {
155 GPUTestConfig config2;
156 config2.set_api(GPUTestConfig::kAPID3D11);
157 EXPECT_TRUE(config.Matches(config2));
158 config2.set_api(config2.api() | GPUTestConfig::kAPID3D9);
159 EXPECT_TRUE(config.Matches(config2));
160 }
161 {
162 GPUTestConfig config2;
163 config2.set_api(GPUTestConfig::kAPID3D9);
164 EXPECT_FALSE(config.Matches(config2));
165 }
166 }
167 { // command decoder matching
168 {
169 GPUTestConfig config2;
170 config2.set_command_decoder(GPUTestConfig::kCommandDecoderPassthrough);
171 EXPECT_TRUE(config.Matches(config2));
172 }
173 {
174 GPUTestConfig config2;
175 config2.set_command_decoder(GPUTestConfig::kCommandDecoderValidating);
176 EXPECT_FALSE(config.Matches(config2));
177 }
178 }
179 }
180
TEST_F(GPUTestConfigTest,StringMatches)181 TEST_F(GPUTestConfigTest, StringMatches) {
182 GPUTestBotConfig config;
183 config.set_os(GPUTestConfig::kOsWin7);
184 config.set_build_type(GPUTestConfig::kBuildTypeRelease);
185 config.AddGPUVendor(0x10de);
186 config.set_gpu_device_id(0x0640);
187 config.set_api(GPUTestConfig::kAPID3D11);
188 config.set_command_decoder(GPUTestConfig::kCommandDecoderPassthrough);
189 EXPECT_TRUE(config.IsValid());
190
191 EXPECT_TRUE(config.Matches(std::string()));
192
193 // os matching
194 EXPECT_TRUE(config.Matches("WIN"));
195 EXPECT_TRUE(config.Matches("WIN7"));
196 EXPECT_FALSE(config.Matches("MAC"));
197 EXPECT_TRUE(config.Matches("WIN7 LINUX"));
198
199 // gpu vendor matching
200 EXPECT_TRUE(config.Matches("NVIDIA"));
201 EXPECT_TRUE(config.Matches("NVIDIA AMD"));
202 EXPECT_FALSE(config.Matches("INTEL"));
203
204 // build type matching
205 EXPECT_TRUE(config.Matches("RELEASE"));
206 EXPECT_TRUE(config.Matches("RELEASE DEBUG"));
207 EXPECT_FALSE(config.Matches("DEBUG"));
208
209 // exact matching
210 EXPECT_TRUE(config.Matches("WIN7 RELEASE NVIDIA 0X0640"));
211 EXPECT_FALSE(config.Matches("WIN7 RELEASE NVIDIA 0X0641"));
212
213 // api matching
214 EXPECT_TRUE(config.Matches("D3D11"));
215 EXPECT_FALSE(config.Matches("D3D9 OPENGL GLES"));
216
217 // command decoder matching
218 EXPECT_TRUE(config.Matches("PASSTHROUGH"));
219 EXPECT_FALSE(config.Matches("VALIDATING"));
220 }
221
TEST_F(GPUTestConfigTest,OverlapsWith)222 TEST_F(GPUTestConfigTest, OverlapsWith) {
223 { // os
224 // win vs win7
225 GPUTestConfig config;
226 config.set_os(GPUTestConfig::kOsWin);
227 GPUTestConfig config2;
228 config2.set_os(GPUTestConfig::kOsWin7);
229 EXPECT_TRUE(config.OverlapsWith(config2));
230 EXPECT_TRUE(config2.OverlapsWith(config));
231 // win vs win7+linux
232 config2.set_os(GPUTestConfig::kOsWin7 | GPUTestConfig::kOsLinux);
233 EXPECT_TRUE(config.OverlapsWith(config2));
234 EXPECT_TRUE(config2.OverlapsWith(config));
235 // win vs mac
236 config2.set_os(GPUTestConfig::kOsMac);
237 EXPECT_FALSE(config.OverlapsWith(config2));
238 EXPECT_FALSE(config2.OverlapsWith(config));
239 // win vs unknown
240 config2.set_os(GPUTestConfig::kOsUnknown);
241 EXPECT_TRUE(config.OverlapsWith(config2));
242 EXPECT_TRUE(config2.OverlapsWith(config));
243 }
244
245 { // gpu vendor
246 GPUTestConfig config;
247 config.AddGPUVendor(0x10de);
248 // nvidia vs unknown
249 GPUTestConfig config2;
250 EXPECT_TRUE(config.OverlapsWith(config2));
251 EXPECT_TRUE(config2.OverlapsWith(config));
252 // nvidia vs intel
253 config2.AddGPUVendor(0x1086);
254 EXPECT_FALSE(config.OverlapsWith(config2));
255 EXPECT_FALSE(config2.OverlapsWith(config));
256 // nvidia vs nvidia+intel
257 config2.AddGPUVendor(0x10de);
258 EXPECT_TRUE(config.OverlapsWith(config2));
259 EXPECT_TRUE(config2.OverlapsWith(config));
260 }
261
262 { // build type
263 // release vs debug
264 GPUTestConfig config;
265 config.set_build_type(GPUTestConfig::kBuildTypeRelease);
266 GPUTestConfig config2;
267 config2.set_build_type(GPUTestConfig::kBuildTypeDebug);
268 EXPECT_FALSE(config.OverlapsWith(config2));
269 EXPECT_FALSE(config2.OverlapsWith(config));
270 // release vs release+debug
271 config2.set_build_type(GPUTestConfig::kBuildTypeRelease |
272 GPUTestConfig::kBuildTypeDebug);
273 EXPECT_TRUE(config.OverlapsWith(config2));
274 EXPECT_TRUE(config2.OverlapsWith(config));
275 // release vs unknown
276 config2.set_build_type(GPUTestConfig::kBuildTypeUnknown);
277 EXPECT_TRUE(config.OverlapsWith(config2));
278 EXPECT_TRUE(config2.OverlapsWith(config));
279 }
280
281 { // win7 vs nvidia
282 GPUTestConfig config;
283 config.set_os(GPUTestConfig::kOsWin7);
284 GPUTestConfig config2;
285 config2.AddGPUVendor(0x10de);
286 EXPECT_TRUE(config.OverlapsWith(config2));
287 EXPECT_TRUE(config2.OverlapsWith(config));
288 }
289 }
290
TEST_F(GPUTestConfigTest,LoadCurrentConfig)291 TEST_F(GPUTestConfigTest, LoadCurrentConfig) {
292 GPUTestBotConfig config;
293 GPUInfo gpu_info;
294 gpu_info.gpu.vendor_id = 0x10de;
295 gpu_info.gpu.device_id = 0x0640;
296 EXPECT_TRUE(config.LoadCurrentConfig(&gpu_info));
297 EXPECT_TRUE(config.IsValid());
298 }
299
300 } // namespace gpu
301
302