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();