Timer0: Allow to suppress logging

Timer1, Timer2 and Timer3 allow to suppress logging. It's inconsistent
that Timer0 doesn't support this.

Release-Notes: skip
Change-Id: I928d5f5eeea7a7d4aeb839d76a4a6d6cd7759ffa
Signed-off-by: Edwin Kempin <ekempin@google.com>
diff --git a/java/com/google/gerrit/metrics/Timer0.java b/java/com/google/gerrit/metrics/Timer0.java
index 2d91515..a18a6ed 100644
--- a/java/com/google/gerrit/metrics/Timer0.java
+++ b/java/com/google/gerrit/metrics/Timer0.java
@@ -49,6 +49,8 @@
     }
   }
 
+  private boolean suppressLogging;
+
   protected final String name;
 
   public Timer0(String name) {
@@ -74,14 +76,22 @@
   public final void record(long value, TimeUnit unit) {
     long durationNanos = unit.toNanos(value);
 
-    LoggingContext.getInstance()
-        .addPerformanceLogRecord(() -> PerformanceLogRecord.create(name, durationNanos));
-    logger.atFinest().log("%s took %.2f ms", name, durationNanos / 1000000.0);
+    if (!suppressLogging) {
+      LoggingContext.getInstance()
+          .addPerformanceLogRecord(() -> PerformanceLogRecord.create(name, durationNanos));
+      logger.atFinest().log("%s took %.2f ms", name, durationNanos / 1000000.0);
+    }
 
     doRecord(value, unit);
     RequestStateContext.abortIfCancelled();
   }
 
+  /** Suppress logging (debug log and performance log) when values are recorded. */
+  public final Timer0 suppressLogging() {
+    this.suppressLogging = true;
+    return this;
+  }
+
   /**
    * Record a value in the distribution.
    *