blob: 3a70b21f42fa3f2b0301f42a404a15e69716b090 [file] [log] [blame]
// Copyright 2015 The Bazel Authors. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package com.google.devtools.build.lib.profiler.output;
import com.google.devtools.build.lib.profiler.ProfilePhase;
import com.google.devtools.build.lib.profiler.statistics.CriticalPathStatistics;
import com.google.devtools.build.lib.profiler.statistics.PhaseSummaryStatistics;
import java.io.PrintStream;
import java.time.Duration;
/** Output {@link PhaseSummaryStatistics} and {@link CriticalPathStatistics} in text format. */
public final class PhaseText extends TextPrinter {
private final PhaseSummaryStatistics phaseSummaryStats;
private final CriticalPathStatistics criticalPathStatistics;
public PhaseText(
PrintStream out,
PhaseSummaryStatistics phaseSummaryStats,
CriticalPathStatistics criticalPathStatistics) {
super(out);
this.phaseSummaryStats = phaseSummaryStats;
this.criticalPathStatistics = criticalPathStatistics;
}
public void print() {
printPhaseSummaryStatistics();
CriticalPathText criticalPaths = new CriticalPathText(out, criticalPathStatistics);
criticalPaths.printCriticalPaths();
printLn();
}
/**
* Print a table for the phase overview with runtime and runtime percentage per phase and total.
*/
private void printPhaseSummaryStatistics() {
lnPrint("=== PHASE SUMMARY INFORMATION ===\n");
for (ProfilePhase phase : phaseSummaryStats) {
long phaseDurationInMs =
Duration.ofNanos(phaseSummaryStats.getDurationNanos(phase)).toMillis();
double relativeDuration = phaseSummaryStats.getRelativeDuration(phase);
lnPrintf(
THREE_COLUMN_FORMAT,
"Total " + phase.nick + " phase time",
String.format("%.3f s", phaseDurationInMs / 1000.0),
prettyPercentage(relativeDuration));
}
lnPrintf("------------------------------------------------");
long totalDurationInMs = Duration.ofNanos(phaseSummaryStats.getTotalDuration()).toMillis();
lnPrintf(
THREE_COLUMN_FORMAT,
"Total run time",
String.format("%.3f s", totalDurationInMs / 1000.0),
"100.00%");
printLn();
}
}