Index: base/test/launcher/test_launcher.h |
diff --git a/base/test/launcher/test_launcher.h b/base/test/launcher/test_launcher.h |
index 177d12d934b381eaadcebd9d779fd81475218b33..1ff1c05ea4706f457fc6cdcb7d3c729e63066dc0 100644 |
--- a/base/test/launcher/test_launcher.h |
+++ b/base/test/launcher/test_launcher.h |
@@ -14,6 +14,7 @@ |
#include "base/test/launcher/test_result.h" |
#include "base/test/launcher/test_results_tracker.h" |
#include "base/time/time.h" |
+#include "base/timer/timer.h" |
class CommandLine; |
@@ -25,6 +26,7 @@ class TestInfo; |
namespace base { |
struct LaunchOptions; |
+class SequencedWorkerPoolOwner; |
class TestLauncher; |
// Constants for GTest command-line flags. |
@@ -80,12 +82,31 @@ class TestLauncherDelegate { |
// Launches tests using a TestLauncherDelegate. |
class TestLauncher { |
public: |
- explicit TestLauncher(TestLauncherDelegate* launcher_delegate); |
+ // Constructor. |parallel_jobs| is the limit of simultaneous parallel test |
+ // jobs. |
+ TestLauncher(TestLauncherDelegate* launcher_delegate, size_t parallel_jobs); |
~TestLauncher(); |
// Runs the launcher. Must be called at most once. |
bool Run(int argc, char** argv) WARN_UNUSED_RESULT; |
+ // Callback called after a child process finishes. First argument is the exit |
+ // code, second one is child process elapsed time, third one is true if |
+ // the child process was terminated because of a timeout, and fourth one |
+ // contains output of the child (stdout and stderr together). |
+ typedef Callback<void(int, const TimeDelta&, bool, const std::string&)> |
+ LaunchChildGTestProcessCallback; |
+ |
+ // Launches a child process (assumed to be gtest-based binary) using |
+ // |command_line|. If |wrapper| is not empty, it is prepended to the final |
+ // command line. If the child process is still running after |timeout|, it |
+ // is terminated. After the child process finishes |callback| is called |
+ // on the same thread this method was called. |
+ void LaunchChildGTestProcess(const CommandLine& command_line, |
+ const std::string& wrapper, |
+ base::TimeDelta timeout, |
+ const LaunchChildGTestProcessCallback& callback); |
+ |
// Called when a test has finished running. |
void OnTestFinished(const TestResult& result); |
@@ -97,11 +118,27 @@ class TestLauncher { |
void RunTestIteration(); |
- void OnAllTestsStarted(); |
- |
// Saves test results summary as JSON if requested from command line. |
void MaybeSaveSummaryAsJSON(); |
+ // Called on a worker thread after a child process finishes. |
+ void OnLaunchTestProcessFinished( |
+ const LaunchChildGTestProcessCallback& callback, |
+ int exit_code, |
+ const TimeDelta& elapsed_time, |
+ bool was_timeout, |
+ const std::string& output); |
+ |
+ // Called by the delay timer when no output was made for a while. |
+ void OnOutputTimeout(); |
+ |
+ // Make sure we don't accidentally call the wrong methods e.g. on the worker |
+ // pool thread. With lots of callbacks used this is non-trivial. |
+ // Should be the first member so that it's destroyed last: when destroying |
+ // other members, especially the worker pool, we may check the code is running |
+ // on the correct thread. |
+ ThreadChecker thread_checker_; |
+ |
TestLauncherDelegate* launcher_delegate_; |
// Support for outer sharding, just like gtest does. |
@@ -141,6 +178,12 @@ class TestLauncher { |
TestResultsTracker results_tracker_; |
+ // Watchdog timer to make sure we do not go without output for too long. |
+ DelayTimer<TestLauncher> watchdog_timer_; |
+ |
+ // Worker pool used to launch processes in parallel. |
+ scoped_ptr<SequencedWorkerPoolOwner> worker_pool_owner_; |
+ |
DISALLOW_COPY_AND_ASSIGN(TestLauncher); |
}; |