1 // Copyright 2020 The Android Open Source Project
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14
15 #include "android/opengl/gpuinfo.h"
16
17 #include "android/base/testing/TestSystem.h"
18 #include "android/base/testing/TestTempDir.h"
19
20 #include <gtest/gtest.h>
21
22 static const char win_noinstalleddrivers[] =
23 "\r\n"
24 "\r\n"
25 "AcceleratorCapabilities=\r\n"
26 "AdapterCompatibility=RealVNC\r\n"
27 "AdapterDACType=\r\n"
28 "AdapterRAM=\r\n"
29 "Availability=8\r\n"
30 "CapabilityDescriptions=\r\n"
31 "Caption=VNC Mirror Driver\r\n"
32 "ColorTableEntries=\r\n"
33 "ConfigManagerErrorCode=0\r\n"
34 "ConfigManagerUserConfig=FALSE\r\n"
35 "CreationClassName=Win32_VideoController\r\n"
36 "CurrentBitsPerPixel=\r\n"
37 "CurrentHorizontalResolution=\r\n"
38 "CurrentNumberOfColors=\r\n"
39 "CurrentNumberOfColumns=\r\n"
40 "CurrentNumberOfRows=\r\n"
41 "CurrentRefreshRate=\r\n"
42 "CurrentScanMode=\r\n"
43 "CurrentVerticalResolution=\r\n"
44 "Description=VNC Mirror Driver\r\n"
45 "DeviceID=VideoController1\r\n"
46 "DeviceSpecificPens=\r\n"
47 "DitherType=\r\n"
48 "DriverDate=20080314000000.000000-000\r\n"
49 "DriverVersion=1.8.0.0\r\n"
50 "ErrorCleared=\r\n"
51 "ErrorDescription=\r\n"
52 "ICMIntent=\r\n"
53 "ICMMethod=\r\n"
54 "InfFilename=oem24.inf\r\n"
55 "InfSection=vncmirror\r\n"
56 "InstallDate=\r\n"
57 "InstalledDisplayDrivers=\r\n"
58 "LastErrorCode=\r\n"
59 "MaxMemorySupported=\r\n"
60 "MaxNumberControlled=\r\n"
61 "MaxRefreshRate=\r\n"
62 "MinRefreshRate=\r\n"
63 "Monochrome=FALSE\r\n"
64 "Name=VNC Mirror Driver\r\n"
65 "NumberOfColorPlanes=\r\n"
66 "NumberOfVideoPages=\r\n"
67 "PNPDeviceID=ROOT\\DISPLAY\\0000\r\n"
68 "PowerManagementCapabilities=\r\n"
69 "PowerManagementSupported=\r\n"
70 "ProtocolSupported=\r\n"
71 "ReservedSystemPaletteEntries=\r\n"
72 "SpecificationVersion=\r\n"
73 "Status=Degraded\r\n"
74 "StatusInfo=\r\n"
75 "SystemCreationClassName=Win32_ComputerSystem\r\n"
76 "SystemName=ANDREW-PC\r\n"
77 "SystemPaletteEntries=\r\n"
78 "TimeOfLastReset=\r\n"
79 "VideoArchitecture=5\r\n"
80 "VideoMemoryType=2\r\n"
81 "VideoMode=\r\n"
82 "VideoModeDescription=\r\n"
83 "VideoProcessor=\r\n"
84 "\r\n"
85 "\r\n"
86 "AcceleratorCapabilities=\r\n"
87 "AdapterCompatibility=NVIDIA\r\n"
88 "AdapterDACType=Integrated RAMDAC\r\n"
89 "AdapterRAM=2147483648\r\n"
90 "Availability=3\r\n"
91 "CapabilityDescriptions=\r\n"
92 "Caption=NVIDIA GeForce GTX 660M \r\n"
93 "ColorTableEntries=\r\n"
94 "ConfigManagerErrorCode=0\r\n"
95 "ConfigManagerUserConfig=FALSE\r\n"
96 "CreationClassName=Win32_VideoController\r\n"
97 "CurrentBitsPerPixel=32\r\n"
98 "CurrentHorizontalResolution=1600\r\n"
99 "CurrentNumberOfColors=4294967296\r\n"
100 "CurrentNumberOfColumns=0\r\n"
101 "CurrentNumberOfRows=0\r\n"
102 "CurrentRefreshRate=60\r\n"
103 "CurrentScanMode=4\r\n"
104 "CurrentVerticalResolution=900\r\n"
105 "Description=NVIDIA GeForce GTX 660M \r\n"
106 "DeviceID=VideoController2\r\n"
107 "DeviceSpecificPens=\r\n"
108 "DitherType=0\r\n"
109 "DriverDate=20160321000000.000000-000\r\n"
110 "DriverVersion=10.18.13.6472\r\n"
111 "ErrorCleared=\r\n"
112 "ErrorDescription=\r\n"
113 "ICMIntent=\r\n"
114 "ICMMethod=\r\n"
115 "InfFilename=oem65.inf\r\n"
116 "InfSection=Section031\r\n"
117 "InstallDate=\r\n"
118 "InstalledDisplayDrivers=nvd3dumx.dll,nvwgf2umx.dll,nvwgf2umx.dll,nvwgf2umx.dll,nvd3dum,nvwgf2um,nvwgf2um,nvwgf2um\r\n"
119 "LastErrorCode=\r\n"
120 "MaxMemorySupported=\r\n"
121 "MaxNumberControlled=\r\n"
122 "MaxRefreshRate=60\r\n"
123 "MinRefreshRate=60\r\n"
124 "Monochrome=FALSE\r\n"
125 "Name=NVIDIA GeForce GTX 660M \r\n"
126 "NumberOfColorPlanes=\r\n"
127 "NumberOfVideoPages=\r\n"
128 "PNPDeviceID=PCI\\VEN_10DE&DEV_0FD4&SUBSYS_21151043&REV_A1\\4&169534F2&0&0008\r\n"
129 "PowerManagementCapabilities=\r\n"
130 "PowerManagementSupported=\r\n"
131 "ProtocolSupported=\r\n"
132 "ReservedSystemPaletteEntries=\r\n"
133 "SpecificationVersion=\r\n"
134 "Status=OK\r\n"
135 "StatusInfo=\r\n"
136 "SystemCreationClassName=Win32_ComputerSystem\r\n"
137 "SystemName=ANDREW-PC\r\n"
138 "SystemPaletteEntries=\r\n"
139 "TimeOfLastReset=\r\n"
140 "VideoArchitecture=5\r\n"
141 "VideoMemoryType=2\r\n"
142 "VideoMode=\r\n"
143 "VideoModeDescription=1600 x 900 x 4294967296 colors\r\n"
144 "VideoProcessor=GeForce GTX 660M\r\n";
145
146 static const char win_single_gpu[] =
147 "\r\n"
148 "\r\n"
149 "AcceleratorCapabilities=\r\n"
150 "AdapterCompatibility=NVIDIA\r\n"
151 "AdapterDACType=Integrated RAMDAC\r\n"
152 "AdapterRAM=1073741824\r\n"
153 "Availability=3\r\n"
154 "CapabilityDescriptions=\r\n"
155 "Caption=NVIDIA Quadro K600\r\n"
156 "ColorTableEntries=\r\n"
157 "ConfigManagerErrorCode=0\r\n"
158 "ConfigManagerUserConfig=FALSE\r\n"
159 "CreationClassName=Win32_VideoController\r\n"
160 "CurrentBitsPerPixel=32\r\n"
161 "CurrentHorizontalResolution=2560\r\n"
162 "CurrentNumberOfColors=4294967296\r\n"
163 "CurrentNumberOfColumns=0\r\n"
164 "CurrentNumberOfRows=0\r\n"
165 "CurrentRefreshRate=59\r\n"
166 "CurrentScanMode=4\r\n"
167 "CurrentVerticalResolution=1600\r\n"
168 "Description=NVIDIA Quadro K600\r\n"
169 "DeviceID=VideoController1\r\n"
170 "DeviceSpecificPens=\r\n"
171 "DitherType=0\r\n"
172 "DriverDate=20130830000000.000000-000\r\n"
173 "DriverVersion=9.18.13.2086\r\n"
174 "ErrorCleared=\r\n"
175 "ErrorDescription=\r\n"
176 "ICMIntent=\r\n"
177 "ICMMethod=\r\n"
178 "InfFilename=oem39.inf\r\n"
179 "InfSection=Section078\r\n"
180 "InstallDate=\r\n"
181 "InstalledDisplayDrivers=nvd3dumx.dll,nvwgf2umx.dll,nvwgf2umx.dll,nvd3dum,nvwgf2um,nvwgf2um\r\n"
182 "LastErrorCode=\r\n"
183 "MaxMemorySupported=\r\n"
184 "MaxNumberControlled=\r\n"
185 "MaxRefreshRate=60\r\n"
186 "MinRefreshRate=50\r\n"
187 "Monochrome=FALSE\r\n"
188 "Name=NVIDIA Quadro K600\r\n"
189 "NumberOfColorPlanes=\r\n"
190 "NumberOfVideoPages=\r\n"
191 "PNPDeviceID=PCI\\VEN_10DE&DEV_0FFA&SUBSYS_094B103C&REV_A1\\4&16C9E9F9&0&0010\r\n"
192 "PowerManagementCapabilities=\r\n"
193 "PowerManagementSupported=\r\n"
194 "ProtocolSupported=\r\n"
195 "ReservedSystemPaletteEntries=\r\n"
196 "SpecificationVersion=\r\n"
197 "Status=OK\r\n"
198 "StatusInfo=\r\n"
199 "SystemCreationClassName=Win32_ComputerSystem\r\n"
200 "SystemPaletteEntries=\r\n"
201 "TimeOfLastReset=\r\n"
202 "VideoArchitecture=5\r\n"
203 "VideoMemoryType=2\r\n"
204 "VideoMode=\r\n"
205 "VideoModeDescription=2560 x 1600 x 4294967296 colors\r\n"
206 "VideoProcessor=Quadro K600\r\n";
207
208 static const char win_dual_gpu[] =
209 "AcceleratorCapabilities=\r\n"
210 "AdapterCompatibility=Advanced Micro Devices, Inc.\r\n"
211 "AdapterDACType=Internal DAC(400MHz)\r\n"
212 "AdapterRAM=4293918720\r\n"
213 "Availability=8\r\n"
214 "CapabilityDescriptions=\r\n"
215 "Caption=AMD Radeon (TM) R5 M335\r\n"
216 "ColorTableEntries=\r\n"
217 "ConfigManagerErrorCode=0\r\n"
218 "ConfigManagerUserConfig=FALSE\r\n"
219 "CreationClassName=Win32_VideoController\r\n"
220 "CurrentBitsPerPixel=\r\n"
221 "CurrentHorizontalResolution=\r\n"
222 "CurrentNumberOfColors=\r\n"
223 "CurrentNumberOfColumns=\r\n"
224 "CurrentNumberOfRows=\r\n"
225 "CurrentRefreshRate=\r\n"
226 "CurrentScanMode=\r\n"
227 "CurrentVerticalResolution=\r\n"
228 "Description=AMD Radeon (TM) R5 M335\r\n"
229 "DeviceID=VideoController1\r\n"
230 "DeviceSpecificPens=\r\n"
231 "DitherType=\r\n"
232 "DriverDate=20151204000000.000000-000\r\n"
233 "DriverVersion=15.300.1025.1001\r\n"
234 "ErrorCleared=\r\n"
235 "ErrorDescription=\r\n"
236 "ICMIntent=\r\n"
237 "ICMMethod=\r\n"
238 "InfFilename=oem27.inf\r\n"
239 "InfSection=ati2mtag_R503\r\n"
240 "InstallDate=\r\n"
241 "InstalledDisplayDrivers=aticfx64.dll,aticfx64.dll,aticfx64.dll,amdxc64.dll,aticfx32,aticfx32,aticfx32,amdxc32,atiumd64.dll,atidxx64.dll,atidxx64.dll,atiumdag,atidxx32,atidxx32,atiumdva,atiumd6a.cap,atitmm64.dll\r\n"
242 "LastErrorCode=\r\n"
243 "MaxMemorySupported=\r\n"
244 "MaxNumberControlled=\r\n"
245 "MaxRefreshRate=\r\n"
246 "MinRefreshRate=\r\n"
247 "Monochrome=FALSE\r\n"
248 "Name=AMD Radeon (TM) R5 M335\r\n"
249 "NumberOfColorPlanes=\r\n"
250 "NumberOfVideoPages=\r\n"
251 "PNPDeviceID=PCI\\VEN_1002&DEV_6660&SUBSYS_06B21028&REV_81\\4&2370267D&0&00E0\r\n"
252 "PowerManagementCapabilities=\r\n"
253 "PowerManagementSupported=\r\n"
254 "ProtocolSupported=\r\n"
255 "ReservedSystemPaletteEntries=\r\n"
256 "SpecificationVersion=\r\n"
257 "Status=OK\r\n"
258 "StatusInfo=\r\n"
259 "SystemCreationClassName=Win32_ComputerSystem\r\n"
260 "SystemName=DESKTOP-Q7BG33N\r\n"
261 "SystemPaletteEntries=\r\n"
262 "TimeOfLastReset=\r\n"
263 "VideoArchitecture=5\r\n"
264 "VideoMemoryType=2\r\n"
265 "VideoMode=\r\n"
266 "VideoModeDescription=\r\n"
267 "VideoProcessor=AMD Radeon Graphics Processor (0x6660)\r\n"
268 "\r\n"
269 "\r\n"
270 "AcceleratorCapabilities=\r\n"
271 "AdapterCompatibility=Intel Corporation\r\n"
272 "AdapterDACType=Internal\r\n"
273 "AdapterRAM=1073741824\r\n"
274 "Availability=3\r\n"
275 "CapabilityDescriptions=\r\n"
276 "Caption=Intel(R) HD Graphics 520\r\n"
277 "ColorTableEntries=\r\n"
278 "ConfigManagerErrorCode=0\r\n"
279 "ConfigManagerUserConfig=FALSE\r\n"
280 "CreationClassName=Win32_VideoController\r\n"
281 "CurrentBitsPerPixel=32\r\n"
282 "CurrentHorizontalResolution=1920\r\n"
283 "CurrentNumberOfColors=4294967296\r\n"
284 "CurrentNumberOfColumns=0\r\n"
285 "CurrentNumberOfRows=0\r\n"
286 "CurrentRefreshRate=59\r\n"
287 "CurrentScanMode=4\r\n"
288 "CurrentVerticalResolution=1080\r\n"
289 "Description=Intel(R) HD Graphics 520\r\n"
290 "DeviceID=VideoController2\r\n"
291 "DeviceSpecificPens=\r\n"
292 "DitherType=0\r\n"
293 "DriverDate=20150831000000.000000-000\r\n"
294 "DriverVersion=10.18.15.4281\r\n"
295 "ErrorCleared=\r\n"
296 "ErrorDescription=\r\n"
297 "ICMIntent=\r\n"
298 "ICMMethod=\r\n"
299 "InfFilename=oem6.inf\r\n"
300 "InfSection=iSKLD_w10\r\n"
301 "InstallDate=\r\n"
302 "InstalledDisplayDrivers=igdumdim64.dll,igd10iumd64.dll,igd10iumd64.dll,igd12umd64.dll,igdumdim32,igd10iumd32,igd10iumd32,igd12umd32\r\n"
303 "LastErrorCode=\r\n"
304 "MaxMemorySupported=\r\n"
305 "MaxNumberControlled=\r\n"
306 "MaxRefreshRate=59\r\n"
307 "MinRefreshRate=48\r\n"
308 "Monochrome=FALSE\r\n"
309 "Name=Intel(R) HD Graphics 520\r\n"
310 "NumberOfColorPlanes=\r\n"
311 "NumberOfVideoPages=\r\n"
312 "PNPDeviceID=PCI\\VEN_8086&DEV_1916&SUBSYS_06B21028&REV_07\\3&11583659&0&10\r\n"
313 "PowerManagementCapabilities=\r\n"
314 "PowerManagementSupported=\r\n"
315 "ProtocolSupported=\r\n"
316 "ReservedSystemPaletteEntries=\r\n"
317 "SpecificationVersion=\r\n"
318 "Status=OK\r\n"
319 "StatusInfo=\r\n"
320 "SystemCreationClassName=Win32_ComputerSystem\r\n"
321 "SystemPaletteEntries=\r\n"
322 "TimeOfLastReset=\r\n"
323 "VideoArchitecture=5\r\n"
324 "VideoMemoryType=2\r\n"
325 "VideoMode=\r\n"
326 "VideoModeDescription=1920 x 1080 x 4294967296 colors\r\n"
327 "VideoProcessor=Intel(R) HD Graphics Family\r\n";
328
329 static const char linux_single_gpu[] =
330 "Rev: 05\n"
331 "\n"
332 "Device: 04:00.0\n"
333 "Class: VGA compatible controller [0300]\n"
334 "Vendor: NVIDIA Corporation [10de]\n"
335 "Device: GM107GL [Quadro K2200] [13ba]\n"
336 "SVendor: Hewlett-Packard Company [103c]\n"
337 "SDevice: Device [1097]\n"
338 "PhySlot: 2\n"
339 "Rev: a2\n"
340 "\n"
341 "Device: 04:00.1\n"
342 "\n"
343 "\n"
344 "\n"
345 "\n"
346 "OpenGL version string: 4.4.0 NVIDIA 340.96\n"
347 "OpenGL shading language version string: 4.40 NVIDIA via Cg compiler\n"
348 "OpenGL context flags: (none)\n"
349 "\n";
350
351 static const char linux_mesadri[] =
352 "Rev: 05\n"
353 "\n"
354 "Device: 04:00.0\n"
355 "Class: VGA compatible controller [0300]\n"
356 "Vendor: NVIDIA Corporation [10de]\n"
357 "Device: GM107GL [Quadro K2200] [13ba]\n"
358 "SVendor: Hewlett-Packard Company [103c]\n"
359 "SDevice: Device [1097]\n"
360 "PhySlot: 2\n"
361 "Rev: a2\n"
362 "\n"
363 "Device: 04:00.1\n"
364 "\n"
365 "\n"
366 "\n"
367 "\n"
368 "OpenGL version string: 3.0 Mesa 10.4.2 (git-)\n"
369 "\n";
370
371 static const char linux_2[] =
372 "Rev: 05\n"
373 "\n"
374 "Device: 04:00.0\n"
375 "Class: VGA compatible controller [0300]\n"
376 "Vendor: NVIDIA Corporation [10de]\n"
377 "Device: GM107GL [Quadro K2200] [13ba]\n"
378 "SVendor: Hewlett-Packard Company [103c]\n"
379 "SDevice: Device [1097]\n"
380 "PhySlot: 2\n"
381 "Rev: a2\n"
382 "\n"
383 "Device: 04:00.1\n"
384 "\n"
385 "\n"
386 "\n"
387 "\n"
388 "\n";
389
390 #ifdef _WIN32
391
TEST(parse_gpu_info_list_windows,WinNoInstalledDriversContinueCase)392 TEST(parse_gpu_info_list_windows, WinNoInstalledDriversContinueCase) {
393 std::string contents(win_noinstalleddrivers);
394
395 GpuInfoList gpulist;
396 parse_gpu_info_list_windows(contents, &gpulist);
397
398 EXPECT_EQ(2, (int)gpulist.infos.size());
399 }
400
TEST(parse_gpu_info_list_windows,SingleGpu)401 TEST(parse_gpu_info_list_windows, SingleGpu) {
402 std::string contents(win_single_gpu);
403
404 GpuInfoList gpulist;
405 parse_gpu_info_list_windows(contents, &gpulist);
406
407 EXPECT_TRUE(gpulist.infos.size() == 1);
408
409 GpuInfo& nvidia_info = gpulist.infos[0];
410
411 EXPECT_FALSE(nvidia_info.current_gpu);
412 EXPECT_STREQ("10de", nvidia_info.make.c_str());
413 EXPECT_STREQ("NVIDIA Quadro K600", nvidia_info.model.c_str());
414 EXPECT_STREQ("0ffa", nvidia_info.device_id.c_str());
415 EXPECT_TRUE(nvidia_info.revision_id.empty());
416 EXPECT_STREQ("9.18.13.2086", nvidia_info.version.c_str());
417 EXPECT_TRUE(nvidia_info.renderer.empty());
418
419 EXPECT_TRUE(nvidia_info.dlls.size() == 8);
420 EXPECT_STREQ("nvd3dumx.dll", nvidia_info.dlls[0].c_str());
421 EXPECT_STREQ("nvwgf2umx.dll", nvidia_info.dlls[1].c_str());
422 EXPECT_STREQ("nvwgf2umx.dll", nvidia_info.dlls[2].c_str());
423 EXPECT_STREQ("nvd3dum", nvidia_info.dlls[3].c_str());
424 EXPECT_STREQ("nvwgf2um", nvidia_info.dlls[4].c_str());
425 EXPECT_STREQ("nvwgf2um", nvidia_info.dlls[5].c_str());
426 EXPECT_STREQ("nvoglv32.dll", nvidia_info.dlls[6].c_str());
427 EXPECT_STREQ("nvoglv64.dll", nvidia_info.dlls[7].c_str());
428 }
429
TEST(parse_gpu_info_list_windows,DualGpu)430 TEST(parse_gpu_info_list_windows, DualGpu) {
431 std::string contents(win_dual_gpu);
432
433 GpuInfoList gpulist;
434 parse_gpu_info_list_windows(contents, &gpulist);
435
436 EXPECT_TRUE(gpulist.infos.size() == 2);
437
438 GpuInfo& ati_info = gpulist.infos[0];
439 EXPECT_FALSE(ati_info.current_gpu);
440 EXPECT_STREQ("1002", ati_info.make.c_str());
441 EXPECT_STREQ("AMD Radeon (TM) R5 M335", ati_info.model.c_str());
442 EXPECT_STREQ("6660", ati_info.device_id.c_str());
443 EXPECT_TRUE(ati_info.revision_id.empty());
444 EXPECT_STREQ("15.300.1025.1001", ati_info.version.c_str());
445 EXPECT_TRUE(ati_info.renderer.empty());
446
447 EXPECT_TRUE(ati_info.dlls.size() == 19);
448 EXPECT_STREQ("aticfx64.dll", ati_info.dlls[0].c_str());
449 EXPECT_STREQ("aticfx64.dll", ati_info.dlls[1].c_str());
450 EXPECT_STREQ("aticfx64.dll", ati_info.dlls[2].c_str());
451 EXPECT_STREQ("amdxc64.dll", ati_info.dlls[3].c_str());
452 EXPECT_STREQ("aticfx32", ati_info.dlls[4].c_str());
453 EXPECT_STREQ("aticfx32", ati_info.dlls[5].c_str());
454 EXPECT_STREQ("aticfx32", ati_info.dlls[6].c_str());
455 EXPECT_STREQ("amdxc32", ati_info.dlls[7].c_str());
456 EXPECT_STREQ("atiumd64.dll", ati_info.dlls[8].c_str());
457 EXPECT_STREQ("atidxx64.dll", ati_info.dlls[9].c_str());
458 EXPECT_STREQ("atidxx64.dll", ati_info.dlls[10].c_str());
459 EXPECT_STREQ("atiumdag", ati_info.dlls[11].c_str());
460 EXPECT_STREQ("atidxx32", ati_info.dlls[12].c_str());
461 EXPECT_STREQ("atidxx32", ati_info.dlls[13].c_str());
462 EXPECT_STREQ("atiumdva", ati_info.dlls[14].c_str());
463 EXPECT_STREQ("atiumd6a.cap", ati_info.dlls[15].c_str());
464 EXPECT_STREQ("atitmm64.dll", ati_info.dlls[16].c_str());
465 EXPECT_STREQ("atioglxx.dll", ati_info.dlls[17].c_str());
466 EXPECT_STREQ("atig6txx.dll", ati_info.dlls[18].c_str());
467
468 GpuInfo& intel_info = gpulist.infos[1];
469 EXPECT_FALSE(intel_info.current_gpu);
470 EXPECT_STREQ("8086", intel_info.make.c_str());
471 EXPECT_STREQ("Intel(R) HD Graphics 520", intel_info.model.c_str());
472 EXPECT_STREQ("1916", intel_info.device_id.c_str());
473 EXPECT_TRUE(intel_info.revision_id.empty());
474 EXPECT_STREQ("10.18.15.4281", intel_info.version.c_str());
475 EXPECT_TRUE(intel_info.renderer.empty());
476
477 EXPECT_TRUE(intel_info.dlls.size() == 8);
478 EXPECT_STREQ("igdumdim64.dll", intel_info.dlls[0].c_str());
479 EXPECT_STREQ("igd10iumd64.dll", intel_info.dlls[1].c_str());
480 EXPECT_STREQ("igd10iumd64.dll", intel_info.dlls[2].c_str());
481 EXPECT_STREQ("igd12umd64.dll", intel_info.dlls[3].c_str());
482 EXPECT_STREQ("igdumdim32", intel_info.dlls[4].c_str());
483 EXPECT_STREQ("igd10iumd32", intel_info.dlls[5].c_str());
484 EXPECT_STREQ("igd10iumd32", intel_info.dlls[6].c_str());
485 EXPECT_STREQ("igd12umd32", intel_info.dlls[7].c_str());
486 }
487
488 #elif defined(__linux__)
489
TEST(parse_gpu_info_list_linux,EmptyStr)490 TEST(parse_gpu_info_list_linux, EmptyStr) {
491 std::string contents;
492
493 GpuInfoList gpulist;
494 parse_gpu_info_list_linux(contents, &gpulist);
495
496 EXPECT_TRUE(gpulist.infos.size() == 0);
497 }
498
TEST(parse_gpu_info_list_linux,NoGlxInfo)499 TEST(parse_gpu_info_list_linux, NoGlxInfo) {
500 std::string contents(linux_2);
501
502 GpuInfoList gpulist;
503 parse_gpu_info_list_linux(contents, &gpulist);
504
505 EXPECT_TRUE(gpulist.infos.size() == 1);
506 }
507
TEST(parse_gpu_info_list_linux,Nolspci)508 TEST(parse_gpu_info_list_linux, Nolspci) {
509 std::string contents("\n");
510
511 GpuInfoList gpulist;
512 parse_gpu_info_list_linux(contents, &gpulist);
513
514 EXPECT_TRUE(gpulist.infos.size() == 0);
515 }
516
TEST(parse_gpu_info_list_linux,SingleGpu)517 TEST(parse_gpu_info_list_linux, SingleGpu) {
518 std::string contents(linux_single_gpu);
519
520 GpuInfoList gpulist;
521 parse_gpu_info_list_linux(contents, &gpulist);
522
523 EXPECT_TRUE(gpulist.infos.size() == 1);
524 GpuInfo& nvidia_info = gpulist.infos[0];
525 EXPECT_FALSE(nvidia_info.current_gpu);
526 EXPECT_STREQ("10de", nvidia_info.make.c_str());
527 EXPECT_TRUE(nvidia_info.model.empty());
528 EXPECT_STREQ("13ba", nvidia_info.device_id.c_str());
529 EXPECT_TRUE(nvidia_info.revision_id.empty());
530 EXPECT_TRUE(nvidia_info.version.empty());
531 EXPECT_STREQ("OpenGL version string: 4.4.0 NVIDIA 340.96",
532 nvidia_info.renderer.c_str());
533 EXPECT_TRUE(nvidia_info.dlls.empty());
534 }
535
TEST(parse_gpu_info_list_linux,MesaDRI)536 TEST(parse_gpu_info_list_linux, MesaDRI) {
537 std::string contents(linux_mesadri);
538
539 GpuInfoList gpulist;
540 parse_gpu_info_list_linux(contents, &gpulist);
541
542 EXPECT_TRUE(gpulist.infos.size() == 1);
543 GpuInfo& nvidia_info = gpulist.infos[0];
544 EXPECT_FALSE(nvidia_info.current_gpu);
545 EXPECT_STREQ("10de", nvidia_info.make.c_str());
546 EXPECT_TRUE(nvidia_info.model.empty());
547 EXPECT_STREQ("13ba", nvidia_info.device_id.c_str());
548 EXPECT_TRUE(nvidia_info.revision_id.empty());
549 EXPECT_TRUE(nvidia_info.version.empty());
550 EXPECT_STREQ("OpenGL version string: 3.0 Mesa 10.4.2 (git-)",
551 nvidia_info.renderer.c_str());
552 EXPECT_TRUE(nvidia_info.dlls.empty());
553 }
554
555
TEST(gpuinfo_query_blacklist,testBlacklist_Pos)556 TEST(gpuinfo_query_blacklist, testBlacklist_Pos) {
557 const BlacklistEntry test_list[] = {
558 {"10de", nullptr, "13ba", nullptr, nullptr, nullptr, nullptr}
559 };
560
561 int test_list_len = sizeof(test_list) / sizeof(BlacklistEntry);
562
563 std::string contents(linux_single_gpu);
564 GpuInfoList gpulist;
565 parse_gpu_info_list_linux(contents, &gpulist);
566 bool on_blacklist = gpuinfo_query_blacklist(&gpulist,
567 test_list,
568 test_list_len);
569
570 EXPECT_TRUE(on_blacklist);
571 }
572
TEST(gpuinfo_query_blacklist,testBlacklist_Neg)573 TEST(gpuinfo_query_blacklist, testBlacklist_Neg) {
574 const BlacklistEntry test_list[] = {
575 {"10dd", nullptr, "13ba", nullptr, nullptr, nullptr, nullptr},
576 {"ATI", "NVIDIA Quadro K600", nullptr, nullptr, nullptr, nullptr, nullptr},
577 {"ASDF", "Intel Iris Pro", nullptr, nullptr, nullptr, nullptr, nullptr}
578 };
579
580 int test_list_len = sizeof(test_list) / sizeof(BlacklistEntry);
581
582 std::string contents(linux_2);
583 GpuInfoList gpulist;
584 parse_gpu_info_list_linux(contents, &gpulist);
585 bool on_blacklist = gpuinfo_query_blacklist(&gpulist,
586 test_list,
587 test_list_len);
588
589 EXPECT_FALSE(on_blacklist);
590 }
591
592 #endif // __linux__
593