Home | History | Annotate | Download | only in api
      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