aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTakuto Ikuta <tikuta@google.com>2018-06-12 18:06:29 +0900
committerTakuto Ikuta <tikuta@google.com>2018-06-13 05:53:18 +0900
commitf4d0631a3970d88199a56883e6148ada05aed7b5 (patch)
tree3287ed16f0b517bd22174cc787976b533d78443d
parent1bccd6f353bdb0b6dbf2786869d4ed2d651ddc34 (diff)
downloadgoogletest-f4d0631a3970d88199a56883e6148ada05aed7b5.tar.gz
googletest-f4d0631a3970d88199a56883e6148ada05aed7b5.tar.bz2
googletest-f4d0631a3970d88199a56883e6148ada05aed7b5.zip
Reduce the number of strcmp calling while initialization
When we do parallel test execution with a process for a test, initialization of gtest become performance bottleneck when the test binary contains many testcases. Especially, some parameterlized test in chromium browser affected by largely when address sanitizer is enabled. Address sanitizer does not allow using optimized strcmp function and test addition in parameterized test require lookup of test case using strcmp. This patch reduces the number of strcmp, it is called when registering parameterized test. Using reverse iterator improves the time to find registered tests in such case. Some tests for chromium browser using address sanitizer finished 2x faster with this patch.
-rw-r--r--googletest/src/gtest.cc6
1 files changed, 3 insertions, 3 deletions
diff --git a/googletest/src/gtest.cc b/googletest/src/gtest.cc
index 3498ffe4..bd6ab7bb 100644
--- a/googletest/src/gtest.cc
+++ b/googletest/src/gtest.cc
@@ -4907,11 +4907,11 @@ TestCase* UnitTestImpl::GetTestCase(const char* test_case_name,
Test::SetUpTestCaseFunc set_up_tc,
Test::TearDownTestCaseFunc tear_down_tc) {
// Can we find a TestCase with the given name?
- const std::vector<TestCase*>::const_iterator test_case =
- std::find_if(test_cases_.begin(), test_cases_.end(),
+ const std::vector<TestCase*>::const_reverse_iterator test_case =
+ std::find_if(test_cases_.rbegin(), test_cases_.rend(),
TestCaseNameIs(test_case_name));
- if (test_case != test_cases_.end())
+ if (test_case != test_cases_.rend())
return *test_case;
// No. Let's create one.