Chromium Code Reviews| Index: base/command_line.cc |
| diff --git a/base/command_line.cc b/base/command_line.cc |
| index 3e143cc5d449f358936726f33c8d3fda95064f03..136a8b34ffb744e24416bb72953c79f83345d06b 100644 |
| --- a/base/command_line.cc |
| +++ b/base/command_line.cc |
| @@ -93,6 +93,14 @@ void AppendSwitchesAndArguments(CommandLine* command_line, |
| } |
| } |
| +bool ContainsUpperASCII(const char* string) { |
| + for (; *string; ++string) { |
| + if (*string >= 'A' && *string <= 'Z') |
| + return true; |
| + } |
| + return false; |
| +} |
| + |
| // Lowercase switches for backwards compatiblity *on Windows*. |
| #if defined(OS_WIN) |
| std::string LowerASCIIOnWindows(const std::string& string) { |
| @@ -263,11 +271,18 @@ void CommandLine::SetProgram(const FilePath& program) { |
| } |
| bool CommandLine::HasSwitch(const std::string& switch_string) const { |
|
tapted
2015/04/02 01:46:14
How many times is the std::string version called n
jackhou1
2015/04/02 04:51:51
Agreed. 1% of calls.
|
| - return switches_.find(LowerASCIIOnWindows(switch_string)) != switches_.end(); |
| +#if defined(OS_WIN) |
| + if (ContainsUpperASCII(switch_string.c_str())) |
| + return switches_.find(LowerASCIIOnWindows(switch_string)) != |
| + switches_.end(); |
| +#endif |
| + |
| + return switches_.find(switch_string) != switches_.end(); |
| } |
| bool CommandLine::HasSwitch(const char string_constant[]) const { |
| - return HasSwitch(std::string(string_constant)); |
| + DCHECK(!ContainsUpperASCII(string_constant)); |
|
tapted
2015/04/02 01:46:14
I think we can avoid the extra function with somet
jackhou1
2015/04/02 04:51:51
Done.
|
| + return switches_.find(std::string(string_constant)) != switches_.end(); |
|
tapted
2015/04/02 01:46:15
is the std::string(..) still needed?
jackhou1
2015/04/02 04:51:51
Nope, but the one in the DEBUG_EQ is.
|
| } |
| std::string CommandLine::GetSwitchValueASCII( |
| @@ -291,8 +306,15 @@ FilePath CommandLine::GetSwitchValuePath( |
| CommandLine::StringType CommandLine::GetSwitchValueNative( |
| const std::string& switch_string) const { |
| - SwitchMap::const_iterator result = |
| - switches_.find(LowerASCIIOnWindows(switch_string)); |
| +#if defined(OS_WIN) |
|
tapted
2015/04/02 01:46:14
I think we should defer this until there's a char[
jackhou1
2015/04/02 04:51:51
This method is about 9% of lookups during startup,
|
| + if (ContainsUpperASCII(switch_string.c_str())) { |
| + SwitchMap::const_iterator result = |
| + switches_.find(LowerASCIIOnWindows(switch_string)); |
| + return result == switches_.end() ? StringType() : result->second; |
| + } |
| +#endif |
| + |
| + SwitchMap::const_iterator result = switches_.find(switch_string); |
| return result == switches_.end() ? StringType() : result->second; |
| } |