Revert "Finish build_packages before kicking off background stages."

CL:185074 reverted an optimization because that optimization was not
helping us anymore. Today, I have re-tested, and re-enabling the
optimization speeds up our group builders by ~60-90 minutes in practice.
This speedup can be reproduced using trybots.

When CL:185074 was first written, we built Chrome from scratch on every
board unnecessarily due to chromium:341136. In that environment,
CL:185074 gave a tiny boost to performance because it reduced the load on
the machine. But, now that we have a bunch of free CPU power, CL:185074
is very negative for performance, so reverting it helps.

BUG=chromium:341232
TEST=Remote trybot run of parrot-release-group
Change-Id: I147693f14fbb106d6c79f7b7bc36a04d6de91c08
Reviewed-on: https://chromium-review.googlesource.com/188472
Reviewed-by: Aviv Keshet <akeshet@chromium.org>
Commit-Queue: David James <davidjames@chromium.org>
Tested-by: David James <davidjames@chromium.org>
diff --git a/scripts/cbuildbot.py b/scripts/cbuildbot.py
index a4238b4..341766b 100644
--- a/scripts/cbuildbot.py
+++ b/scripts/cbuildbot.py
@@ -542,34 +542,31 @@
         self.archive_stages[board_config] = archive_stage
         tasks.append((builder_run, board, archive_stage))
 
-    # Run BuildPackages and BuildImage in sequence.
-    for builder_run, board, archive_stage in tasks:
-      compilecheck = (builder_run.config.compilecheck or
-                      builder_run.options.compilecheck)
-      if not compilecheck:
-        # Run BuildPackages and BuildImage in the foreground, generating
-        # or using PGO data if requested.
-        kwargs = {'archive_stage': archive_stage, 'builder_run': builder_run}
-        if builder_run.config.pgo_generate:
-          kwargs['pgo_generate'] = True
-        elif builder_run.config.pgo_use:
-          kwargs['pgo_use'] = True
-
-        self._RunStage(stages.BuildPackagesStage, board, **kwargs)
-        self._RunStage(stages.BuildImageStage, board, **kwargs)
-
-        if builder_run.config.pgo_generate:
-          suite = cbuildbot_config.PGORecordTest()
-          self._RunStage(stages.HWTestStage, board, archive_stage, suite,
-                         builder_run=builder_run)
-
     # Set up a process pool to run test/archive stages in the background.
-    # This process runs the task_runner for each board added to the queue.
+    # This process runs task(board) for each board added to the queue.
     task_runner = self._RunBackgroundStagesForBoard
     with parallel.BackgroundTaskRunner(task_runner) as queue:
       for builder_run, board, archive_stage in tasks:
         compilecheck = (builder_run.config.compilecheck or
                         builder_run.options.compilecheck)
+        if not compilecheck:
+          # Run BuildPackages and BuildImage in the foreground, generating
+          # or using PGO data if requested.
+          kwargs = {'archive_stage': archive_stage, 'builder_run': builder_run}
+          if builder_run.config.pgo_generate:
+            kwargs['pgo_generate'] = True
+          elif builder_run.config.pgo_use:
+            kwargs['pgo_use'] = True
+
+          self._RunStage(stages.BuildPackagesStage, board, **kwargs)
+          self._RunStage(stages.BuildImageStage, board, **kwargs)
+
+          if builder_run.config.pgo_generate:
+            suite = cbuildbot_config.PGORecordTest()
+            self._RunStage(stages.HWTestStage, board, archive_stage, suite,
+                           builder_run=builder_run)
+
+        # Kick off our background stages.
         queue.put([builder_run, board, compilecheck])
 
   def RunStages(self):