diff options
author | Abseil Team <absl-team@google.com> | 2024-03-05 10:36:18 (GMT) |
---|---|---|
committer | Copybara-Service <copybara-worker@google.com> | 2024-03-05 10:37:09 (GMT) |
commit | b9059aaa4cb93b3fb177670cbfd9c6d0690af37e (patch) | |
tree | 4e7561407a284cb66b326fb0a40b5ac0ec13c65d /ci | |
parent | 926f681a902cbfb84a863dafb77175f4a25be6ea (diff) | |
download | googletest-b9059aaa4cb93b3fb177670cbfd9c6d0690af37e.zip googletest-b9059aaa4cb93b3fb177670cbfd9c6d0690af37e.tar.gz googletest-b9059aaa4cb93b3fb177670cbfd9c6d0690af37e.tar.bz2 |
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 various 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: 612763676
Change-Id: I1f46e012ccb9004c009e1027e4f7c38780ffb9e2
Diffstat (limited to 'ci')
0 files changed, 0 insertions, 0 deletions