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 15package com.google.caliper.api; 16 17import static java.lang.annotation.ElementType.METHOD; 18import static java.lang.annotation.RetentionPolicy.RUNTIME; 19 20import com.google.common.annotations.Beta; 21 22import java.lang.annotation.Retention; 23import 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 38public @interface Macrobenchmark {} 39