Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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 "gpu/config/gpu_control_list.h" | 5 #include "gpu/config/gpu_control_list.h" |
| 6 | 6 |
| 7 #include "base/cpu.h" | 7 #include "base/cpu.h" |
| 8 #include "base/json/json_reader.h" | 8 #include "base/json/json_reader.h" |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "base/strings/string_number_conversions.h" | 10 #include "base/strings/string_number_conversions.h" |
| 11 #include "base/strings/string_split.h" | 11 #include "base/strings/string_split.h" |
| 12 #include "base/strings/string_util.h" | 12 #include "base/strings/string_util.h" |
| 13 #include "base/strings/stringprintf.h" | 13 #include "base/strings/stringprintf.h" |
| 14 #include "base/sys_info.h" | 14 #include "base/sys_info.h" |
| 15 #include "gpu/config/gpu_info.h" | 15 #include "gpu/config/gpu_info.h" |
| 16 #include "gpu/config/gpu_util.h" | 16 #include "gpu/config/gpu_util.h" |
| 17 #include "third_party/re2/re2/re2.h" | |
| 17 | 18 |
| 18 namespace gpu { | 19 namespace gpu { |
| 19 namespace { | 20 namespace { |
| 20 | 21 |
| 21 // Break a version string into segments. Return true if each segment is | 22 // Break a version string into segments. Return true if each segment is |
| 22 // a valid number, and not all segment is 0. | 23 // a valid number, and not all segment is 0. |
| 23 bool ProcessVersionString(const std::string& version_string, | 24 bool ProcessVersionString(const std::string& version_string, |
| 24 char splitter, | 25 char splitter, |
| 25 std::vector<std::string>* version) { | 26 std::vector<std::string>* version) { |
| 26 DCHECK(version); | 27 DCHECK(version); |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 82 value1 = number[i] - '0'; | 83 value1 = number[i] - '0'; |
| 83 unsigned value2 = number_ref[i] - '0'; | 84 unsigned value2 = number_ref[i] - '0'; |
| 84 if (value1 > value2) | 85 if (value1 > value2) |
| 85 return 1; | 86 return 1; |
| 86 if (value1 < value2) | 87 if (value1 < value2) |
| 87 return -1; | 88 return -1; |
| 88 } | 89 } |
| 89 return 0; | 90 return 0; |
| 90 } | 91 } |
| 91 | 92 |
| 93 // A mismatch is identified only if both |input| and |pattern| are not empty. | |
| 94 bool StringMismatch(const std::string& input, const std::string& pattern) { | |
| 95 if (input.empty() || pattern.empty()) | |
| 96 return false; | |
| 97 return !RE2::FullMatch(base::StringToLowerASCII(input), pattern); | |
| 98 } | |
| 99 | |
| 92 const char kMultiGpuStyleStringAMDSwitchable[] = "amd_switchable"; | 100 const char kMultiGpuStyleStringAMDSwitchable[] = "amd_switchable"; |
| 93 const char kMultiGpuStyleStringAMDSwitchableDiscrete[] = | 101 const char kMultiGpuStyleStringAMDSwitchableDiscrete[] = |
| 94 "amd_switchable_discrete"; | 102 "amd_switchable_discrete"; |
| 95 const char kMultiGpuStyleStringAMDSwitchableIntegrated[] = | 103 const char kMultiGpuStyleStringAMDSwitchableIntegrated[] = |
| 96 "amd_switchable_integrated"; | 104 "amd_switchable_integrated"; |
| 97 const char kMultiGpuStyleStringOptimus[] = "optimus"; | 105 const char kMultiGpuStyleStringOptimus[] = "optimus"; |
| 98 | 106 |
| 99 const char kMultiGpuCategoryStringPrimary[] = "primary"; | 107 const char kMultiGpuCategoryStringPrimary[] = "primary"; |
| 100 const char kMultiGpuCategoryStringSecondary[] = "secondary"; | 108 const char kMultiGpuCategoryStringSecondary[] = "secondary"; |
| 101 const char kMultiGpuCategoryStringActive[] = "active"; | 109 const char kMultiGpuCategoryStringActive[] = "active"; |
| (...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 254 return kOsAndroid; | 262 return kOsAndroid; |
| 255 else if (os == "linux") | 263 else if (os == "linux") |
| 256 return kOsLinux; | 264 return kOsLinux; |
| 257 else if (os == "chromeos") | 265 else if (os == "chromeos") |
| 258 return kOsChromeOS; | 266 return kOsChromeOS; |
| 259 else if (os == "any") | 267 else if (os == "any") |
| 260 return kOsAny; | 268 return kOsAny; |
| 261 return kOsUnknown; | 269 return kOsUnknown; |
| 262 } | 270 } |
| 263 | 271 |
| 264 GpuControlList::StringInfo::StringInfo(const std::string& string_op, | |
| 265 const std::string& string_value) { | |
| 266 op_ = StringToOp(string_op); | |
| 267 value_ = base::StringToLowerASCII(string_value); | |
| 268 } | |
| 269 | |
| 270 bool GpuControlList::StringInfo::Contains(const std::string& value) const { | |
| 271 std::string my_value = base::StringToLowerASCII(value); | |
| 272 switch (op_) { | |
| 273 case kContains: | |
| 274 return strstr(my_value.c_str(), value_.c_str()) != NULL; | |
| 275 case kBeginWith: | |
| 276 return StartsWithASCII(my_value, value_, false); | |
| 277 case kEndWith: | |
| 278 return EndsWith(my_value, value_, false); | |
| 279 case kEQ: | |
| 280 return value_ == my_value; | |
| 281 default: | |
| 282 return false; | |
| 283 } | |
| 284 } | |
| 285 | |
| 286 bool GpuControlList::StringInfo::IsValid() const { | |
| 287 return op_ != kUnknown; | |
| 288 } | |
| 289 | |
| 290 GpuControlList::StringInfo::Op GpuControlList::StringInfo::StringToOp( | |
| 291 const std::string& string_op) { | |
| 292 if (string_op == "=") | |
| 293 return kEQ; | |
| 294 else if (string_op == "contains") | |
| 295 return kContains; | |
| 296 else if (string_op == "beginwith") | |
| 297 return kBeginWith; | |
| 298 else if (string_op == "endwith") | |
| 299 return kEndWith; | |
| 300 return kUnknown; | |
| 301 } | |
| 302 | |
| 303 GpuControlList::FloatInfo::FloatInfo(const std::string& float_op, | 272 GpuControlList::FloatInfo::FloatInfo(const std::string& float_op, |
| 304 const std::string& float_value, | 273 const std::string& float_value, |
| 305 const std::string& float_value2) | 274 const std::string& float_value2) |
| 306 : op_(kUnknown), | 275 : op_(kUnknown), |
| 307 value_(0.f), | 276 value_(0.f), |
| 308 value2_(0.f) { | 277 value2_(0.f) { |
| 309 op_ = StringToNumericOp(float_op); | 278 op_ = StringToNumericOp(float_op); |
| 310 if (op_ == kAny) | 279 if (op_ == kAny) |
| 311 return; | 280 return; |
| 312 double dvalue = 0; | 281 double dvalue = 0; |
| (...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 513 | 482 |
| 514 std::string multi_gpu_category; | 483 std::string multi_gpu_category; |
| 515 if (value->GetString("multi_gpu_category", &multi_gpu_category)) { | 484 if (value->GetString("multi_gpu_category", &multi_gpu_category)) { |
| 516 if (!entry->SetMultiGpuCategory(multi_gpu_category)) { | 485 if (!entry->SetMultiGpuCategory(multi_gpu_category)) { |
| 517 LOG(WARNING) << "Malformed multi_gpu_category entry " << entry->id(); | 486 LOG(WARNING) << "Malformed multi_gpu_category entry " << entry->id(); |
| 518 return NULL; | 487 return NULL; |
| 519 } | 488 } |
| 520 dictionary_entry_count++; | 489 dictionary_entry_count++; |
| 521 } | 490 } |
| 522 | 491 |
| 523 const base::DictionaryValue* driver_vendor_value = NULL; | 492 std::string driver_vendor_value; |
| 524 if (value->GetDictionary("driver_vendor", &driver_vendor_value)) { | 493 if (value->GetString("driver_vendor", &driver_vendor_value)) { |
| 525 std::string vendor_op; | 494 if (!entry->SetDriverVendorInfo(driver_vendor_value)) { |
| 526 std::string vendor_value; | |
| 527 driver_vendor_value->GetString(kOp, &vendor_op); | |
| 528 driver_vendor_value->GetString("value", &vendor_value); | |
| 529 if (!entry->SetDriverVendorInfo(vendor_op, vendor_value)) { | |
| 530 LOG(WARNING) << "Malformed driver_vendor entry " << entry->id(); | 495 LOG(WARNING) << "Malformed driver_vendor entry " << entry->id(); |
| 531 return NULL; | 496 return NULL; |
| 532 } | 497 } |
| 533 dictionary_entry_count++; | 498 dictionary_entry_count++; |
| 534 } | 499 } |
| 535 | 500 |
| 536 const base::DictionaryValue* driver_version_value = NULL; | 501 const base::DictionaryValue* driver_version_value = NULL; |
| 537 if (value->GetDictionary("driver_version", &driver_version_value)) { | 502 if (value->GetDictionary("driver_version", &driver_version_value)) { |
| 538 std::string driver_version_op = "any"; | 503 std::string driver_version_op = "any"; |
| 539 std::string driver_version_style; | 504 std::string driver_version_style; |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 587 gl_version_value->GetString("value", &version_string); | 552 gl_version_value->GetString("value", &version_string); |
| 588 gl_version_value->GetString("value2", &version_string2); | 553 gl_version_value->GetString("value2", &version_string2); |
| 589 if (!entry->SetGLVersionInfo( | 554 if (!entry->SetGLVersionInfo( |
| 590 version_op, version_string, version_string2)) { | 555 version_op, version_string, version_string2)) { |
| 591 LOG(WARNING) << "Malformed gl_version entry " << entry->id(); | 556 LOG(WARNING) << "Malformed gl_version entry " << entry->id(); |
| 592 return NULL; | 557 return NULL; |
| 593 } | 558 } |
| 594 dictionary_entry_count++; | 559 dictionary_entry_count++; |
| 595 } | 560 } |
| 596 | 561 |
| 597 const base::DictionaryValue* gl_vendor_value = NULL; | 562 std::string gl_vendor_value; |
| 598 if (value->GetDictionary("gl_vendor", &gl_vendor_value)) { | 563 if (value->GetString("gl_vendor", &gl_vendor_value)) { |
| 599 std::string vendor_op; | 564 if (!entry->SetGLVendorInfo(gl_vendor_value)) { |
| 600 std::string vendor_value; | |
| 601 gl_vendor_value->GetString(kOp, &vendor_op); | |
| 602 gl_vendor_value->GetString("value", &vendor_value); | |
| 603 if (!entry->SetGLVendorInfo(vendor_op, vendor_value)) { | |
| 604 LOG(WARNING) << "Malformed gl_vendor entry " << entry->id(); | 565 LOG(WARNING) << "Malformed gl_vendor entry " << entry->id(); |
| 605 return NULL; | 566 return NULL; |
| 606 } | 567 } |
| 607 dictionary_entry_count++; | 568 dictionary_entry_count++; |
| 608 } | 569 } |
| 609 | 570 |
| 610 const base::DictionaryValue* gl_renderer_value = NULL; | 571 std::string gl_renderer_value; |
| 611 if (value->GetDictionary("gl_renderer", &gl_renderer_value)) { | 572 if (value->GetString("gl_renderer", &gl_renderer_value)) { |
| 612 std::string renderer_op; | 573 if (!entry->SetGLRendererInfo(gl_renderer_value)) { |
| 613 std::string renderer_value; | |
| 614 gl_renderer_value->GetString(kOp, &renderer_op); | |
| 615 gl_renderer_value->GetString("value", &renderer_value); | |
| 616 if (!entry->SetGLRendererInfo(renderer_op, renderer_value)) { | |
| 617 LOG(WARNING) << "Malformed gl_renderer entry " << entry->id(); | 574 LOG(WARNING) << "Malformed gl_renderer entry " << entry->id(); |
| 618 return NULL; | 575 return NULL; |
| 619 } | 576 } |
| 620 dictionary_entry_count++; | 577 dictionary_entry_count++; |
| 621 } | 578 } |
| 622 | 579 |
| 623 const base::DictionaryValue* gl_extensions_value = NULL; | 580 std::string gl_extensions_value; |
| 624 if (value->GetDictionary("gl_extensions", &gl_extensions_value)) { | 581 if (value->GetString("gl_extensions", &gl_extensions_value)) { |
| 625 std::string extensions_op; | 582 if (!entry->SetGLExtensionsInfo(gl_extensions_value)) { |
| 626 std::string extensions_value; | |
| 627 gl_extensions_value->GetString(kOp, &extensions_op); | |
| 628 gl_extensions_value->GetString("value", &extensions_value); | |
| 629 if (!entry->SetGLExtensionsInfo(extensions_op, extensions_value)) { | |
| 630 LOG(WARNING) << "Malformed gl_extensions entry " << entry->id(); | 583 LOG(WARNING) << "Malformed gl_extensions entry " << entry->id(); |
| 631 return NULL; | 584 return NULL; |
| 632 } | 585 } |
| 633 dictionary_entry_count++; | 586 dictionary_entry_count++; |
| 634 } | 587 } |
| 635 | 588 |
| 636 const base::DictionaryValue* gl_reset_notification_strategy_value = NULL; | 589 const base::DictionaryValue* gl_reset_notification_strategy_value = NULL; |
| 637 if (value->GetDictionary("gl_reset_notification_strategy", | 590 if (value->GetDictionary("gl_reset_notification_strategy", |
| 638 &gl_reset_notification_strategy_value)) { | 591 &gl_reset_notification_strategy_value)) { |
| 639 std::string op; | 592 std::string op; |
| 640 std::string int_value; | 593 std::string int_value; |
| 641 std::string int_value2; | 594 std::string int_value2; |
| 642 gl_reset_notification_strategy_value->GetString(kOp, &op); | 595 gl_reset_notification_strategy_value->GetString(kOp, &op); |
| 643 gl_reset_notification_strategy_value->GetString("value", &int_value); | 596 gl_reset_notification_strategy_value->GetString("value", &int_value); |
| 644 gl_reset_notification_strategy_value->GetString("value2", &int_value2); | 597 gl_reset_notification_strategy_value->GetString("value2", &int_value2); |
| 645 if (!entry->SetGLResetNotificationStrategyInfo( | 598 if (!entry->SetGLResetNotificationStrategyInfo( |
| 646 op, int_value, int_value2)) { | 599 op, int_value, int_value2)) { |
| 647 LOG(WARNING) << "Malformed gl_reset_notification_strategy entry " | 600 LOG(WARNING) << "Malformed gl_reset_notification_strategy entry " |
| 648 << entry->id(); | 601 << entry->id(); |
| 649 return NULL; | 602 return NULL; |
| 650 } | 603 } |
| 651 dictionary_entry_count++; | 604 dictionary_entry_count++; |
| 652 } | 605 } |
| 653 | 606 |
| 654 const base::DictionaryValue* cpu_brand_value = NULL; | 607 std::string cpu_brand_value; |
| 655 if (value->GetDictionary("cpu_info", &cpu_brand_value)) { | 608 if (value->GetString("cpu_info", &cpu_brand_value)) { |
| 656 std::string cpu_op; | 609 if (!entry->SetCpuBrand(cpu_brand_value)) { |
| 657 std::string cpu_value; | |
| 658 cpu_brand_value->GetString(kOp, &cpu_op); | |
| 659 cpu_brand_value->GetString("value", &cpu_value); | |
| 660 if (!entry->SetCpuBrand(cpu_op, cpu_value)) { | |
| 661 LOG(WARNING) << "Malformed cpu_brand entry " << entry->id(); | 610 LOG(WARNING) << "Malformed cpu_brand entry " << entry->id(); |
| 662 return NULL; | 611 return NULL; |
| 663 } | 612 } |
| 664 dictionary_entry_count++; | 613 dictionary_entry_count++; |
| 665 } | 614 } |
| 666 | 615 |
| 667 const base::DictionaryValue* perf_graphics_value = NULL; | 616 const base::DictionaryValue* perf_graphics_value = NULL; |
| 668 if (value->GetDictionary("perf_graphics", &perf_graphics_value)) { | 617 if (value->GetDictionary("perf_graphics", &perf_graphics_value)) { |
| 669 std::string op; | 618 std::string op; |
| 670 std::string float_value; | 619 std::string float_value; |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 707 return NULL; | 656 return NULL; |
| 708 } | 657 } |
| 709 dictionary_entry_count++; | 658 dictionary_entry_count++; |
| 710 } | 659 } |
| 711 | 660 |
| 712 const base::ListValue* machine_model_name_list; | 661 const base::ListValue* machine_model_name_list; |
| 713 if (value->GetList("machine_model_name", &machine_model_name_list)) { | 662 if (value->GetList("machine_model_name", &machine_model_name_list)) { |
| 714 for (size_t i = 0; i < machine_model_name_list->GetSize(); ++i) { | 663 for (size_t i = 0; i < machine_model_name_list->GetSize(); ++i) { |
| 715 std::string model_name; | 664 std::string model_name; |
| 716 if (!machine_model_name_list->GetString(i, &model_name) || | 665 if (!machine_model_name_list->GetString(i, &model_name) || |
| 717 !entry->AddMachineModelName(model_name)) { | 666 !entry->AddMachineModelName(base::StringToLowerASCII(model_name))) { |
|
Ken Russell (switch to Gerrit)
2014/08/09 00:57:02
I don't think that converting a regexp pattern to
Zhenyao Mo
2014/08/09 01:23:59
Done.
| |
| 718 LOG(WARNING) << "Malformed machine_model_name entry " << entry->id(); | 667 LOG(WARNING) << "Malformed machine_model_name entry " << entry->id(); |
| 719 return NULL; | 668 return NULL; |
| 720 } | 669 } |
| 721 } | 670 } |
| 722 dictionary_entry_count++; | 671 dictionary_entry_count++; |
| 723 } | 672 } |
| 724 | 673 |
| 725 const base::DictionaryValue* machine_model_version_value = NULL; | 674 const base::DictionaryValue* machine_model_version_value = NULL; |
| 726 if (value->GetDictionary( | 675 if (value->GetDictionary( |
| 727 "machine_model_version", &machine_model_version_value)) { | 676 "machine_model_version", &machine_model_version_value)) { |
| (...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 891 bool GpuControlList::GpuControlListEntry::SetGLType( | 840 bool GpuControlList::GpuControlListEntry::SetGLType( |
| 892 const std::string& gl_type_string) { | 841 const std::string& gl_type_string) { |
| 893 GLType gl_type = StringToGLType(gl_type_string); | 842 GLType gl_type = StringToGLType(gl_type_string); |
| 894 if (gl_type == kGLTypeNone) | 843 if (gl_type == kGLTypeNone) |
| 895 return false; | 844 return false; |
| 896 gl_type_ = gl_type; | 845 gl_type_ = gl_type; |
| 897 return true; | 846 return true; |
| 898 } | 847 } |
| 899 | 848 |
| 900 bool GpuControlList::GpuControlListEntry::SetDriverVendorInfo( | 849 bool GpuControlList::GpuControlListEntry::SetDriverVendorInfo( |
| 901 const std::string& vendor_op, | |
| 902 const std::string& vendor_value) { | 850 const std::string& vendor_value) { |
| 903 driver_vendor_info_.reset(new StringInfo(vendor_op, vendor_value)); | 851 driver_vendor_info_ = base::StringToLowerASCII(vendor_value); |
| 904 return driver_vendor_info_->IsValid(); | 852 return !driver_vendor_info_.empty(); |
| 905 } | 853 } |
| 906 | 854 |
| 907 bool GpuControlList::GpuControlListEntry::SetDriverVersionInfo( | 855 bool GpuControlList::GpuControlListEntry::SetDriverVersionInfo( |
| 908 const std::string& version_op, | 856 const std::string& version_op, |
| 909 const std::string& version_style, | 857 const std::string& version_style, |
| 910 const std::string& version_string, | 858 const std::string& version_string, |
| 911 const std::string& version_string2) { | 859 const std::string& version_string2) { |
| 912 driver_version_info_.reset(new VersionInfo( | 860 driver_version_info_.reset(new VersionInfo( |
| 913 version_op, version_style, version_string, version_string2)); | 861 version_op, version_style, version_string, version_string2)); |
| 914 return driver_version_info_->IsValid(); | 862 return driver_version_info_->IsValid(); |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 926 bool GpuControlList::GpuControlListEntry::SetGLVersionInfo( | 874 bool GpuControlList::GpuControlListEntry::SetGLVersionInfo( |
| 927 const std::string& version_op, | 875 const std::string& version_op, |
| 928 const std::string& version_string, | 876 const std::string& version_string, |
| 929 const std::string& version_string2) { | 877 const std::string& version_string2) { |
| 930 gl_version_info_.reset(new VersionInfo( | 878 gl_version_info_.reset(new VersionInfo( |
| 931 version_op, std::string(), version_string, version_string2)); | 879 version_op, std::string(), version_string, version_string2)); |
| 932 return gl_version_info_->IsValid(); | 880 return gl_version_info_->IsValid(); |
| 933 } | 881 } |
| 934 | 882 |
| 935 bool GpuControlList::GpuControlListEntry::SetGLVendorInfo( | 883 bool GpuControlList::GpuControlListEntry::SetGLVendorInfo( |
| 936 const std::string& vendor_op, | |
| 937 const std::string& vendor_value) { | 884 const std::string& vendor_value) { |
| 938 gl_vendor_info_.reset(new StringInfo(vendor_op, vendor_value)); | 885 gl_vendor_info_ = base::StringToLowerASCII(vendor_value); |
| 939 return gl_vendor_info_->IsValid(); | 886 return !gl_vendor_info_.empty(); |
| 940 } | 887 } |
| 941 | 888 |
| 942 bool GpuControlList::GpuControlListEntry::SetGLRendererInfo( | 889 bool GpuControlList::GpuControlListEntry::SetGLRendererInfo( |
| 943 const std::string& renderer_op, | |
| 944 const std::string& renderer_value) { | 890 const std::string& renderer_value) { |
| 945 gl_renderer_info_.reset(new StringInfo(renderer_op, renderer_value)); | 891 gl_renderer_info_ = base::StringToLowerASCII(renderer_value); |
| 946 return gl_renderer_info_->IsValid(); | 892 return !gl_renderer_info_.empty(); |
| 947 } | 893 } |
| 948 | 894 |
| 949 bool GpuControlList::GpuControlListEntry::SetGLExtensionsInfo( | 895 bool GpuControlList::GpuControlListEntry::SetGLExtensionsInfo( |
| 950 const std::string& extensions_op, | |
| 951 const std::string& extensions_value) { | 896 const std::string& extensions_value) { |
| 952 gl_extensions_info_.reset(new StringInfo(extensions_op, extensions_value)); | 897 gl_extensions_info_ = base::StringToLowerASCII(extensions_value); |
| 953 return gl_extensions_info_->IsValid(); | 898 return !gl_extensions_info_.empty(); |
| 954 } | 899 } |
| 955 | 900 |
| 956 bool GpuControlList::GpuControlListEntry::SetGLResetNotificationStrategyInfo( | 901 bool GpuControlList::GpuControlListEntry::SetGLResetNotificationStrategyInfo( |
| 957 const std::string& op, | 902 const std::string& op, |
| 958 const std::string& int_string, | 903 const std::string& int_string, |
| 959 const std::string& int_string2) { | 904 const std::string& int_string2) { |
| 960 gl_reset_notification_strategy_info_.reset( | 905 gl_reset_notification_strategy_info_.reset( |
| 961 new IntInfo(op, int_string, int_string2)); | 906 new IntInfo(op, int_string, int_string2)); |
| 962 return gl_reset_notification_strategy_info_->IsValid(); | 907 return gl_reset_notification_strategy_info_->IsValid(); |
| 963 } | 908 } |
| 964 | 909 |
| 965 bool GpuControlList::GpuControlListEntry::SetCpuBrand( | 910 bool GpuControlList::GpuControlListEntry::SetCpuBrand( |
| 966 const std::string& cpu_op, | |
| 967 const std::string& cpu_value) { | 911 const std::string& cpu_value) { |
| 968 cpu_brand_.reset(new StringInfo(cpu_op, cpu_value)); | 912 cpu_brand_ = base::StringToLowerASCII(cpu_value); |
| 969 return cpu_brand_->IsValid(); | 913 return !cpu_brand_.empty(); |
| 970 } | 914 } |
| 971 | 915 |
| 972 bool GpuControlList::GpuControlListEntry::SetPerfGraphicsInfo( | 916 bool GpuControlList::GpuControlListEntry::SetPerfGraphicsInfo( |
| 973 const std::string& op, | 917 const std::string& op, |
| 974 const std::string& float_string, | 918 const std::string& float_string, |
| 975 const std::string& float_string2) { | 919 const std::string& float_string2) { |
| 976 perf_graphics_info_.reset(new FloatInfo(op, float_string, float_string2)); | 920 perf_graphics_info_.reset(new FloatInfo(op, float_string, float_string2)); |
| 977 return perf_graphics_info_->IsValid(); | 921 return perf_graphics_info_->IsValid(); |
| 978 } | 922 } |
| 979 | 923 |
| (...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1229 if (!gpu_info.amd_switchable) | 1173 if (!gpu_info.amd_switchable) |
| 1230 return false; | 1174 return false; |
| 1231 // Assume the integrated GPU is the first in the secondary GPU list. | 1175 // Assume the integrated GPU is the first in the secondary GPU list. |
| 1232 if (gpu_info.secondary_gpus.size() == 0 || | 1176 if (gpu_info.secondary_gpus.size() == 0 || |
| 1233 !gpu_info.secondary_gpus[0].active) | 1177 !gpu_info.secondary_gpus[0].active) |
| 1234 return false; | 1178 return false; |
| 1235 break; | 1179 break; |
| 1236 case kMultiGpuStyleNone: | 1180 case kMultiGpuStyleNone: |
| 1237 break; | 1181 break; |
| 1238 } | 1182 } |
| 1239 if (driver_vendor_info_.get() != NULL && !gpu_info.driver_vendor.empty() && | 1183 if (StringMismatch(gpu_info.driver_vendor, driver_vendor_info_)) |
| 1240 !driver_vendor_info_->Contains(gpu_info.driver_vendor)) | |
| 1241 return false; | 1184 return false; |
| 1242 if (driver_version_info_.get() != NULL && !gpu_info.driver_version.empty()) { | 1185 if (driver_version_info_.get() != NULL && !gpu_info.driver_version.empty()) { |
| 1243 if (!driver_version_info_->Contains(gpu_info.driver_version)) | 1186 if (!driver_version_info_->Contains(gpu_info.driver_version)) |
| 1244 return false; | 1187 return false; |
| 1245 } | 1188 } |
| 1246 if (driver_date_info_.get() != NULL && !gpu_info.driver_date.empty()) { | 1189 if (driver_date_info_.get() != NULL && !gpu_info.driver_date.empty()) { |
| 1247 if (!driver_date_info_->Contains(gpu_info.driver_date, '-')) | 1190 if (!driver_date_info_->Contains(gpu_info.driver_date, '-')) |
| 1248 return false; | 1191 return false; |
| 1249 } | 1192 } |
| 1250 if (GLVersionInfoMismatch(gpu_info.gl_version)) | 1193 if (GLVersionInfoMismatch(gpu_info.gl_version)) |
| 1251 return false; | 1194 return false; |
| 1252 if (gl_vendor_info_.get() != NULL && !gpu_info.gl_vendor.empty() && | 1195 if (StringMismatch(gpu_info.gl_vendor, gl_vendor_info_)) |
| 1253 !gl_vendor_info_->Contains(gpu_info.gl_vendor)) | |
| 1254 return false; | 1196 return false; |
| 1255 if (gl_renderer_info_.get() != NULL && !gpu_info.gl_renderer.empty() && | 1197 if (StringMismatch(gpu_info.gl_renderer, gl_renderer_info_)) |
| 1256 !gl_renderer_info_->Contains(gpu_info.gl_renderer)) | |
| 1257 return false; | 1198 return false; |
| 1258 if (gl_extensions_info_.get() != NULL && !gpu_info.gl_extensions.empty() && | 1199 if (StringMismatch(gpu_info.gl_extensions, gl_extensions_info_)) |
| 1259 !gl_extensions_info_->Contains(gpu_info.gl_extensions)) | |
| 1260 return false; | 1200 return false; |
| 1261 if (gl_reset_notification_strategy_info_.get() != NULL && | 1201 if (gl_reset_notification_strategy_info_.get() != NULL && |
| 1262 !gl_reset_notification_strategy_info_->Contains( | 1202 !gl_reset_notification_strategy_info_->Contains( |
| 1263 gpu_info.gl_reset_notification_strategy)) | 1203 gpu_info.gl_reset_notification_strategy)) |
| 1264 return false; | 1204 return false; |
| 1265 if (perf_graphics_info_.get() != NULL && | 1205 if (perf_graphics_info_.get() != NULL && |
| 1266 (gpu_info.performance_stats.graphics == 0.0 || | 1206 (gpu_info.performance_stats.graphics == 0.0 || |
| 1267 !perf_graphics_info_->Contains(gpu_info.performance_stats.graphics))) | 1207 !perf_graphics_info_->Contains(gpu_info.performance_stats.graphics))) |
| 1268 return false; | 1208 return false; |
| 1269 if (perf_gaming_info_.get() != NULL && | 1209 if (perf_gaming_info_.get() != NULL && |
| 1270 (gpu_info.performance_stats.gaming == 0.0 || | 1210 (gpu_info.performance_stats.gaming == 0.0 || |
| 1271 !perf_gaming_info_->Contains(gpu_info.performance_stats.gaming))) | 1211 !perf_gaming_info_->Contains(gpu_info.performance_stats.gaming))) |
| 1272 return false; | 1212 return false; |
| 1273 if (perf_overall_info_.get() != NULL && | 1213 if (perf_overall_info_.get() != NULL && |
| 1274 (gpu_info.performance_stats.overall == 0.0 || | 1214 (gpu_info.performance_stats.overall == 0.0 || |
| 1275 !perf_overall_info_->Contains(gpu_info.performance_stats.overall))) | 1215 !perf_overall_info_->Contains(gpu_info.performance_stats.overall))) |
| 1276 return false; | 1216 return false; |
| 1277 if (!machine_model_name_list_.empty()) { | 1217 if (!machine_model_name_list_.empty()) { |
| 1278 if (gpu_info.machine_model_name.empty()) | 1218 if (gpu_info.machine_model_name.empty()) |
| 1279 return false; | 1219 return false; |
| 1280 bool found_match = false; | 1220 bool found_match = false; |
| 1281 for (size_t ii = 0; ii < machine_model_name_list_.size(); ++ii) { | 1221 for (size_t ii = 0; ii < machine_model_name_list_.size(); ++ii) { |
| 1282 if (machine_model_name_list_[ii] == gpu_info.machine_model_name) { | 1222 if (RE2::FullMatch(base::StringToLowerASCII(gpu_info.machine_model_name), |
| 1223 machine_model_name_list_[ii])) { | |
| 1283 found_match = true; | 1224 found_match = true; |
| 1284 break; | 1225 break; |
| 1285 } | 1226 } |
| 1286 } | 1227 } |
| 1287 if (!found_match) | 1228 if (!found_match) |
| 1288 return false; | 1229 return false; |
| 1289 } | 1230 } |
| 1290 if (machine_model_version_info_.get() != NULL && | 1231 if (machine_model_version_info_.get() != NULL && |
| 1291 (gpu_info.machine_model_version.empty() || | 1232 (gpu_info.machine_model_version.empty() || |
| 1292 !machine_model_version_info_->Contains(gpu_info.machine_model_version))) | 1233 !machine_model_version_info_->Contains(gpu_info.machine_model_version))) |
| 1293 return false; | 1234 return false; |
| 1294 if (gpu_count_info_.get() != NULL && | 1235 if (gpu_count_info_.get() != NULL && |
| 1295 !gpu_count_info_->Contains(gpu_info.secondary_gpus.size() + 1)) | 1236 !gpu_count_info_->Contains(gpu_info.secondary_gpus.size() + 1)) |
| 1296 return false; | 1237 return false; |
| 1297 if (direct_rendering_info_.get() != NULL && | 1238 if (direct_rendering_info_.get() != NULL && |
| 1298 !direct_rendering_info_->Contains(gpu_info.direct_rendering)) | 1239 !direct_rendering_info_->Contains(gpu_info.direct_rendering)) |
| 1299 return false; | 1240 return false; |
| 1300 if (cpu_brand_.get() != NULL) { | 1241 if (!cpu_brand_.empty()) { |
| 1301 base::CPU cpu_info; | 1242 base::CPU cpu_info; |
| 1302 if (!cpu_brand_->Contains(cpu_info.cpu_brand())) | 1243 if (StringMismatch(cpu_info.cpu_brand(), cpu_brand_)) |
| 1303 return false; | 1244 return false; |
| 1304 } | 1245 } |
| 1305 | 1246 |
| 1306 for (size_t i = 0; i < exceptions_.size(); ++i) { | 1247 for (size_t i = 0; i < exceptions_.size(); ++i) { |
| 1307 if (exceptions_[i]->Contains(os_type, os_version, gpu_info) && | 1248 if (exceptions_[i]->Contains(os_type, os_version, gpu_info) && |
| 1308 !exceptions_[i]->NeedsMoreInfo(gpu_info)) | 1249 !exceptions_[i]->NeedsMoreInfo(gpu_info)) |
| 1309 return false; | 1250 return false; |
| 1310 } | 1251 } |
| 1311 return true; | 1252 return true; |
| 1312 } | 1253 } |
| 1313 | 1254 |
| 1314 bool GpuControlList::GpuControlListEntry::NeedsMoreInfo( | 1255 bool GpuControlList::GpuControlListEntry::NeedsMoreInfo( |
| 1315 const GPUInfo& gpu_info) const { | 1256 const GPUInfo& gpu_info) const { |
| 1316 // We only check for missing info that might be collected with a gl context. | 1257 // We only check for missing info that might be collected with a gl context. |
| 1317 // If certain info is missing due to some error, say, we fail to collect | 1258 // If certain info is missing due to some error, say, we fail to collect |
| 1318 // vendor_id/device_id, then even if we launch GPU process and create a gl | 1259 // vendor_id/device_id, then even if we launch GPU process and create a gl |
| 1319 // context, we won't gather such missing info, so we still return false. | 1260 // context, we won't gather such missing info, so we still return false. |
| 1320 if (driver_vendor_info_.get() && gpu_info.driver_vendor.empty()) | 1261 if (!driver_vendor_info_.empty() && gpu_info.driver_vendor.empty()) |
| 1321 return true; | 1262 return true; |
| 1322 if (driver_version_info_.get() && gpu_info.driver_version.empty()) | 1263 if (driver_version_info_.get() && gpu_info.driver_version.empty()) |
| 1323 return true; | 1264 return true; |
| 1324 if (gl_vendor_info_.get() && gpu_info.gl_vendor.empty()) | 1265 if (!gl_vendor_info_.empty() && gpu_info.gl_vendor.empty()) |
| 1325 return true; | 1266 return true; |
| 1326 if (gl_renderer_info_.get() && gpu_info.gl_renderer.empty()) | 1267 if (!gl_renderer_info_.empty() && gpu_info.gl_renderer.empty()) |
| 1327 return true; | 1268 return true; |
| 1328 for (size_t i = 0; i < exceptions_.size(); ++i) { | 1269 for (size_t i = 0; i < exceptions_.size(); ++i) { |
| 1329 if (exceptions_[i]->NeedsMoreInfo(gpu_info)) | 1270 if (exceptions_[i]->NeedsMoreInfo(gpu_info)) |
| 1330 return true; | 1271 return true; |
| 1331 } | 1272 } |
| 1332 return false; | 1273 return false; |
| 1333 } | 1274 } |
| 1334 | 1275 |
| 1335 GpuControlList::OsType GpuControlList::GpuControlListEntry::GetOsType() const { | 1276 GpuControlList::OsType GpuControlList::GpuControlListEntry::GetOsType() const { |
| 1336 if (os_info_.get() == NULL) | 1277 if (os_info_.get() == NULL) |
| (...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1578 const std::string& feature_name, int feature_id) { | 1519 const std::string& feature_name, int feature_id) { |
| 1579 feature_map_[feature_name] = feature_id; | 1520 feature_map_[feature_name] = feature_id; |
| 1580 } | 1521 } |
| 1581 | 1522 |
| 1582 void GpuControlList::set_supports_feature_type_all(bool supported) { | 1523 void GpuControlList::set_supports_feature_type_all(bool supported) { |
| 1583 supports_feature_type_all_ = supported; | 1524 supports_feature_type_all_ = supported; |
| 1584 } | 1525 } |
| 1585 | 1526 |
| 1586 } // namespace gpu | 1527 } // namespace gpu |
| 1587 | 1528 |
| OLD | NEW |