Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(639)

Side by Side Diff: chrome/browser/gpu_blacklist.cc

Issue 6352011: Improve blacklist logic: use more fields (driver_vendor, gl_renderer, ect) fo... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Added histogram improvement. Created 9 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/gpu_blacklist.h" 5 #include "chrome/browser/gpu_blacklist.h"
6 6
7 #include "base/json/json_reader.h" 7 #include "base/json/json_reader.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/string_number_conversions.h" 9 #include "base/string_number_conversions.h"
10 #include "base/string_util.h" 10 #include "base/string_util.h"
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
128 return kOsWin; 128 return kOsWin;
129 else if (os == "macosx") 129 else if (os == "macosx")
130 return kOsMacosx; 130 return kOsMacosx;
131 else if (os == "linux") 131 else if (os == "linux")
132 return kOsLinux; 132 return kOsLinux;
133 else if (os == "any") 133 else if (os == "any")
134 return kOsAny; 134 return kOsAny;
135 return kOsUnknown; 135 return kOsUnknown;
136 } 136 }
137 137
138 GpuBlacklist::StringInfo::StringInfo(const std::string& string_op,
139 const std::string& string_value) {
140 op_ = StringToOp(string_op);
141 value_ = StringToLowerASCII(string_value);
142 }
143
144 GpuBlacklist::StringInfo::~StringInfo() {
145 }
146
147 bool GpuBlacklist::StringInfo::Contains(const std::string& value) const {
148 std::string my_value = StringToLowerASCII(value);
149 switch (op_) {
150 case kContains:
151 return my_value.find_first_of(value_) != std::string::npos;
152 case kBeginWith:
153 return my_value.find_first_of(value_) == 0;
Ken Russell (switch to Gerrit) 2011/01/21 19:57:52 Probably faster to use std::string::compare(0, val
Zhenyao Mo 2011/01/21 21:51:40 Done.
154 case kEndWith:
155 {
156 size_t pos = my_value.find_last_of(value_);
157 if (pos == std::string::npos)
158 return false;
159 return pos + value_.length() == my_value.length();
Ken Russell (switch to Gerrit) 2011/01/21 19:57:52 Faster to use something like std::string::compare(
Zhenyao Mo 2011/01/21 21:51:40 Done.
160 }
161 case kEQ:
162 return value_ == my_value;
163 default:
164 return false;
165 }
166 }
167
168 bool GpuBlacklist::StringInfo::IsValid() const {
169 return op_ != kUnknown;
170 }
171
172 GpuBlacklist::StringInfo::Op GpuBlacklist::StringInfo::StringToOp(
173 const std::string& string_op) {
174 if (string_op == "=")
175 return kEQ;
176 else if (string_op == "contains")
177 return kContains;
178 else if (string_op == "beginwith")
179 return kBeginWith;
180 else if (string_op == "endwith")
181 return kEndWith;
182 return kUnknown;
183 }
184
138 GpuBlacklist::GpuBlacklistEntry* 185 GpuBlacklist::GpuBlacklistEntry*
139 GpuBlacklist::GpuBlacklistEntry::GetGpuBlacklistEntryFromValue( 186 GpuBlacklist::GpuBlacklistEntry::GetGpuBlacklistEntryFromValue(
140 DictionaryValue* value) { 187 DictionaryValue* value) {
141 if (value == NULL) 188 if (value == NULL)
142 return NULL; 189 return NULL;
143 190
144 GpuBlacklistEntry* entry = new GpuBlacklistEntry(); 191 GpuBlacklistEntry* entry = new GpuBlacklistEntry();
145 192
193 std::string id;
194 if (!value->GetString("id", &id) || !entry->SetId(id)) {
195 delete entry;
196 return NULL;
197 }
198
146 DictionaryValue* os_value = NULL; 199 DictionaryValue* os_value = NULL;
147 if (value->GetDictionary("os", &os_value)) { 200 if (value->GetDictionary("os", &os_value)) {
148 std::string os_type; 201 std::string os_type;
149 std::string os_version_op = "any"; 202 std::string os_version_op = "any";
150 std::string os_version_string; 203 std::string os_version_string;
151 std::string os_version_string2; 204 std::string os_version_string2;
152 os_value->GetString("type", &os_type); 205 os_value->GetString("type", &os_type);
153 DictionaryValue* os_version_value = NULL; 206 DictionaryValue* os_version_value = NULL;
154 if (os_value->GetDictionary("version", &os_version_value)) { 207 if (os_value->GetDictionary("version", &os_version_value)) {
155 os_version_value->GetString("op", &os_version_op); 208 os_version_value->GetString("op", &os_version_op);
(...skipping 16 matching lines...) Expand all
172 } 225 }
173 226
174 std::string device_id; 227 std::string device_id;
175 if (value->GetString("device_id", &device_id)) { 228 if (value->GetString("device_id", &device_id)) {
176 if (!entry->SetDeviceId(device_id)) { 229 if (!entry->SetDeviceId(device_id)) {
177 delete entry; 230 delete entry;
178 return NULL; 231 return NULL;
179 } 232 }
180 } 233 }
181 234
235 DictionaryValue* driver_vendor_value = NULL;
236 if (value->GetDictionary("driver_vendor", &driver_vendor_value)) {
237 std::string vendor_op;
238 std::string vendor_value;
239 driver_vendor_value->GetString("op", &vendor_op);
240 driver_vendor_value->GetString("value", &vendor_value);
241 if (!entry->SetDriverVendorInfo(vendor_op, vendor_value)) {
242 delete entry;
243 return NULL;
244 }
245 }
246
182 DictionaryValue* driver_version_value = NULL; 247 DictionaryValue* driver_version_value = NULL;
183 if (value->GetDictionary("driver_version", &driver_version_value)) { 248 if (value->GetDictionary("driver_version", &driver_version_value)) {
184 std::string driver_version_op = "any"; 249 std::string driver_version_op = "any";
185 std::string driver_version_string; 250 std::string driver_version_string;
186 std::string driver_version_string2; 251 std::string driver_version_string2;
187 driver_version_value->GetString("op", &driver_version_op); 252 driver_version_value->GetString("op", &driver_version_op);
188 driver_version_value->GetString("number", &driver_version_string); 253 driver_version_value->GetString("number", &driver_version_string);
189 driver_version_value->GetString("number2", &driver_version_string2); 254 driver_version_value->GetString("number2", &driver_version_string2);
190 if (!entry->SetDriverVersionInfo(driver_version_op, driver_version_string, 255 if (!entry->SetDriverVersionInfo(driver_version_op, driver_version_string,
191 driver_version_string2)) { 256 driver_version_string2)) {
192 delete entry; 257 delete entry;
193 return NULL; 258 return NULL;
194 } 259 }
195 } 260 }
196 261
262 DictionaryValue* gl_renderer_value = NULL;
263 if (value->GetDictionary("gl_renderer", &gl_renderer_value)) {
264 std::string renderer_op;
265 std::string renderer_value;
266 gl_renderer_value->GetString("op", &renderer_op);
267 gl_renderer_value->GetString("value", &renderer_value);
268 if (!entry->SetGlRendererInfo(renderer_op, renderer_value)) {
269 delete entry;
270 return NULL;
271 }
272 }
273
197 ListValue* blacklist_value = NULL; 274 ListValue* blacklist_value = NULL;
198 if (!value->GetList("blacklist", &blacklist_value)) { 275 if (!value->GetList("blacklist", &blacklist_value)) {
199 delete entry; 276 delete entry;
200 return NULL; 277 return NULL;
201 } 278 }
202 std::vector<std::string> blacklist; 279 std::vector<std::string> blacklist;
203 for (size_t i = 0; i < blacklist_value->GetSize(); ++i) { 280 for (size_t i = 0; i < blacklist_value->GetSize(); ++i) {
204 std::string feature; 281 std::string feature;
205 if (blacklist_value->GetString(i, &feature)) { 282 if (blacklist_value->GetString(i, &feature)) {
206 blacklist.push_back(feature); 283 blacklist.push_back(feature);
(...skipping 10 matching lines...) Expand all
217 return entry; 294 return entry;
218 } 295 }
219 296
220 GpuBlacklist::GpuBlacklistEntry::~GpuBlacklistEntry() {} 297 GpuBlacklist::GpuBlacklistEntry::~GpuBlacklistEntry() {}
221 298
222 GpuBlacklist::GpuBlacklistEntry::GpuBlacklistEntry() 299 GpuBlacklist::GpuBlacklistEntry::GpuBlacklistEntry()
223 : vendor_id_(0), 300 : vendor_id_(0),
224 device_id_(0) { 301 device_id_(0) {
225 } 302 }
226 303
304 bool GpuBlacklist::GpuBlacklistEntry::SetId(
305 const std::string& id_string) {
306 id_ = 0;
307 return (base::HexStringToInt(id_string,
308 reinterpret_cast<int*>(&id_)) &&
309 id_ != 0);
310 }
311
227 bool GpuBlacklist::GpuBlacklistEntry::SetOsInfo( 312 bool GpuBlacklist::GpuBlacklistEntry::SetOsInfo(
228 const std::string& os, 313 const std::string& os,
229 const std::string& version_op, 314 const std::string& version_op,
230 const std::string& version_string, 315 const std::string& version_string,
231 const std::string& version_string2) { 316 const std::string& version_string2) {
232 os_info_.reset(new OsInfo(os, version_op, version_string, version_string2)); 317 os_info_.reset(new OsInfo(os, version_op, version_string, version_string2));
233 return os_info_->IsValid(); 318 return os_info_->IsValid();
234 } 319 }
235 320
236 bool GpuBlacklist::GpuBlacklistEntry::SetVendorId( 321 bool GpuBlacklist::GpuBlacklistEntry::SetVendorId(
237 const std::string& vendor_id_string) { 322 const std::string& vendor_id_string) {
238 vendor_id_ = 0; 323 vendor_id_ = 0;
239 return base::HexStringToInt(vendor_id_string, 324 return base::HexStringToInt(vendor_id_string,
240 reinterpret_cast<int*>(&vendor_id_)); 325 reinterpret_cast<int*>(&vendor_id_));
241 } 326 }
242 327
243 bool GpuBlacklist::GpuBlacklistEntry::SetDeviceId( 328 bool GpuBlacklist::GpuBlacklistEntry::SetDeviceId(
244 const std::string& device_id_string) { 329 const std::string& device_id_string) {
245 device_id_ = 0; 330 device_id_ = 0;
246 return base::HexStringToInt(device_id_string, 331 return base::HexStringToInt(device_id_string,
247 reinterpret_cast<int*>(&device_id_)); 332 reinterpret_cast<int*>(&device_id_));
248 } 333 }
249 334
335 bool GpuBlacklist::GpuBlacklistEntry::SetDriverVendorInfo(
336 const std::string& vendor_op,
337 const std::string& vendor_value) {
338 driver_vendor_info_.reset(
339 new StringInfo(vendor_op, vendor_value));
340 return driver_vendor_info_->IsValid();
341 }
342
250 bool GpuBlacklist::GpuBlacklistEntry::SetDriverVersionInfo( 343 bool GpuBlacklist::GpuBlacklistEntry::SetDriverVersionInfo(
251 const std::string& version_op, 344 const std::string& version_op,
252 const std::string& version_string, 345 const std::string& version_string,
253 const std::string& version_string2) { 346 const std::string& version_string2) {
254 driver_version_info_.reset( 347 driver_version_info_.reset(
255 new VersionInfo(version_op, version_string, version_string2)); 348 new VersionInfo(version_op, version_string, version_string2));
256 return driver_version_info_->IsValid(); 349 return driver_version_info_->IsValid();
257 } 350 }
258 351
352 bool GpuBlacklist::GpuBlacklistEntry::SetGlRendererInfo(
353 const std::string& renderer_op,
354 const std::string& renderer_value) {
355 gl_renderer_info_.reset(
356 new StringInfo(renderer_op, renderer_value));
357 return gl_renderer_info_->IsValid();
358 }
359
259 bool GpuBlacklist::GpuBlacklistEntry::SetBlacklistedFeatures( 360 bool GpuBlacklist::GpuBlacklistEntry::SetBlacklistedFeatures(
260 const std::vector<std::string>& blacklisted_features) { 361 const std::vector<std::string>& blacklisted_features) {
261 size_t size = blacklisted_features.size(); 362 size_t size = blacklisted_features.size();
262 if (size == 0) 363 if (size == 0)
263 return false; 364 return false;
264 uint32 flags = 0; 365 uint32 flags = 0;
265 for (size_t i = 0; i < size; ++i) { 366 for (size_t i = 0; i < size; ++i) {
266 GpuFeatureFlags::GpuFeatureType type = 367 GpuFeatureFlags::GpuFeatureType type =
267 GpuFeatureFlags::StringToGpuFeatureType(blacklisted_features[i]); 368 GpuFeatureFlags::StringToGpuFeatureType(blacklisted_features[i]);
268 switch (type) { 369 switch (type) {
269 case GpuFeatureFlags::kGpuFeatureAccelerated2dCanvas: 370 case GpuFeatureFlags::kGpuFeatureAccelerated2dCanvas:
270 case GpuFeatureFlags::kGpuFeatureAcceleratedCompositing: 371 case GpuFeatureFlags::kGpuFeatureAcceleratedCompositing:
271 case GpuFeatureFlags::kGpuFeatureWebgl: 372 case GpuFeatureFlags::kGpuFeatureWebgl:
272 case GpuFeatureFlags::kGpuFeatureAll: 373 case GpuFeatureFlags::kGpuFeatureAll:
273 flags |= type; 374 flags |= type;
274 break; 375 break;
275 case GpuFeatureFlags::kGpuFeatureUnknown: 376 case GpuFeatureFlags::kGpuFeatureUnknown:
276 return false; 377 return false;
277 } 378 }
278 } 379 }
279 feature_flags_.reset(new GpuFeatureFlags()); 380 feature_flags_.reset(new GpuFeatureFlags());
280 feature_flags_->set_flags(flags); 381 feature_flags_->set_flags(flags);
281 return true; 382 return true;
282 } 383 }
283 384
284 bool GpuBlacklist::GpuBlacklistEntry::Contains( 385 bool GpuBlacklist::GpuBlacklistEntry::Contains(
285 OsType os_type, const Version& os_version, 386 OsType os_type, const Version& os_version,
286 uint32 vendor_id, uint32 device_id, 387 uint32 vendor_id, uint32 device_id,
287 const Version& driver_version) const { 388 const std::string& driver_vendor,
389 const Version& driver_version,
390 const std::string& gl_renderer) const {
288 DCHECK(os_type != kOsAny); 391 DCHECK(os_type != kOsAny);
289 if (os_info_.get() != NULL && !os_info_->Contains(os_type, os_version)) 392 if (os_info_.get() != NULL && !os_info_->Contains(os_type, os_version))
290 return false; 393 return false;
291 if (vendor_id_ != 0 && vendor_id_ != vendor_id) 394 if (vendor_id_ != 0 && vendor_id_ != vendor_id)
292 return false; 395 return false;
293 if (device_id_ != 0 && device_id_ != device_id) 396 if (device_id_ != 0 && device_id_ != device_id)
294 return false; 397 return false;
295 if (driver_version_info_.get() == NULL) 398 if (driver_vendor_info_.get() != NULL &&
296 return true; 399 !driver_vendor_info_->Contains(driver_vendor))
297 return driver_version_info_->Contains(driver_version); 400 return false;
401 if (driver_version_info_.get() != NULL &&
402 !driver_version_info_->Contains(driver_version))
403 return false;
404 if (gl_renderer_info_.get() != NULL &&
405 !gl_renderer_info_->Contains(gl_renderer))
406 return false;
407 return true;
298 } 408 }
299 409
300 GpuBlacklist::OsType GpuBlacklist::GpuBlacklistEntry::GetOsType() const { 410 GpuBlacklist::OsType GpuBlacklist::GpuBlacklistEntry::GetOsType() const {
301 if (os_info_.get() == NULL) 411 if (os_info_.get() == NULL)
302 return kOsUnknown; 412 return kOsUnknown;
303 return os_info_->type(); 413 return os_info_->type();
304 } 414 }
305 415
416 uint32 GpuBlacklist::GpuBlacklistEntry::id() const {
417 return id_;
418 }
419
306 GpuFeatureFlags GpuBlacklist::GpuBlacklistEntry::GetGpuFeatureFlags() const { 420 GpuFeatureFlags GpuBlacklist::GpuBlacklistEntry::GetGpuFeatureFlags() const {
307 return *feature_flags_; 421 return *feature_flags_;
308 } 422 }
309 423
310 GpuBlacklist::GpuBlacklist() { 424 GpuBlacklist::GpuBlacklist() {
311 } 425 }
312 426
313 GpuBlacklist::~GpuBlacklist() { 427 GpuBlacklist::~GpuBlacklist() {
314 Clear(); 428 Clear();
315 } 429 }
316 430
317 bool GpuBlacklist::LoadGpuBlacklist(const std::string& json_context, 431 bool GpuBlacklist::LoadGpuBlacklist(const std::string& json_context,
318 bool current_os_only) { 432 bool current_os_only) {
319 std::vector<GpuBlacklistEntry*> entries; 433 std::vector<GpuBlacklistEntry*> entries;
320 scoped_ptr<Value> root; 434 scoped_ptr<Value> root;
321 root.reset(base::JSONReader::Read(json_context, false)); 435 root.reset(base::JSONReader::Read(json_context, false));
322 if (root.get() == NULL || !root->IsType(Value::TYPE_DICTIONARY)) 436 if (root.get() == NULL || !root->IsType(Value::TYPE_DICTIONARY))
323 return false; 437 return false;
324 438
439 DictionaryValue* root_dictionary = static_cast<DictionaryValue*>(root.get());
440 DCHECK(root_dictionary);
441 std::string version_string;
442 root_dictionary->GetString("version", &version_string);
443 version_.reset(Version::GetVersionFromString(version_string));
444 if (version_.get() == NULL)
445 return false;
446
325 ListValue* list = NULL; 447 ListValue* list = NULL;
326 static_cast<DictionaryValue*>(root.get())->GetList("entries", &list); 448 root_dictionary->GetList("entries", &list);
327 if (list == NULL) 449 if (list == NULL)
328 return false; 450 return false;
329 451
452 uint32 max_entry_id = 0;
330 for (size_t i = 0; i < list->GetSize(); ++i) { 453 for (size_t i = 0; i < list->GetSize(); ++i) {
331 DictionaryValue* list_item = NULL; 454 DictionaryValue* list_item = NULL;
332 bool valid = list->GetDictionary(i, &list_item); 455 bool valid = list->GetDictionary(i, &list_item);
333 if (!valid) 456 if (!valid)
334 break; 457 break;
335 GpuBlacklistEntry* entry = 458 GpuBlacklistEntry* entry =
336 GpuBlacklistEntry::GetGpuBlacklistEntryFromValue(list_item); 459 GpuBlacklistEntry::GetGpuBlacklistEntryFromValue(list_item);
337 if (entry == NULL) 460 if (entry == NULL)
338 break; 461 break;
462 if (entry->id() > max_entry_id)
463 max_entry_id = entry->id();
339 entries.push_back(entry); 464 entries.push_back(entry);
340 } 465 }
341 466
342 if (entries.size() < list->GetSize()) { 467 if (entries.size() < list->GetSize()) {
343 for (size_t i = 0; i < entries.size(); ++i) 468 for (size_t i = 0; i < entries.size(); ++i)
344 delete entries[i]; 469 delete entries[i];
345 return false; 470 return false;
346 } 471 }
347 472
348 Clear(); 473 Clear();
349 // Don't apply GPU blacklist for a non-registered OS. 474 // Don't apply GPU blacklist for a non-registered OS.
350 OsType os_filter = GetOsType(); 475 OsType os_filter = GetOsType();
351 if (os_filter != kOsUnknown) { 476 if (os_filter != kOsUnknown) {
352 for (size_t i = 0; i < entries.size(); ++i) { 477 for (size_t i = 0; i < entries.size(); ++i) {
353 OsType entry_os = entries[i]->GetOsType(); 478 OsType entry_os = entries[i]->GetOsType();
354 if (!current_os_only || 479 if (!current_os_only ||
355 entry_os == kOsAny || entry_os == os_filter) 480 entry_os == kOsAny || entry_os == os_filter)
356 blacklist_.push_back(entries[i]); 481 blacklist_.push_back(entries[i]);
357 else 482 else
358 delete entries[i]; 483 delete entries[i];
359 } 484 }
360 } 485 }
486 max_entry_id_ = max_entry_id;
361 return true; 487 return true;
362 } 488 }
363 489
364 GpuFeatureFlags GpuBlacklist::DetermineGpuFeatureFlags( 490 GpuFeatureFlags GpuBlacklist::DetermineGpuFeatureFlags(
365 GpuBlacklist::OsType os, 491 GpuBlacklist::OsType os,
366 Version* os_version, 492 Version* os_version,
367 const GPUInfo& gpu_info) const { 493 const GPUInfo& gpu_info) {
494 features_.clear();
495 entry_ids_.clear();
368 GpuFeatureFlags flags; 496 GpuFeatureFlags flags;
369 // No need to go through blacklist entries if GPUInfo isn't available. 497 // No need to go through blacklist entries if GPUInfo isn't available.
370 if (gpu_info.progress() == GPUInfo::kUninitialized) 498 if (gpu_info.progress() == GPUInfo::kUninitialized)
371 return flags; 499 return flags;
372 scoped_ptr<Version> driver_version( 500 scoped_ptr<Version> driver_version(
373 Version::GetVersionFromString(gpu_info.driver_version())); 501 Version::GetVersionFromString(gpu_info.driver_version()));
374 if (driver_version.get() == NULL) 502 if (driver_version.get() == NULL)
375 return flags; 503 return flags;
376 504
377 if (os == kOsAny) 505 if (os == kOsAny)
(...skipping 18 matching lines...) Expand all
396 version_string = version_string.substr(0, pos); 524 version_string = version_string.substr(0, pos);
397 #endif 525 #endif
398 my_os_version.reset(Version::GetVersionFromString(version_string)); 526 my_os_version.reset(Version::GetVersionFromString(version_string));
399 os_version = my_os_version.get(); 527 os_version = my_os_version.get();
400 } 528 }
401 DCHECK(os_version != NULL); 529 DCHECK(os_version != NULL);
402 530
403 for (size_t i = 0; i < blacklist_.size(); ++i) { 531 for (size_t i = 0; i < blacklist_.size(); ++i) {
404 if (blacklist_[i]->Contains(os, *os_version, 532 if (blacklist_[i]->Contains(os, *os_version,
405 gpu_info.vendor_id(), gpu_info.device_id(), 533 gpu_info.vendor_id(), gpu_info.device_id(),
406 *driver_version)) { 534 "", // gpu_info.driver_vendor(),
535 *driver_version,
536 "")) { // gpu_info.gl_renderer())) {
407 flags.Combine(blacklist_[i]->GetGpuFeatureFlags()); 537 flags.Combine(blacklist_[i]->GetGpuFeatureFlags());
538 features_.push_back(blacklist_[i]->GetGpuFeatureFlags().flags());
539 entry_ids_.push_back(blacklist_[i]->id());
408 } 540 }
409 } 541 }
410 return flags; 542 return flags;
411 } 543 }
412 544
545 void GpuBlacklist::GetGpuFeatureFlagEntries(
546 GpuFeatureFlags::GpuFeatureType feature,
547 std::vector<uint32>& entry_ids) const {
548 DCHECK(features_.size() == entry_ids_.size());
549 entry_ids.clear();
550 for (size_t i = 0; i < features_.size(); ++i) {
551 if ((feature & features_[i]) != 0)
552 entry_ids.push_back(entry_ids_[i]);
553 }
554 }
555
556 uint32 GpuBlacklist::max_entry_id() const {
557 return max_entry_id_;
558 }
559
560 bool GpuBlacklist::GetVersion(uint16* major, uint16* minor) const {
561 DCHECK(major && minor);
562 *major = 0;
563 *minor = 0;
564 if (version_.get() == NULL)
565 return false;
566 const std::vector<uint16>& components_reference = version_->components();
567 if (components_reference.size() != 2)
568 return false;
569 *major = components_reference[0];
570 *minor = components_reference[1];
571 return true;
572 }
573
413 GpuBlacklist::OsType GpuBlacklist::GetOsType() { 574 GpuBlacklist::OsType GpuBlacklist::GetOsType() {
414 #if defined(OS_WIN) 575 #if defined(OS_WIN)
415 return kOsWin; 576 return kOsWin;
416 #elif defined(OS_LINUX) 577 #elif defined(OS_LINUX)
417 return kOsLinux; 578 return kOsLinux;
418 #elif defined(OS_MACOSX) 579 #elif defined(OS_MACOSX)
419 return kOsMacosx; 580 return kOsMacosx;
420 #else 581 #else
421 return kOsUnknown; 582 return kOsUnknown;
422 #endif 583 #endif
423 } 584 }
424 585
425 void GpuBlacklist::Clear() { 586 void GpuBlacklist::Clear() {
426 for (size_t i = 0; i < blacklist_.size(); ++i) 587 for (size_t i = 0; i < blacklist_.size(); ++i)
427 delete blacklist_[i]; 588 delete blacklist_[i];
428 blacklist_.clear(); 589 blacklist_.clear();
429 } 590 }
430 591
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698