diff options
author | Abseil Team <absl-team@google.com> | 2024-03-07 23:53:04 -0800 |
---|---|---|
committer | Copybara-Service <copybara-worker@google.com> | 2024-03-07 23:53:47 -0800 |
commit | e1a38bc3707741d249fa22d2064552a08e37555b (patch) | |
tree | 596321a4fa5a9329f510e8972a22d42d9590aa7a /googlemock | |
parent | 31993dfa6b47e11c7a6ef67cfa8af90892b9bd1c (diff) | |
download | googletest-e1a38bc3707741d249fa22d2064552a08e37555b.zip googletest-e1a38bc3707741d249fa22d2064552a08e37555b.tar.gz googletest-e1a38bc3707741d249fa22d2064552a08e37555b.tar.bz2 |
Reland: Optimize Google Test process startup
Google Test performs hidden test registration during process
startup. For test binaries that contain a large number of tests, this
registration can be costly. In this CL, we reduce the overhead of
registration via several tactics:
- Treat CodeLocation and FilePath as value types, using std::move to
pass them around.
- Reduce string copies in various places by either passing std::string
values via std::move, or passing const-refs to std::string instances.
- Use std::to_string to stringify an int in DefaultParamName rather than
a std::stringstream.
- Pull some std::string instances out of nested loops in
ParameterizedTestSuiteInfo::RegisterTests so as to reuse some
allocations, and replace stringstream with ordinary string appends.
- Use std::unordered_map in UnitTestImpl::GetTestSuite and
ParameterizedTestSuiteRegistry::GetTestSuitePatternHolder to spend a
little memory to turn O(N) lookups into constant time lookpus.
- Use range-based for loops in a few places.
- Use emplace-ish methods to add to containers where appropriate.
All together, these changes reduce the overall runtime of a series of 50
death tests in a single Chromium test executable by ~38% due to the
fact that the registration costs are paid in every death test's child
process.
PiperOrigin-RevId: 613833210
Change-Id: I51a262a770edff98ffa1e3b60c4d78a8308f9a9f
Diffstat (limited to 'googlemock')
0 files changed, 0 insertions, 0 deletions