 603044d3aa
			
		
	
	603044d3aa
	
	
	
		
			
			Change Ib0024cce95 intended to include all timer metrics into traces,
but it only captured timer metrics that are recorded by
  try (Timer1.Context ignored = metric.start(field)) {
    // do something
  }
but not timer metrics that are recorded by
  timer1.record(field, System.nanoTime() - startNanos, TimeUnit.NANOSECONDS);
Change-Id: Ibdec13c9202b56f7a8fe92fcd4c167d79f5bb2f8
Signed-off-by: Edwin Kempin <ekempin@google.com>
		
	
		
			
				
	
	
		
			83 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| // Copyright (C) 2015 The Android Open Source Project
 | |
| //
 | |
| // 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 com.google.gerrit.metrics;
 | |
| 
 | |
| import static java.util.concurrent.TimeUnit.NANOSECONDS;
 | |
| 
 | |
| import com.google.common.flogger.FluentLogger;
 | |
| import com.google.gerrit.extensions.registration.RegistrationHandle;
 | |
| import java.util.concurrent.TimeUnit;
 | |
| 
 | |
| /**
 | |
|  * Records elapsed time for an operation or span.
 | |
|  *
 | |
|  * <p>Typical usage in a try-with-resources block:
 | |
|  *
 | |
|  * <pre>
 | |
|  * try (Timer0.Context ctx = timer.start()) {
 | |
|  * }
 | |
|  * </pre>
 | |
|  */
 | |
| public abstract class Timer0 implements RegistrationHandle {
 | |
|   private static final FluentLogger logger = FluentLogger.forEnclosingClass();
 | |
| 
 | |
|   public static class Context extends TimerContext {
 | |
|     private final Timer0 timer;
 | |
| 
 | |
|     Context(Timer0 timer) {
 | |
|       this.timer = timer;
 | |
|     }
 | |
| 
 | |
|     @Override
 | |
|     public void record(long elapsed) {
 | |
|       timer.record(elapsed, NANOSECONDS);
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   protected final String name;
 | |
| 
 | |
|   public Timer0(String name) {
 | |
|     this.name = name;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Begin a timer for the current block, value will be recorded when closed.
 | |
|    *
 | |
|    * @return timer context
 | |
|    */
 | |
|   public Context start() {
 | |
|     return new Context(this);
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Record a value in the distribution.
 | |
|    *
 | |
|    * @param value value to record
 | |
|    * @param unit time unit of the value
 | |
|    */
 | |
|   public final void record(long value, TimeUnit unit) {
 | |
|     logger.atFinest().log("%s took %dms", name, unit.toMillis(value));
 | |
|     doRecord(value, unit);
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Record a value in the distribution.
 | |
|    *
 | |
|    * @param value value to record
 | |
|    * @param unit time unit of the value
 | |
|    */
 | |
|   protected abstract void doRecord(long value, TimeUnit unit);
 | |
| }
 |