Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2570)

Unified Diff: base/test/unit_test_launcher.cc

Issue 23760003: GTTF: Add command-line switches for number of jobs and batch limit. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: re-upload Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « base/test/test_switches.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/test/unit_test_launcher.cc
diff --git a/base/test/unit_test_launcher.cc b/base/test/unit_test_launcher.cc
index f283fe8b1b7006e078a31315a92f5dbd891386e7..84952d540c8561b745ea1f2984fd451e41e14966 100644
--- a/base/test/unit_test_launcher.cc
+++ b/base/test/unit_test_launcher.cc
@@ -13,7 +13,9 @@
#include "base/format_macros.h"
#include "base/message_loop/message_loop.h"
#include "base/stl_util.h"
+#include "base/strings/string_number_conversions.h"
#include "base/strings/string_util.h"
+#include "base/sys_info.h"
#include "base/test/gtest_xml_util.h"
#include "base/test/parallel_test_launcher.h"
#include "base/test/test_launcher.h"
@@ -26,8 +28,8 @@ namespace base {
namespace {
-// This constant controls how many tests are run in a single batch.
-const size_t kTestBatchLimit = 10;
+// This constant controls how many tests are run in a single batch by default.
+const size_t kDefaultTestBatchLimit = 10;
// Flag to enable the new launcher logic.
// TODO(phajdan.jr): Remove it, http://crbug.com/236893 .
@@ -54,7 +56,9 @@ CommandLine GetCommandLineForChildGTestProcess(
class UnitTestLauncherDelegate : public TestLauncherDelegate {
public:
- explicit UnitTestLauncherDelegate(size_t jobs) : parallel_launcher_(jobs) {
+ UnitTestLauncherDelegate(size_t jobs, size_t batch_limit)
+ : parallel_launcher_(jobs),
+ batch_limit_(batch_limit) {
}
virtual ~UnitTestLauncherDelegate() {
@@ -92,7 +96,7 @@ class UnitTestLauncherDelegate : public TestLauncherDelegate {
tests_.push_back(launch_info);
// Run tests in batches no larger than the limit.
- if (tests_.size() >= kTestBatchLimit)
+ if (tests_.size() >= batch_limit_)
RunRemainingTests();
}
@@ -280,11 +284,28 @@ class UnitTestLauncherDelegate : public TestLauncherDelegate {
ParallelTestLauncher parallel_launcher_;
+ // Maximum number of tests to run in a single batch.
+ size_t batch_limit_;
+
std::vector<TestLaunchInfo> tests_;
ThreadChecker thread_checker_;
};
+bool GetSwitchValueAsInt(const std::string& switch_name, int* result) {
+ if (!CommandLine::ForCurrentProcess()->HasSwitch(switch_name))
+ return true;
+
+ std::string switch_value =
+ CommandLine::ForCurrentProcess()->GetSwitchValueASCII(switch_name);
+ if (!StringToInt(switch_value, result) || *result < 1) {
+ LOG(ERROR) << "Invalid value for " << switch_name << ": " << switch_value;
+ return false;
+ }
+
+ return true;
+}
+
} // namespace
int LaunchUnitTests(int argc,
@@ -298,22 +319,28 @@ int LaunchUnitTests(int argc,
base::TimeTicks start_time(base::TimeTicks::Now());
- fprintf(stdout,
- "Starting tests...\n"
- "IMPORTANT DEBUGGING NOTE: batches of tests are run inside their own \n"
- "process. For debugging a test inside a debugger, use the\n"
- "--gtest_filter=<your_test_name> flag along with \n"
- "--single-process-tests.\n");
- fflush(stdout);
-
testing::InitGoogleTest(&argc, argv);
TestTimeouts::Initialize();
+ int jobs = SysInfo::NumberOfProcessors();
+ if (!GetSwitchValueAsInt(switches::kTestLauncherJobs, &jobs))
+ return 1;
+
+ int batch_limit = kDefaultTestBatchLimit;
+ if (!GetSwitchValueAsInt(switches::kTestLauncherBatchLimit, &batch_limit))
+ return 1;
+
+ fprintf(stdout,
+ "Starting tests (using %d parallel jobs)...\n"
+ "IMPORTANT DEBUGGING NOTE: batches of tests are run inside their\n"
+ "own process. For debugging a test inside a debugger, use the\n"
+ "--gtest_filter=<your_test_name> flag along with\n"
+ "--single-process-tests.\n", jobs);
+ fflush(stdout);
+
MessageLoop message_loop;
- // TODO(phajdan.jr): Provide an option to adjust jobs, default to number
- // of CPU cores.
- base::UnitTestLauncherDelegate delegate(4);
+ base::UnitTestLauncherDelegate delegate(jobs, batch_limit);
int exit_code = base::LaunchTests(&delegate, argc, argv);
fprintf(stdout,
« no previous file with comments | « base/test/test_switches.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698