gpu_test_config_unittest.cc 9.3 KB

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