91 lines
3.2 KiB
Java
91 lines
3.2 KiB
Java
/*
|
|
* Copyright (C) 2018 The Dagger Authors.
|
|
*
|
|
* 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 dagger.internal.codegen;
|
|
|
|
import com.google.auto.common.BasicAnnotationProcessor.ProcessingStep;
|
|
import com.google.auto.value.AutoValue;
|
|
import com.google.common.collect.ImmutableList;
|
|
import com.google.common.collect.ImmutableMap;
|
|
import com.google.errorprone.annotations.CanIgnoreReturnValue;
|
|
import java.time.Duration;
|
|
|
|
/** Statistics collected over the course of Dagger annotation processing. */
|
|
@AutoValue
|
|
abstract class DaggerStatistics {
|
|
/** Returns a new {@link Builder}. */
|
|
static Builder builder() {
|
|
return new AutoValue_DaggerStatistics.Builder();
|
|
}
|
|
|
|
/** Returns a new {@link RoundStatistics} builder. */
|
|
static RoundStatistics.Builder roundBuilder() {
|
|
return new AutoValue_DaggerStatistics_RoundStatistics.Builder();
|
|
}
|
|
|
|
/** Total time spent in Dagger annotation processing. */
|
|
abstract Duration totalProcessingTime();
|
|
|
|
/** List of statistics for processing rounds that the Dagger processor handled. */
|
|
abstract ImmutableList<RoundStatistics> rounds();
|
|
|
|
/** Builder for {@link DaggerStatistics}. */
|
|
@AutoValue.Builder
|
|
abstract static class Builder {
|
|
/** Sets the given duration for the total time spent in Dagger processing. */
|
|
@CanIgnoreReturnValue
|
|
abstract Builder setTotalProcessingTime(Duration totalProcessingTime);
|
|
|
|
/** Returns a builder for adding processing round statistics. */
|
|
abstract ImmutableList.Builder<RoundStatistics> roundsBuilder();
|
|
|
|
/** Adds the given {@code round} statistics. */
|
|
@CanIgnoreReturnValue
|
|
final Builder addRound(RoundStatistics round) {
|
|
roundsBuilder().add(round);
|
|
return this;
|
|
}
|
|
|
|
/** Creates a new {@link DaggerStatistics} instance. */
|
|
abstract DaggerStatistics build();
|
|
}
|
|
|
|
/** Statistics for each processing step in a single processing round. */
|
|
@AutoValue
|
|
abstract static class RoundStatistics {
|
|
/** Map of processing step class to duration of that step for this round. */
|
|
abstract ImmutableMap<Class<? extends ProcessingStep>, Duration> stepDurations();
|
|
|
|
/** Builder for {@link RoundStatistics}. */
|
|
@AutoValue.Builder
|
|
abstract static class Builder {
|
|
/** Returns a builder for adding durations for each processing step for the round. */
|
|
abstract ImmutableMap.Builder<Class<? extends ProcessingStep>, Duration>
|
|
stepDurationsBuilder();
|
|
|
|
/** Adds the given {@code duration} for the given {@code step}. */
|
|
@CanIgnoreReturnValue
|
|
final Builder addStepDuration(ProcessingStep step, Duration duration) {
|
|
stepDurationsBuilder().put(step.getClass(), duration);
|
|
return this;
|
|
}
|
|
|
|
/** Creates a new {@link RoundStatistics} instance. */
|
|
abstract RoundStatistics build();
|
|
}
|
|
}
|
|
}
|