Skip to content

Commit

Permalink
Record Error Prone initialization time
Browse files Browse the repository at this point in the history
PiperOrigin-RevId: 498571979
Change-Id: I62ff6eb716e06bd363cba8b5aca3df896eb1f40e
  • Loading branch information
cushon authored and copybara-github committed Dec 30, 2022
1 parent 2b2bea4 commit e7be4b1
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@

package com.google.devtools.build.buildjar.javac.plugins.errorprone;


import com.google.common.base.Stopwatch;
import com.google.common.collect.ImmutableList;
import com.google.devtools.build.buildjar.InvalidCommandLineException;
Expand All @@ -39,6 +38,7 @@
import java.time.Duration;
import java.util.List;
import java.util.Map;
import java.util.Optional;

/**
* A plugin that performs Error Prone analysis. Error Prone is a static analysis framework that we
Expand Down Expand Up @@ -135,9 +135,22 @@ public void postFlow(Env<AttrContext> env) {
@Override
public void finish() {
statisticsBuilder.totalErrorProneTime(elapsed.elapsed());
initializationTime(timings).ifPresent(statisticsBuilder::errorProneInitializationTime);
timings.timings().entrySet().stream()
.sorted(Map.Entry.<String, Duration>comparingByValue().reversed())
.limit(10) // best-effort to stay under the action metric size limit
.forEachOrdered(e -> statisticsBuilder.addBugpatternTiming(e.getKey(), e.getValue()));
}

// TODO(cushon): remove once ErrorProneTimings#initializationTime makes it into an EP release
private static Optional<Duration> initializationTime(ErrorProneTimings timings) {
try {
return Optional.of(
(Duration) ErrorProneTimings.class.getMethod("initializationTime").invoke(timings));
} catch (NoSuchMethodException e) {
return Optional.empty();
} catch (ReflectiveOperationException e) {
throw new LinkageError(e.getMessage(), e);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,8 @@ private static Builder newBuilder() {

public abstract Optional<Duration> totalErrorProneTime();

public abstract Optional<Duration> errorProneInitializationTime();

public abstract ImmutableMap<String, Duration> bugpatternTiming();

public abstract Optional<Duration> totalProcessorTime();
Expand Down Expand Up @@ -104,6 +106,8 @@ public abstract static class Builder {

public abstract Builder totalErrorProneTime(Duration totalErrorProneTime);

public abstract Builder errorProneInitializationTime(Duration errorProneInitializationTime);

public abstract Builder totalProcessorTime(Duration totalProcessorTime);

abstract ImmutableMap.Builder<String, Duration> bugpatternTimingBuilder();
Expand Down

0 comments on commit e7be4b1

Please sign in to comment.