Make CriticalPathStatistics output optional.

Does not change the default output, but allows reuse of PhaseText
without outputting those statistics.

--
MOS_MIGRATED_REVID=104653246
diff --git a/src/main/java/com/google/devtools/build/lib/profiler/output/PhaseText.java b/src/main/java/com/google/devtools/build/lib/profiler/output/PhaseText.java
index 18083e3..e246eb1 100644
--- a/src/main/java/com/google/devtools/build/lib/profiler/output/PhaseText.java
+++ b/src/main/java/com/google/devtools/build/lib/profiler/output/PhaseText.java
@@ -13,6 +13,7 @@
 // limitations under the License.
 package com.google.devtools.build.lib.profiler.output;
 
+import com.google.common.base.Optional;
 import com.google.devtools.build.lib.profiler.ProfilePhase;
 import com.google.devtools.build.lib.profiler.ProfilerTask;
 import com.google.devtools.build.lib.profiler.statistics.CriticalPathStatistics;
@@ -35,7 +36,7 @@
 
   private final PhaseSummaryStatistics phaseSummaryStats;
   private final EnumMap<ProfilePhase, PhaseStatistics> phaseStatistics;
-  private final CriticalPathStatistics criticalPathStatistics;
+  private final Optional<CriticalPathStatistics> criticalPathStatistics;
   private final int vfsStatsLimit;
   private final int missingActionsCount;
 
@@ -46,7 +47,7 @@
       PrintStream out,
       PhaseSummaryStatistics phaseSummaryStats,
       EnumMap<ProfilePhase, PhaseStatistics> phaseStatistics,
-      CriticalPathStatistics critPathStats,
+      Optional<CriticalPathStatistics> critPathStats,
       int missingActionsCount,
       int vfsStatsLimit) {
     super(out);
@@ -147,15 +148,20 @@
         TWO_COLUMN_FORMAT, "Action dependency map creation", TimeUtilities.prettyTime(graphTime));
     lnPrintf(TWO_COLUMN_FORMAT, "Actual execution time", TimeUtilities.prettyTime(execTime));
 
-    CriticalPathText criticalPaths = new CriticalPathText(out, criticalPathStatistics, execTime);
-    criticalPaths.printTimingBreakdown();
-    printLn();
+    CriticalPathText criticalPaths = null;
+    if (criticalPathStatistics.isPresent()) {
+      criticalPaths = new CriticalPathText(out, criticalPathStatistics.get(), execTime);
+      criticalPaths.printTimingBreakdown();
+      printLn();
+    }
 
     printTimingDistribution(execPhase);
     printLn();
 
-    criticalPaths.printCriticalPaths();
-    printLn();
+    if (criticalPathStatistics.isPresent()) {
+      criticalPaths.printCriticalPaths();
+      printLn();
+    }
 
     if (missingActionsCount > 0) {
       lnPrint(missingActionsCount);
diff --git a/src/main/java/com/google/devtools/build/lib/profiler/statistics/CriticalPathStatistics.java b/src/main/java/com/google/devtools/build/lib/profiler/statistics/CriticalPathStatistics.java
index 4b514c4..35f4972 100644
--- a/src/main/java/com/google/devtools/build/lib/profiler/statistics/CriticalPathStatistics.java
+++ b/src/main/java/com/google/devtools/build/lib/profiler/statistics/CriticalPathStatistics.java
@@ -17,7 +17,6 @@
 import com.google.devtools.build.lib.profiler.ProfileInfo;
 import com.google.devtools.build.lib.profiler.ProfileInfo.CriticalPathEntry;
 import com.google.devtools.build.lib.profiler.ProfileInfo.Task;
-import com.google.devtools.build.lib.profiler.ProfilePhase;
 import com.google.devtools.build.lib.profiler.ProfilerTask;
 import com.google.devtools.build.lib.util.Pair;
 
@@ -92,9 +91,6 @@
   private final long workerWaitTime;
   private final long mainThreadWaitTime;
 
-  /**
-   * Only call this constructor if {@link ProfilePhase#EXECUTE} was actually run.
-   */
   public CriticalPathStatistics(ProfileInfo info) {
     totalPath = info.getCriticalPath(FILTER_NONE);
     info.analyzeCriticalPath(FILTER_NONE, totalPath);
@@ -102,7 +98,7 @@
     optimalPath = info.getCriticalPath(DEFAULT_FILTER);
     info.analyzeCriticalPath(DEFAULT_FILTER, optimalPath);
 
-    if (totalPath.isComponent()) {
+    if (totalPath == null || totalPath.isComponent()) {
       this.workerWaitTime = 0;
       this.mainThreadWaitTime = 0;
       criticalPathDurations = Collections.emptyList();
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/commands/ProfileCommand.java b/src/main/java/com/google/devtools/build/lib/runtime/commands/ProfileCommand.java
index 115236e..96384c4 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/commands/ProfileCommand.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/commands/ProfileCommand.java
@@ -14,6 +14,7 @@
 package com.google.devtools.build.lib.runtime.commands;
 
 import com.google.common.base.Joiner;
+import com.google.common.base.Optional;
 import com.google.common.collect.Iterables;
 import com.google.devtools.build.lib.events.Event;
 import com.google.devtools.build.lib.events.EventHandler;
@@ -222,7 +223,7 @@
                     out,
                     phaseSummaryStatistics,
                     phaseStatistics,
-                    critPathStats,
+                    Optional.of(critPathStats),
                     info.getMissingActionsCount(),
                     opts.vfsStatsLimit)
                 .print();