Take a StringPiece when looking up CommandLine switches.
This avoids the string allocation when searching for a char* in a
std::map<std::string>.
CommandLine now maintains a parallel map of StringPieces that reference
the strings in |switches_|. StringPiece is trivial to construct from a
string, and only requires a strlen to construct from a char*.
On a profile with 2 extensions, HasSwitch is called ~12k times during
startup. In an ideal situation (no paging/cache pressure), the
string allocation under Windows takes ~137ns on a Xeon E5-2690 @
2.9Ghz. A strlen on a typical switch takes about 50ns, and 91% of calls
pass a char*, so there's a net saving of at least
(137 - 0.9 * 50)ns * 12k = 1.1ms from a typical startup with this
hardware. For context, Startup.BrowserMessageLoopStartTimeFromMainEntry
is typically 280-300ms on the same hardware, so we should get a ~0.4%
improvement.
BUG=472383
Review URL: https://codereview.chromium.org/1063933002
Cr-Commit-Position: refs/heads/master@{#330902}
CrOS-Libchrome-Original-Commit: 1bd9da921215cca875ec3610db0976ac7ed9909a
3 files changed