Give canary hwtests time till the next run to complete.

Reasons:
1. we see weird (non fatal) delays in running hwtests
2. devices in pool:bvt are just sitting idle between canaries
3. Tpms ask for timed out suite reruns
4. Build sheriffs are confused about how to handle a timeout
5. Most timeouts happen because of suites competing for DUTs

It shouldn't hurt to give the canaries time till the next run.
We should find a better way to monitor 1, one that doesn't involve
failing a build.

TEST=Trybot, unittests.
BUG=chromium:342502, chromium:351381

Change-Id: Ib8ec7cac87b1250eb3c3a28663c0ff2393045903
Previous-Reviewed-on: https://chromium-review.googlesource.com/189232
(cherry picked from commit 8971f9fcc5f12297aaac2f662e35a332651a2eb7)
Reviewed-on: https://chromium-review.googlesource.com/190379
Tested-by: Prashanth B <beeps@chromium.org>
Reviewed-by: Dharani Govindan <dharani@chromium.org>
Tested-by: Dharani Govindan <dharani@chromium.org>
Reviewed-by: Aviv Keshet <akeshet@chromium.org>
Commit-Queue: Prashanth B <beeps@chromium.org>
diff --git a/buildbot/cbuildbot_config.py b/buildbot/cbuildbot_config.py
index c3cf9ba..af45172 100755
--- a/buildbot/cbuildbot_config.py
+++ b/buildbot/cbuildbot_config.py
@@ -1579,7 +1579,8 @@
   git_sync=False,
   vm_tests=constants.SMOKE_SUITE_TEST_TYPE,
   disk_vm_layout='usb',
-  hw_tests=HWTestConfig.DefaultList(file_bugs=True),
+  # Canary hwtest timeout chosen based on the frequency of canary runs.
+  hw_tests=HWTestConfig.DefaultList(file_bugs=True, timeout=300 * 60),
   upload_hw_test_artifacts=True,
   signer_tests=True,
   trybot_list=True,
diff --git a/buildbot/cbuildbot_config_unittest.py b/buildbot/cbuildbot_config_unittest.py
index f5da6bc..f42b096 100755
--- a/buildbot/cbuildbot_config_unittest.py
+++ b/buildbot/cbuildbot_config_unittest.py
@@ -212,11 +212,12 @@
     """Verify that hw test timeout is in a reasonable range."""
     # The parallel library will kill the process if it's silent for longer
     # than the silent timeout.
-    max_timeout = parallel._BackgroundTask.MINIMUM_SILENT_TIMEOUT
+    max_timeout = parallel._BackgroundTask.SILENT_TIMEOUT
     for build_name, config in cbuildbot_config.config.iteritems():
       for test_config in config['hw_tests']:
         self.assertTrue(test_config.timeout < max_timeout,
-            '%s has a hw_tests_timeout that is too large.' % build_name)
+            '%s has a hw_tests_timeout of %s that is too large. Expected %s' %
+            (build_name, test_config.timeout, max_timeout))
 
   def testValidUnifiedMasterConfig(self):
     """Make sure any unified master configurations are valid."""
diff --git a/lib/parallel.py b/lib/parallel.py
index 77db901..a76ee7a 100644
--- a/lib/parallel.py
+++ b/lib/parallel.py
@@ -76,7 +76,7 @@
   # The time we allow processes to be silent. This must be greater than the
   # hw_test_timeout set in cbuildbot_config.py, and less than the timeout set
   # by buildbot itself (typically, 150 minutes.)
-  SILENT_TIMEOUT = 60 * 145
+  SILENT_TIMEOUT = 60 * 315
 
   # The amount by which we reduce the SILENT_TIMEOUT every time we launch
   # a subprocess. This helps ensure that children get a chance to enforce the