diff --git a/check_api/src/main/java/com/google/errorprone/ErrorProneAnalyzer.java b/check_api/src/main/java/com/google/errorprone/ErrorProneAnalyzer.java index b6bdff7f6d1..f1c533b39d6 100644 --- a/check_api/src/main/java/com/google/errorprone/ErrorProneAnalyzer.java +++ b/check_api/src/main/java/com/google/errorprone/ErrorProneAnalyzer.java @@ -72,13 +72,17 @@ private static Supplier scansPlugins( () -> { // we can't load plugins from the processorpath until the filemanager has been // initialized, so do it lazily - try { + ErrorProneTimings timings = ErrorProneTimings.instance(context); + try (AutoCloseable unused = timings.initializationTimeSpan()) { return ErrorProneScannerTransformer.create( ErrorPronePlugins.loadPlugins(scannerSupplier, context) .applyOverrides(errorProneOptions) .get()); } catch (InvalidCommandLineOptionException e) { throw new PropagatedException(e); + } catch (Exception e) { + // for the timing span, should be impossible + throw new AssertionError(e); } }); } diff --git a/check_api/src/main/java/com/google/errorprone/ErrorProneTimings.java b/check_api/src/main/java/com/google/errorprone/ErrorProneTimings.java index 4b397022f27..1e2d61ec03d 100644 --- a/check_api/src/main/java/com/google/errorprone/ErrorProneTimings.java +++ b/check_api/src/main/java/com/google/errorprone/ErrorProneTimings.java @@ -45,6 +45,8 @@ private ErrorProneTimings(Context context) { private final Map timers = new HashMap<>(); + private final Stopwatch initializationTime = Stopwatch.createUnstarted(); + /** Creates a timing span for the given {@link Suppressible}. */ public AutoCloseable span(Suppressible suppressible) { String key = suppressible.canonicalName(); @@ -52,9 +54,20 @@ public AutoCloseable span(Suppressible suppressible) { return () -> sw.stop(); } + /** Creates a timing span for initialization. */ + public AutoCloseable initializationTimeSpan() { + initializationTime.start(); + return () -> initializationTime.stop(); + } + /** Returns the elapsed durations of each timer. */ public ImmutableMap timings() { return timers.entrySet().stream() .collect(toImmutableMap(e -> e.getKey(), e -> e.getValue().elapsed())); } + + /** Returns the elapsed initialization time. */ + public Duration initializationTime() { + return initializationTime.elapsed(); + } }