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}
Showing
Please register or sign in to comment