OLD | NEW |
| (Empty) |
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 "content/test/gpu/gpu_test_config.h" | |
6 | |
7 #include "base/logging.h" | |
8 #include "base/sys_info.h" | |
9 #include "content/test/gpu/gpu_test_expectations_parser.h" | |
10 #include "gpu/config/gpu_info.h" | |
11 #include "gpu/config/gpu_info_collector.h" | |
12 | |
13 namespace { | |
14 | |
15 GPUTestConfig::OS GetCurrentOS() { | |
16 #if defined(OS_CHROMEOS) | |
17 return GPUTestConfig::kOsChromeOS; | |
18 #elif defined(OS_LINUX) || defined(OS_OPENBSD) | |
19 return GPUTestConfig::kOsLinux; | |
20 #elif defined(OS_WIN) | |
21 int32 major_version = 0; | |
22 int32 minor_version = 0; | |
23 int32 bugfix_version = 0; | |
24 base::SysInfo::OperatingSystemVersionNumbers( | |
25 &major_version, &minor_version, &bugfix_version); | |
26 if (major_version == 5) | |
27 return GPUTestConfig::kOsWinXP; | |
28 if (major_version == 6 && minor_version == 0) | |
29 return GPUTestConfig::kOsWinVista; | |
30 if (major_version == 6 && minor_version == 1) | |
31 return GPUTestConfig::kOsWin7; | |
32 if (major_version == 6 && minor_version == 2) | |
33 return GPUTestConfig::kOsWin8; | |
34 #elif defined(OS_MACOSX) | |
35 int32 major_version = 0; | |
36 int32 minor_version = 0; | |
37 int32 bugfix_version = 0; | |
38 base::SysInfo::OperatingSystemVersionNumbers( | |
39 &major_version, &minor_version, &bugfix_version); | |
40 if (major_version == 10) { | |
41 switch (minor_version) { | |
42 case 5: | |
43 return GPUTestConfig::kOsMacLeopard; | |
44 case 6: | |
45 return GPUTestConfig::kOsMacSnowLeopard; | |
46 case 7: | |
47 return GPUTestConfig::kOsMacLion; | |
48 case 8: | |
49 return GPUTestConfig::kOsMacMountainLion; | |
50 } | |
51 } | |
52 #elif defined(OS_ANDROID) | |
53 return GPUTestConfig::kOsAndroid; | |
54 #endif | |
55 return GPUTestConfig::kOsUnknown; | |
56 } | |
57 | |
58 } // namespace anonymous | |
59 | |
60 GPUTestConfig::GPUTestConfig() | |
61 : validate_gpu_info_(true), | |
62 os_(kOsUnknown), | |
63 gpu_device_id_(0), | |
64 build_type_(kBuildTypeUnknown) { | |
65 } | |
66 | |
67 GPUTestConfig::~GPUTestConfig() { | |
68 } | |
69 | |
70 void GPUTestConfig::set_os(int32 os) { | |
71 DCHECK_EQ(0, os & ~(kOsAndroid | kOsWin | kOsMac | kOsLinux | kOsChromeOS)); | |
72 os_ = os; | |
73 } | |
74 | |
75 void GPUTestConfig::AddGPUVendor(uint32 gpu_vendor) { | |
76 DCHECK_NE(0u, gpu_vendor); | |
77 for (size_t i = 0; i < gpu_vendor_.size(); ++i) | |
78 DCHECK_NE(gpu_vendor_[i], gpu_vendor); | |
79 gpu_vendor_.push_back(gpu_vendor); | |
80 } | |
81 | |
82 void GPUTestConfig::set_gpu_device_id(uint32 id) { | |
83 gpu_device_id_ = id; | |
84 } | |
85 | |
86 void GPUTestConfig::set_build_type(int32 build_type) { | |
87 DCHECK_EQ(0, build_type & ~(kBuildTypeRelease | kBuildTypeDebug)); | |
88 build_type_ = build_type; | |
89 } | |
90 | |
91 bool GPUTestConfig::IsValid() const { | |
92 if (!validate_gpu_info_) | |
93 return true; | |
94 if (gpu_device_id_ != 0 && (gpu_vendor_.size() != 1 || gpu_vendor_[0] == 0)) | |
95 return false; | |
96 return true; | |
97 } | |
98 | |
99 bool GPUTestConfig::OverlapsWith(const GPUTestConfig& config) const { | |
100 DCHECK(IsValid()); | |
101 DCHECK(config.IsValid()); | |
102 if (config.os_ != kOsUnknown && os_ != kOsUnknown && | |
103 (os_ & config.os_) == 0) | |
104 return false; | |
105 if (config.gpu_vendor_.size() > 0 && gpu_vendor_.size() > 0) { | |
106 bool shared = false; | |
107 for (size_t i = 0; i < config.gpu_vendor_.size() && !shared; ++i) { | |
108 for (size_t j = 0; j < gpu_vendor_.size(); ++j) { | |
109 if (config.gpu_vendor_[i] == gpu_vendor_[j]) { | |
110 shared = true; | |
111 break; | |
112 } | |
113 } | |
114 } | |
115 if (!shared) | |
116 return false; | |
117 } | |
118 if (config.gpu_device_id_ != 0 && gpu_device_id_ != 0 && | |
119 gpu_device_id_ != config.gpu_device_id_) | |
120 return false; | |
121 if (config.build_type_ != kBuildTypeUnknown && | |
122 build_type_ != kBuildTypeUnknown && | |
123 (build_type_ & config.build_type_) == 0) | |
124 return false; | |
125 return true; | |
126 } | |
127 | |
128 void GPUTestConfig::DisableGPUInfoValidation() { | |
129 validate_gpu_info_ = false; | |
130 } | |
131 | |
132 void GPUTestConfig::ClearGPUVendor() { | |
133 gpu_vendor_.clear(); | |
134 } | |
135 | |
136 GPUTestBotConfig::~GPUTestBotConfig() { | |
137 } | |
138 | |
139 void GPUTestBotConfig::AddGPUVendor(uint32 gpu_vendor) { | |
140 DCHECK_EQ(0u, GPUTestConfig::gpu_vendor().size()); | |
141 GPUTestConfig::AddGPUVendor(gpu_vendor); | |
142 } | |
143 | |
144 bool GPUTestBotConfig::SetGPUInfo(const gpu::GPUInfo& gpu_info) { | |
145 DCHECK(validate_gpu_info_); | |
146 if (gpu_info.gpu.device_id == 0 || gpu_info.gpu.vendor_id == 0) | |
147 return false; | |
148 ClearGPUVendor(); | |
149 AddGPUVendor(gpu_info.gpu.vendor_id); | |
150 set_gpu_device_id(gpu_info.gpu.device_id); | |
151 return true; | |
152 } | |
153 | |
154 bool GPUTestBotConfig::IsValid() const { | |
155 switch (os()) { | |
156 case kOsWinXP: | |
157 case kOsWinVista: | |
158 case kOsWin7: | |
159 case kOsWin8: | |
160 case kOsMacLeopard: | |
161 case kOsMacSnowLeopard: | |
162 case kOsMacLion: | |
163 case kOsMacMountainLion: | |
164 case kOsLinux: | |
165 case kOsChromeOS: | |
166 case kOsAndroid: | |
167 break; | |
168 default: | |
169 return false; | |
170 } | |
171 if (validate_gpu_info_) { | |
172 if (gpu_vendor().size() != 1 || gpu_vendor()[0] == 0) | |
173 return false; | |
174 if (gpu_device_id() == 0) | |
175 return false; | |
176 } | |
177 switch (build_type()) { | |
178 case kBuildTypeRelease: | |
179 case kBuildTypeDebug: | |
180 break; | |
181 default: | |
182 return false; | |
183 } | |
184 return true; | |
185 } | |
186 | |
187 bool GPUTestBotConfig::Matches(const GPUTestConfig& config) const { | |
188 DCHECK(IsValid()); | |
189 DCHECK(config.IsValid()); | |
190 if (config.os() != kOsUnknown && (os() & config.os()) == 0) | |
191 return false; | |
192 if (config.gpu_vendor().size() > 0) { | |
193 bool contained = false; | |
194 for (size_t i = 0; i < config.gpu_vendor().size(); ++i) { | |
195 if (config.gpu_vendor()[i] == gpu_vendor()[0]) { | |
196 contained = true; | |
197 break; | |
198 } | |
199 } | |
200 if (!contained) | |
201 return false; | |
202 } | |
203 if (config.gpu_device_id() != 0 && | |
204 gpu_device_id() != config.gpu_device_id()) | |
205 return false; | |
206 if (config.build_type() != kBuildTypeUnknown && | |
207 (build_type() & config.build_type()) == 0) | |
208 return false; | |
209 return true; | |
210 } | |
211 | |
212 bool GPUTestBotConfig::Matches(const std::string& config_data) const { | |
213 GPUTestExpectationsParser parser; | |
214 GPUTestConfig config; | |
215 | |
216 if (!parser.ParseConfig(config_data, &config)) | |
217 return false; | |
218 return Matches(config); | |
219 } | |
220 | |
221 bool GPUTestBotConfig::LoadCurrentConfig(const gpu::GPUInfo* gpu_info) { | |
222 bool rt; | |
223 if (gpu_info == NULL) { | |
224 gpu::GPUInfo my_gpu_info; | |
225 gpu::GpuIDResult result; | |
226 result = gpu::CollectGpuID(&my_gpu_info.gpu.vendor_id, | |
227 &my_gpu_info.gpu.device_id); | |
228 if (result == gpu::kGpuIDNotSupported) { | |
229 DisableGPUInfoValidation(); | |
230 rt = true; | |
231 } else { | |
232 rt = SetGPUInfo(my_gpu_info); | |
233 } | |
234 } else { | |
235 rt = SetGPUInfo(*gpu_info); | |
236 } | |
237 set_os(GetCurrentOS()); | |
238 if (os() == kOsUnknown) | |
239 rt = false; | |
240 #if defined(NDEBUG) | |
241 set_build_type(kBuildTypeRelease); | |
242 #else | |
243 set_build_type(kBuildTypeDebug); | |
244 #endif | |
245 return rt; | |
246 } | |
247 | |
248 // static | |
249 bool GPUTestBotConfig::CurrentConfigMatches(const std::string& config_data) { | |
250 GPUTestBotConfig my_config; | |
251 if (!my_config.LoadCurrentConfig(NULL)) | |
252 return false; | |
253 return my_config.Matches(config_data); | |
254 } | |
255 | |
256 // static | |
257 bool GPUTestBotConfig::CurrentConfigMatches( | |
258 const std::vector<std::string>& configs) { | |
259 GPUTestBotConfig my_config; | |
260 if (!my_config.LoadCurrentConfig(NULL)) | |
261 return false; | |
262 for (size_t i = 0 ; i < configs.size(); ++i) { | |
263 if (my_config.Matches(configs[i])) | |
264 return true; | |
265 } | |
266 return false; | |
267 } | |
268 | |
OLD | NEW |