• jackhou's avatar
    Take a StringPiece when looking up CommandLine switches. · 1bd9da92
    jackhou authored
    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}
    1bd9da92
command_line_unittest.cc 15.1 KB