Index: gpu/config/gpu_control_list.cc |
diff --git a/gpu/config/gpu_control_list.cc b/gpu/config/gpu_control_list.cc |
index 444c186b39bfc2dd50def14749e820a497e6197c..44575ce2796c83741ada5cd4019338708a32ca09 100644 |
--- a/gpu/config/gpu_control_list.cc |
+++ b/gpu/config/gpu_control_list.cc |
@@ -14,6 +14,7 @@ |
#include "base/sys_info.h" |
#include "gpu/config/gpu_info.h" |
#include "gpu/config/gpu_util.h" |
+#include "third_party/re2/re2/re2.h" |
namespace gpu { |
namespace { |
@@ -89,6 +90,13 @@ int CompareLexicalNumberStrings( |
return 0; |
} |
+// A mismatch is identified only if both |input| and |pattern| are not empty. |
+bool StringMismatch(const std::string& input, const std::string& pattern) { |
+ if (input.empty() || pattern.empty()) |
+ return false; |
+ return !RE2::FullMatch(base::StringToLowerASCII(input), pattern); |
+} |
+ |
const char kMultiGpuStyleStringAMDSwitchable[] = "amd_switchable"; |
const char kMultiGpuStyleStringAMDSwitchableDiscrete[] = |
"amd_switchable_discrete"; |
@@ -261,45 +269,6 @@ GpuControlList::OsType GpuControlList::OsInfo::StringToOsType( |
return kOsUnknown; |
} |
-GpuControlList::StringInfo::StringInfo(const std::string& string_op, |
- const std::string& string_value) { |
- op_ = StringToOp(string_op); |
- value_ = base::StringToLowerASCII(string_value); |
-} |
- |
-bool GpuControlList::StringInfo::Contains(const std::string& value) const { |
- std::string my_value = base::StringToLowerASCII(value); |
- switch (op_) { |
- case kContains: |
- return strstr(my_value.c_str(), value_.c_str()) != NULL; |
- case kBeginWith: |
- return StartsWithASCII(my_value, value_, false); |
- case kEndWith: |
- return EndsWith(my_value, value_, false); |
- case kEQ: |
- return value_ == my_value; |
- default: |
- return false; |
- } |
-} |
- |
-bool GpuControlList::StringInfo::IsValid() const { |
- return op_ != kUnknown; |
-} |
- |
-GpuControlList::StringInfo::Op GpuControlList::StringInfo::StringToOp( |
- const std::string& string_op) { |
- if (string_op == "=") |
- return kEQ; |
- else if (string_op == "contains") |
- return kContains; |
- else if (string_op == "beginwith") |
- return kBeginWith; |
- else if (string_op == "endwith") |
- return kEndWith; |
- return kUnknown; |
-} |
- |
GpuControlList::FloatInfo::FloatInfo(const std::string& float_op, |
const std::string& float_value, |
const std::string& float_value2) |
@@ -520,13 +489,9 @@ GpuControlList::GpuControlListEntry::GetEntryFromValue( |
dictionary_entry_count++; |
} |
- const base::DictionaryValue* driver_vendor_value = NULL; |
- if (value->GetDictionary("driver_vendor", &driver_vendor_value)) { |
- std::string vendor_op; |
- std::string vendor_value; |
- driver_vendor_value->GetString(kOp, &vendor_op); |
- driver_vendor_value->GetString("value", &vendor_value); |
- if (!entry->SetDriverVendorInfo(vendor_op, vendor_value)) { |
+ std::string driver_vendor_value; |
+ if (value->GetString("driver_vendor", &driver_vendor_value)) { |
+ if (!entry->SetDriverVendorInfo(driver_vendor_value)) { |
LOG(WARNING) << "Malformed driver_vendor entry " << entry->id(); |
return NULL; |
} |
@@ -594,39 +559,27 @@ GpuControlList::GpuControlListEntry::GetEntryFromValue( |
dictionary_entry_count++; |
} |
- const base::DictionaryValue* gl_vendor_value = NULL; |
- if (value->GetDictionary("gl_vendor", &gl_vendor_value)) { |
- std::string vendor_op; |
- std::string vendor_value; |
- gl_vendor_value->GetString(kOp, &vendor_op); |
- gl_vendor_value->GetString("value", &vendor_value); |
- if (!entry->SetGLVendorInfo(vendor_op, vendor_value)) { |
+ std::string gl_vendor_value; |
+ if (value->GetString("gl_vendor", &gl_vendor_value)) { |
+ if (!entry->SetGLVendorInfo(gl_vendor_value)) { |
LOG(WARNING) << "Malformed gl_vendor entry " << entry->id(); |
return NULL; |
} |
dictionary_entry_count++; |
} |
- const base::DictionaryValue* gl_renderer_value = NULL; |
- if (value->GetDictionary("gl_renderer", &gl_renderer_value)) { |
- std::string renderer_op; |
- std::string renderer_value; |
- gl_renderer_value->GetString(kOp, &renderer_op); |
- gl_renderer_value->GetString("value", &renderer_value); |
- if (!entry->SetGLRendererInfo(renderer_op, renderer_value)) { |
+ std::string gl_renderer_value; |
+ if (value->GetString("gl_renderer", &gl_renderer_value)) { |
+ if (!entry->SetGLRendererInfo(gl_renderer_value)) { |
LOG(WARNING) << "Malformed gl_renderer entry " << entry->id(); |
return NULL; |
} |
dictionary_entry_count++; |
} |
- const base::DictionaryValue* gl_extensions_value = NULL; |
- if (value->GetDictionary("gl_extensions", &gl_extensions_value)) { |
- std::string extensions_op; |
- std::string extensions_value; |
- gl_extensions_value->GetString(kOp, &extensions_op); |
- gl_extensions_value->GetString("value", &extensions_value); |
- if (!entry->SetGLExtensionsInfo(extensions_op, extensions_value)) { |
+ std::string gl_extensions_value; |
+ if (value->GetString("gl_extensions", &gl_extensions_value)) { |
+ if (!entry->SetGLExtensionsInfo(gl_extensions_value)) { |
LOG(WARNING) << "Malformed gl_extensions entry " << entry->id(); |
return NULL; |
} |
@@ -651,13 +604,9 @@ GpuControlList::GpuControlListEntry::GetEntryFromValue( |
dictionary_entry_count++; |
} |
- const base::DictionaryValue* cpu_brand_value = NULL; |
- if (value->GetDictionary("cpu_info", &cpu_brand_value)) { |
- std::string cpu_op; |
- std::string cpu_value; |
- cpu_brand_value->GetString(kOp, &cpu_op); |
- cpu_brand_value->GetString("value", &cpu_value); |
- if (!entry->SetCpuBrand(cpu_op, cpu_value)) { |
+ std::string cpu_brand_value; |
+ if (value->GetString("cpu_info", &cpu_brand_value)) { |
+ if (!entry->SetCpuBrand(cpu_brand_value)) { |
LOG(WARNING) << "Malformed cpu_brand entry " << entry->id(); |
return NULL; |
} |
@@ -714,7 +663,7 @@ GpuControlList::GpuControlListEntry::GetEntryFromValue( |
for (size_t i = 0; i < machine_model_name_list->GetSize(); ++i) { |
std::string model_name; |
if (!machine_model_name_list->GetString(i, &model_name) || |
- !entry->AddMachineModelName(model_name)) { |
+ !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.
|
LOG(WARNING) << "Malformed machine_model_name entry " << entry->id(); |
return NULL; |
} |
@@ -898,10 +847,9 @@ bool GpuControlList::GpuControlListEntry::SetGLType( |
} |
bool GpuControlList::GpuControlListEntry::SetDriverVendorInfo( |
- const std::string& vendor_op, |
const std::string& vendor_value) { |
- driver_vendor_info_.reset(new StringInfo(vendor_op, vendor_value)); |
- return driver_vendor_info_->IsValid(); |
+ driver_vendor_info_ = base::StringToLowerASCII(vendor_value); |
+ return !driver_vendor_info_.empty(); |
} |
bool GpuControlList::GpuControlListEntry::SetDriverVersionInfo( |
@@ -933,24 +881,21 @@ bool GpuControlList::GpuControlListEntry::SetGLVersionInfo( |
} |
bool GpuControlList::GpuControlListEntry::SetGLVendorInfo( |
- const std::string& vendor_op, |
const std::string& vendor_value) { |
- gl_vendor_info_.reset(new StringInfo(vendor_op, vendor_value)); |
- return gl_vendor_info_->IsValid(); |
+ gl_vendor_info_ = base::StringToLowerASCII(vendor_value); |
+ return !gl_vendor_info_.empty(); |
} |
bool GpuControlList::GpuControlListEntry::SetGLRendererInfo( |
- const std::string& renderer_op, |
const std::string& renderer_value) { |
- gl_renderer_info_.reset(new StringInfo(renderer_op, renderer_value)); |
- return gl_renderer_info_->IsValid(); |
+ gl_renderer_info_ = base::StringToLowerASCII(renderer_value); |
+ return !gl_renderer_info_.empty(); |
} |
bool GpuControlList::GpuControlListEntry::SetGLExtensionsInfo( |
- const std::string& extensions_op, |
const std::string& extensions_value) { |
- gl_extensions_info_.reset(new StringInfo(extensions_op, extensions_value)); |
- return gl_extensions_info_->IsValid(); |
+ gl_extensions_info_ = base::StringToLowerASCII(extensions_value); |
+ return !gl_extensions_info_.empty(); |
} |
bool GpuControlList::GpuControlListEntry::SetGLResetNotificationStrategyInfo( |
@@ -963,10 +908,9 @@ bool GpuControlList::GpuControlListEntry::SetGLResetNotificationStrategyInfo( |
} |
bool GpuControlList::GpuControlListEntry::SetCpuBrand( |
- const std::string& cpu_op, |
const std::string& cpu_value) { |
- cpu_brand_.reset(new StringInfo(cpu_op, cpu_value)); |
- return cpu_brand_->IsValid(); |
+ cpu_brand_ = base::StringToLowerASCII(cpu_value); |
+ return !cpu_brand_.empty(); |
} |
bool GpuControlList::GpuControlListEntry::SetPerfGraphicsInfo( |
@@ -1236,8 +1180,7 @@ bool GpuControlList::GpuControlListEntry::Contains( |
case kMultiGpuStyleNone: |
break; |
} |
- if (driver_vendor_info_.get() != NULL && !gpu_info.driver_vendor.empty() && |
- !driver_vendor_info_->Contains(gpu_info.driver_vendor)) |
+ if (StringMismatch(gpu_info.driver_vendor, driver_vendor_info_)) |
return false; |
if (driver_version_info_.get() != NULL && !gpu_info.driver_version.empty()) { |
if (!driver_version_info_->Contains(gpu_info.driver_version)) |
@@ -1249,14 +1192,11 @@ bool GpuControlList::GpuControlListEntry::Contains( |
} |
if (GLVersionInfoMismatch(gpu_info.gl_version)) |
return false; |
- if (gl_vendor_info_.get() != NULL && !gpu_info.gl_vendor.empty() && |
- !gl_vendor_info_->Contains(gpu_info.gl_vendor)) |
+ if (StringMismatch(gpu_info.gl_vendor, gl_vendor_info_)) |
return false; |
- if (gl_renderer_info_.get() != NULL && !gpu_info.gl_renderer.empty() && |
- !gl_renderer_info_->Contains(gpu_info.gl_renderer)) |
+ if (StringMismatch(gpu_info.gl_renderer, gl_renderer_info_)) |
return false; |
- if (gl_extensions_info_.get() != NULL && !gpu_info.gl_extensions.empty() && |
- !gl_extensions_info_->Contains(gpu_info.gl_extensions)) |
+ if (StringMismatch(gpu_info.gl_extensions, gl_extensions_info_)) |
return false; |
if (gl_reset_notification_strategy_info_.get() != NULL && |
!gl_reset_notification_strategy_info_->Contains( |
@@ -1279,7 +1219,8 @@ bool GpuControlList::GpuControlListEntry::Contains( |
return false; |
bool found_match = false; |
for (size_t ii = 0; ii < machine_model_name_list_.size(); ++ii) { |
- if (machine_model_name_list_[ii] == gpu_info.machine_model_name) { |
+ if (RE2::FullMatch(base::StringToLowerASCII(gpu_info.machine_model_name), |
+ machine_model_name_list_[ii])) { |
found_match = true; |
break; |
} |
@@ -1297,9 +1238,9 @@ bool GpuControlList::GpuControlListEntry::Contains( |
if (direct_rendering_info_.get() != NULL && |
!direct_rendering_info_->Contains(gpu_info.direct_rendering)) |
return false; |
- if (cpu_brand_.get() != NULL) { |
+ if (!cpu_brand_.empty()) { |
base::CPU cpu_info; |
- if (!cpu_brand_->Contains(cpu_info.cpu_brand())) |
+ if (StringMismatch(cpu_info.cpu_brand(), cpu_brand_)) |
return false; |
} |
@@ -1317,13 +1258,13 @@ bool GpuControlList::GpuControlListEntry::NeedsMoreInfo( |
// If certain info is missing due to some error, say, we fail to collect |
// vendor_id/device_id, then even if we launch GPU process and create a gl |
// context, we won't gather such missing info, so we still return false. |
- if (driver_vendor_info_.get() && gpu_info.driver_vendor.empty()) |
+ if (!driver_vendor_info_.empty() && gpu_info.driver_vendor.empty()) |
return true; |
if (driver_version_info_.get() && gpu_info.driver_version.empty()) |
return true; |
- if (gl_vendor_info_.get() && gpu_info.gl_vendor.empty()) |
+ if (!gl_vendor_info_.empty() && gpu_info.gl_vendor.empty()) |
return true; |
- if (gl_renderer_info_.get() && gpu_info.gl_renderer.empty()) |
+ if (!gl_renderer_info_.empty() && gpu_info.gl_renderer.empty()) |
return true; |
for (size_t i = 0; i < exceptions_.size(); ++i) { |
if (exceptions_[i]->NeedsMoreInfo(gpu_info)) |