diff options
author | Janak Ramakrishnan <janakr@google.com> | 2017-02-16 18:10:14 +0000 |
---|---|---|
committer | Dmitry Lomov <dslomov@google.com> | 2017-02-17 14:51:46 +0000 |
commit | 1210a2053fd44497bc04bba0bbd434d907cfe486 (patch) | |
tree | 6edf24f94f24c3860abe2c6c686a17c31901f559 /src/main/java/com/google/devtools/build/lib/profiler | |
parent | 2667326c726d7058f3093b709111d3797597d048 (diff) |
Refactor AutoProfiler to enable other loggers to work.
--
PiperOrigin-RevId: 147734029
MOS_MIGRATED_REVID=147734029
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/profiler')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/profiler/AutoProfiler.java | 61 |
1 files changed, 37 insertions, 24 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/profiler/AutoProfiler.java b/src/main/java/com/google/devtools/build/lib/profiler/AutoProfiler.java index bec813a5ce..d99f6d1017 100644 --- a/src/main/java/com/google/devtools/build/lib/profiler/AutoProfiler.java +++ b/src/main/java/com/google/devtools/build/lib/profiler/AutoProfiler.java @@ -16,12 +16,10 @@ package com.google.devtools.build.lib.profiler; import com.google.devtools.build.lib.util.BlazeClock; import com.google.devtools.build.lib.util.Clock; import com.google.devtools.build.lib.util.Preconditions; - import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicReference; import java.util.logging.Logger; - import javax.annotation.Nullable; /** @@ -263,40 +261,26 @@ public class AutoProfiler implements AutoCloseable { } } - /** - * {@link ElapsedTimeReceiver} that logs a message in {@link #accept} if the elapsed time is at - * least a given threshold. - */ - public static class LoggingElapsedTimeReceiver implements ElapsedTimeReceiver { - private static final LoggingElapsedTimeReceiverFactory FACTORY = - new LoggingElapsedTimeReceiverFactory() { - @Override - public ElapsedTimeReceiver create( - String taskDescription, Logger logger, long minTimeForLogging, TimeUnit timeUnit) { - return new LoggingElapsedTimeReceiver( - taskDescription, logger, minTimeForLogging, timeUnit); - } - }; - + /** {@link ElapsedTimeReceiver} that will not log a message if the time elapsed is too small. */ + public abstract static class FilteringElapsedTimeReceiver implements ElapsedTimeReceiver { private final String taskDescription; - protected final Logger logger; private final TimeUnit timeUnit; private final long minNanosForLogging; - protected LoggingElapsedTimeReceiver( - String taskDescription, Logger logger, long minTimeForLogging, TimeUnit timeUnit) { + protected FilteringElapsedTimeReceiver( + String taskDescription, long minTimeForLogging, TimeUnit timeUnit) { this.taskDescription = taskDescription; - this.logger = logger; this.timeUnit = timeUnit; this.minNanosForLogging = timeUnit.toNanos(minTimeForLogging); } + protected abstract void log(String logMessage); /** * Returns a message about the amount of time spent doing a task if {@code elapsedTimeNanos} is * at least {@link #minNanosForLogging} and null otherwise. */ @Nullable - protected String loggingMessage(long elapsedTimeNanos) { + private String loggingMessage(long elapsedTimeNanos) { if (elapsedTimeNanos >= minNanosForLogging) { return String.format( "Spent %d %s doing %s", @@ -309,14 +293,43 @@ public class AutoProfiler implements AutoCloseable { } @Override - public void accept(long elapsedTimeNanos) { + public final void accept(long elapsedTimeNanos) { String logMessage = loggingMessage(elapsedTimeNanos); if (logMessage != null) { - logger.info(logMessage); + log(logMessage); } } } + /** + * {@link ElapsedTimeReceiver} that logs a message in {@link #accept} if the elapsed time is at + * least a given threshold. + */ + public static class LoggingElapsedTimeReceiver extends FilteringElapsedTimeReceiver { + private static final LoggingElapsedTimeReceiverFactory FACTORY = + new LoggingElapsedTimeReceiverFactory() { + @Override + public ElapsedTimeReceiver create( + String taskDescription, Logger logger, long minTimeForLogging, TimeUnit timeUnit) { + return new LoggingElapsedTimeReceiver( + taskDescription, logger, minTimeForLogging, timeUnit); + } + }; + + protected final Logger logger; + + protected LoggingElapsedTimeReceiver( + String taskDescription, Logger logger, long minTimeForLogging, TimeUnit timeUnit) { + super(taskDescription, minTimeForLogging, timeUnit); + this.logger = logger; + } + + @Override + protected void log(String logMessage) { + logger.info(logMessage); + } + } + private static class ProfilingElapsedTimeReceiver implements ElapsedTimeReceiver { private final long startTimeNanos; private final Object object; |