Implement unit test specific test launcher timeout

BUG=402213
R=dalecurtis@chromium.org, jam@chromium.org

Review URL: https://codereview.chromium.org/476543004

Cr-Commit-Position: refs/heads/master@{#291673}


CrOS-Libchrome-Original-Commit: e8e762a3d4f51fc5d765cf23dd8d3f7d138d779c
diff --git a/base/test/launcher/unit_test_launcher.cc b/base/test/launcher/unit_test_launcher.cc
index 0cbae2f..57552e0 100644
--- a/base/test/launcher/unit_test_launcher.cc
+++ b/base/test/launcher/unit_test_launcher.cc
@@ -186,7 +186,7 @@
     test_launcher->LaunchChildGTestProcess(
         cmd_line,
         std::string(),
-        TestTimeouts::test_launcher_timeout(),
+        TestTimeouts::test_launcher_unit_timeout(),
         use_job_objects_ ? TestLauncher::USE_JOB_OBJECTS : 0,
         Bind(&UnitTestLauncherDelegate::SerialGTestCallback,
              Unretained(this),
@@ -218,7 +218,7 @@
     // Note: do NOT parse child's stdout to do that, it's known to be
     // unreliable (e.g. buffering issues can mix up the output).
     base::TimeDelta timeout =
-        test_names.size() * TestTimeouts::test_launcher_timeout();
+        test_names.size() * TestTimeouts::test_launcher_unit_timeout();
 
     GTestCallbackState callback_state;
     callback_state.test_launcher = test_launcher;
@@ -345,7 +345,7 @@
             // For consistent handling of tests independent of order and other
             // factors, mark them as timing out.
             if (test_result.elapsed_time >
-                TestTimeouts::test_launcher_timeout()) {
+                TestTimeouts::test_launcher_unit_timeout()) {
               test_result.status = TestResult::TEST_TIMEOUT;
             }
           }
diff --git a/base/test/test_switches.cc b/base/test/test_switches.cc
index c970fd2..b23538c 100644
--- a/base/test/test_switches.cc
+++ b/base/test/test_switches.cc
@@ -50,6 +50,7 @@
 
 // Time (in milliseconds) that the tests should wait before timing out.
 const char switches::kTestLauncherTimeout[] = "test-launcher-timeout";
+const char switches::kTestLauncherUnitTimeout[] = "test-launcher-unit-timeout";
 // TODO(phajdan.jr): Clean up the switch names.
 const char switches::kTestTinyTimeout[] = "test-tiny-timeout";
 const char switches::kUiTestActionTimeout[] = "ui-test-action-timeout";
diff --git a/base/test/test_switches.h b/base/test/test_switches.h
index c228cf0..b7d0860 100644
--- a/base/test/test_switches.h
+++ b/base/test/test_switches.h
@@ -21,6 +21,7 @@
 extern const char kTestLauncherShardIndex[];
 extern const char kTestLauncherTotalShards[];
 extern const char kTestLauncherTimeout[];
+extern const char kTestLauncherUnitTimeout[];
 extern const char kTestTinyTimeout[];
 extern const char kUiTestActionTimeout[];
 extern const char kUiTestActionMaxTimeout[];
diff --git a/base/test/test_timeouts.cc b/base/test/test_timeouts.cc
index 7392450..92bcf9b 100644
--- a/base/test/test_timeouts.cc
+++ b/base/test/test_timeouts.cc
@@ -72,6 +72,7 @@
 int TestTimeouts::action_max_timeout_ms_ = 30000;
 #endif  // NDEBUG
 
+int TestTimeouts::test_launcher_unit_timeout_ms_ = 5000;
 int TestTimeouts::test_launcher_timeout_ms_ = 45000;
 
 // static
@@ -98,12 +99,16 @@
                     &action_max_timeout_ms_);
 
   // Test launcher timeout is independent from anything above action timeout.
-  InitializeTimeout(switches::kTestLauncherTimeout, action_timeout_ms_,
+  InitializeTimeout(switches::kTestLauncherUnitTimeout, action_timeout_ms_,
+                    &test_launcher_unit_timeout_ms_);
+  InitializeTimeout(switches::kTestLauncherTimeout,
+                    test_launcher_unit_timeout_ms_,
                     &test_launcher_timeout_ms_);
 
   // The timeout values should be increasing in the right order.
   CHECK(tiny_timeout_ms_ <= action_timeout_ms_);
   CHECK(action_timeout_ms_ <= action_max_timeout_ms_);
 
-  CHECK(action_timeout_ms_ <= test_launcher_timeout_ms_);
+  CHECK(action_timeout_ms_ <= test_launcher_unit_timeout_ms_);
+  CHECK(test_launcher_unit_timeout_ms_ <= test_launcher_timeout_ms_);
 }
diff --git a/base/test/test_timeouts.h b/base/test/test_timeouts.h
index 2819e4a..5f79264 100644
--- a/base/test/test_timeouts.h
+++ b/base/test/test_timeouts.h
@@ -38,7 +38,14 @@
     return base::TimeDelta::FromMilliseconds(action_max_timeout_ms_);
   }
 
-  // Timeout for a single test launched used built-in test launcher.
+  // Timeout for a single unit test launched using built-in test launcher.
+  // Do not use outside of the test launcher.
+  static base::TimeDelta test_launcher_unit_timeout() {
+    DCHECK(initialized_);
+    return base::TimeDelta::FromMilliseconds(test_launcher_unit_timeout_ms_);
+  }
+
+  // Timeout for a single test launched using built-in test launcher.
   // Do not use outside of the test launcher.
   static base::TimeDelta test_launcher_timeout() {
     DCHECK(initialized_);
@@ -51,6 +58,7 @@
   static int tiny_timeout_ms_;
   static int action_timeout_ms_;
   static int action_max_timeout_ms_;
+  static int test_launcher_unit_timeout_ms_;
   static int test_launcher_timeout_ms_;
 
   DISALLOW_IMPLICIT_CONSTRUCTORS(TestTimeouts);