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

Unified Diff: gpu/config/gpu_control_list.cc

Issue 452293002: Use RE string pattern matching for blacklist strings. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 4 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 side-by-side diff with in-line comments
Download patch
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))

Powered by Google App Engine
This is Rietveld 408576698