| Index: base/test/parallel_test_launcher.cc
 | 
| diff --git a/base/test/parallel_test_launcher.cc b/base/test/parallel_test_launcher.cc
 | 
| index cbcac9a0019c093914c9d716748eb962d8d1e84f..7fc5f652531c7ec04faf7f64e8e111d5abeb2f05 100644
 | 
| --- a/base/test/parallel_test_launcher.cc
 | 
| +++ b/base/test/parallel_test_launcher.cc
 | 
| @@ -45,9 +45,10 @@ const int kOutputTimeoutSeconds = 15;
 | 
|  void RunCallback(
 | 
|      const ParallelTestLauncher::LaunchChildGTestProcessCallback& callback,
 | 
|      int exit_code,
 | 
| +    const TimeDelta& elapsed_time,
 | 
|      bool was_timeout,
 | 
|      const std::string& output) {
 | 
| -  callback.Run(exit_code, was_timeout, output);
 | 
| +  callback.Run(exit_code, elapsed_time, was_timeout, output);
 | 
|  }
 | 
|  
 | 
|  void DoLaunchChildTestProcess(
 | 
| @@ -55,6 +56,8 @@ void DoLaunchChildTestProcess(
 | 
|      base::TimeDelta timeout,
 | 
|      scoped_refptr<MessageLoopProxy> message_loop_proxy,
 | 
|      const ParallelTestLauncher::LaunchChildGTestProcessCallback& callback) {
 | 
| +  TimeTicks start_time = TimeTicks::Now();
 | 
| +
 | 
|    // Redirect child process output to a file.
 | 
|    base::FilePath output_file;
 | 
|    CHECK(file_util::CreateTemporaryFile(&output_file));
 | 
| @@ -116,6 +119,7 @@ void DoLaunchChildTestProcess(
 | 
|        Bind(&RunCallback,
 | 
|             callback,
 | 
|             exit_code,
 | 
| +           TimeTicks::Now() - start_time,
 | 
|             was_timeout,
 | 
|             output_file_contents));
 | 
|  }
 | 
| @@ -147,6 +151,43 @@ void ParallelTestLauncher::LaunchChildGTestProcess(
 | 
|      const LaunchChildGTestProcessCallback& callback) {
 | 
|    DCHECK(thread_checker_.CalledOnValidThread());
 | 
|  
 | 
| +  LaunchSequencedChildGTestProcess(
 | 
| +      worker_pool_owner_->pool()->GetSequenceToken(),
 | 
| +      command_line,
 | 
| +      wrapper,
 | 
| +      timeout,
 | 
| +      callback);
 | 
| +}
 | 
| +
 | 
| +void ParallelTestLauncher::LaunchNamedSequencedChildGTestProcess(
 | 
| +    const std::string& token_name,
 | 
| +    const CommandLine& command_line,
 | 
| +    const std::string& wrapper,
 | 
| +    base::TimeDelta timeout,
 | 
| +    const LaunchChildGTestProcessCallback& callback) {
 | 
| +  DCHECK(thread_checker_.CalledOnValidThread());
 | 
| +
 | 
| +  LaunchSequencedChildGTestProcess(
 | 
| +      worker_pool_owner_->pool()->GetNamedSequenceToken(token_name),
 | 
| +      command_line,
 | 
| +      wrapper,
 | 
| +      timeout,
 | 
| +      callback);
 | 
| +}
 | 
| +
 | 
| +void ParallelTestLauncher::ResetOutputWatchdog() {
 | 
| +  DCHECK(thread_checker_.CalledOnValidThread());
 | 
| +  timer_.Reset();
 | 
| +}
 | 
| +
 | 
| +void ParallelTestLauncher::LaunchSequencedChildGTestProcess(
 | 
| +    SequencedWorkerPool::SequenceToken sequence_token,
 | 
| +    const CommandLine& command_line,
 | 
| +    const std::string& wrapper,
 | 
| +    base::TimeDelta timeout,
 | 
| +    const LaunchChildGTestProcessCallback& callback) {
 | 
| +  DCHECK(thread_checker_.CalledOnValidThread());
 | 
| +
 | 
|    // Record the exact command line used to launch the child.
 | 
|    CommandLine new_command_line(
 | 
|        PrepareCommandLineForGTest(command_line, wrapper));
 | 
| @@ -154,7 +195,8 @@ void ParallelTestLauncher::LaunchChildGTestProcess(
 | 
|    running_processes_map_.insert(
 | 
|        std::make_pair(launch_sequence_number_, new_command_line));
 | 
|  
 | 
| -  worker_pool_owner_->pool()->PostWorkerTask(
 | 
| +  worker_pool_owner_->pool()->PostSequencedWorkerTask(
 | 
| +      sequence_token,
 | 
|        FROM_HERE,
 | 
|        Bind(&DoLaunchChildTestProcess,
 | 
|             new_command_line,
 | 
| @@ -166,20 +208,16 @@ void ParallelTestLauncher::LaunchChildGTestProcess(
 | 
|                  callback)));
 | 
|  }
 | 
|  
 | 
| -void ParallelTestLauncher::ResetOutputWatchdog() {
 | 
| -  DCHECK(thread_checker_.CalledOnValidThread());
 | 
| -  timer_.Reset();
 | 
| -}
 | 
| -
 | 
|  void ParallelTestLauncher::OnLaunchTestProcessFinished(
 | 
|      size_t sequence_number,
 | 
|      const LaunchChildGTestProcessCallback& callback,
 | 
|      int exit_code,
 | 
| +    const TimeDelta& elapsed_time,
 | 
|      bool was_timeout,
 | 
|      const std::string& output) {
 | 
|    DCHECK(thread_checker_.CalledOnValidThread());
 | 
|    running_processes_map_.erase(sequence_number);
 | 
| -  callback.Run(exit_code, was_timeout, output);
 | 
| +  callback.Run(exit_code, elapsed_time, was_timeout, output);
 | 
|  }
 | 
|  
 | 
|  void ParallelTestLauncher::OnOutputTimeout() {
 | 
| 
 |