Index: base/test/launcher/test_launcher.cc |
diff --git a/base/test/launcher/test_launcher.cc b/base/test/launcher/test_launcher.cc |
index a51d97e31207acc6c5e85e74eaacc8400e94170d..0d2151fd54a8f248eb851d53a2933f291a84d44e 100644 |
--- a/base/test/launcher/test_launcher.cc |
+++ b/base/test/launcher/test_launcher.cc |
@@ -19,6 +19,7 @@ |
#include "base/location.h" |
#include "base/logging.h" |
#include "base/macros.h" |
+#include "base/memory/ptr_util.h" |
#include "base/message_loop/message_loop.h" |
#include "base/process/kill.h" |
#include "base/process/launch.h" |
@@ -37,6 +38,7 @@ |
#include "base/test/sequenced_worker_pool_owner.h" |
#include "base/test/test_switches.h" |
#include "base/test/test_timeouts.h" |
+#include "base/threading/thread.h" |
#include "base/threading/thread_checker.h" |
#include "base/threading/thread_task_runner_handle.h" |
#include "base/time/time.h" |
@@ -573,7 +575,7 @@ void TestLauncher::LaunchChildGTestProcess( |
// JSON summary. |
bool redirect_stdio = (parallel_jobs_ > 1) || BotModeEnabled(); |
- worker_pool_owner_->pool()->PostWorkerTask( |
+ GetTaskRunner()->PostTask( |
FROM_HERE, |
Bind(&DoLaunchChildTestProcess, new_command_line, timeout, options, |
redirect_stdio, RetainedRef(ThreadTaskRunnerHandle::Get()), |
@@ -801,10 +803,10 @@ bool TestLauncher::Init() { |
force_run_broken_tests_ = true; |
if (command_line->HasSwitch(switches::kTestLauncherJobs)) { |
- int jobs = -1; |
- if (!StringToInt(command_line->GetSwitchValueASCII( |
+ size_t jobs = 0U; |
+ if (!StringToSizeT(command_line->GetSwitchValueASCII( |
switches::kTestLauncherJobs), &jobs) || |
- jobs < 0) { |
+ !jobs) { |
LOG(ERROR) << "Invalid value for " << switches::kTestLauncherJobs; |
return false; |
} |
@@ -813,13 +815,18 @@ bool TestLauncher::Init() { |
} else if (command_line->HasSwitch(kGTestFilterFlag) && !BotModeEnabled()) { |
// Do not run jobs in parallel by default if we are running a subset of |
// the tests and if bot mode is off. |
- parallel_jobs_ = 1; |
+ parallel_jobs_ = 1U; |
} |
fprintf(stdout, "Using %" PRIuS " parallel jobs.\n", parallel_jobs_); |
fflush(stdout); |
- worker_pool_owner_.reset( |
- new SequencedWorkerPoolOwner(parallel_jobs_, "test_launcher")); |
+ if (parallel_jobs_ > 1U) { |
+ worker_pool_owner_ = MakeUnique<SequencedWorkerPoolOwner>( |
+ parallel_jobs_, "test_launcher"); |
+ } else { |
+ worker_thread_ = MakeUnique<Thread>("test_launcher"); |
+ worker_thread_->Start(); |
+ } |
if (command_line->HasSwitch(switches::kTestLauncherFilterFile) && |
command_line->HasSwitch(kGTestFilterFlag)) { |
@@ -1113,6 +1120,17 @@ void TestLauncher::OnOutputTimeout() { |
watchdog_timer_.Reset(); |
} |
+scoped_refptr<TaskRunner> TestLauncher::GetTaskRunner() { |
+ // One and only one of |worker_pool_owner_| or |worker_thread_| should be |
+ // ready. |
+ DCHECK_NE(!!worker_pool_owner_, !!worker_thread_); |
+ |
+ if (worker_pool_owner_) |
+ return worker_pool_owner_->pool(); |
+ DCHECK(worker_thread_->IsRunning()); |
+ return worker_thread_->task_runner(); |
+} |
+ |
std::string GetTestOutputSnippet(const TestResult& result, |
const std::string& full_output) { |
size_t run_pos = full_output.find(std::string("[ RUN ] ") + |