1 /* 2 * Copyright (C) 2013 Google Inc. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5 * in compliance with the License. You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software distributed under the License 10 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 11 * or implied. See the License for the specific language governing permissions and limitations under 12 * the License. 13 */ 14 15 package com.google.caliper.api; 16 17 import static java.lang.annotation.ElementType.METHOD; 18 import static java.lang.annotation.RetentionPolicy.RUNTIME; 19 20 import com.google.common.annotations.Beta; 21 22 import java.lang.annotation.Retention; 23 import java.lang.annotation.Target; 24 25 /** 26 * Apply this annotation to any method without parameters to have it timed as a macrobenchmark. A 27 * macrobenchmark is roughly defined as any benchmark whose runtime is large enough that the 28 * granularity of the {@linkplain System#nanoTime clock} is not a factor in measurement. Thus, each 29 * repetition of the benchmark code can be timed individually. 30 * 31 * <p>Additionally, since each rep is independently timed, setup and tear down logic can be 32 * performed in between each using the {@link BeforeRep} and {@link AfterRep} annotations 33 * respectively. 34 */ 35 @Retention(RUNTIME) 36 @Target(METHOD) 37 @Beta 38 public @interface Macrobenchmark {} 39