Switch to latest version of Caliper

Convert the benchmarks to the latest version of Caliper.

Bug: 24848946
Change-Id: Iac04b30dac61ccb397a6685890da64bae4d3b318
diff --git a/benchmarks/Android.mk b/benchmarks/Android.mk
index 9e650918..3a82fc6 100644
--- a/benchmarks/Android.mk
+++ b/benchmarks/Android.mk
@@ -21,19 +21,18 @@
 include $(CLEAR_VARS)
 LOCAL_MODULE := benchmarks
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
-LOCAL_STATIC_JAVA_LIBRARIES := caliper-prebuilt mockwebserver core-tests-support
+LOCAL_STATIC_JAVA_LIBRARIES := mockwebserver core-tests-support
 LOCAL_NO_STANDARD_LIBRARIES := true
-LOCAL_JAVA_LIBRARIES := core-libart conscrypt core-junit bouncycastle framework
+LOCAL_JAVA_LIBRARIES := \
+  caliper-api-target \
+  core-libart \
+  conscrypt \
+  core-junit \
+  bouncycastle \
+  framework
 LOCAL_MODULE_TAGS := tests
 LOCAL_MODULE_PATH := $(PRODUCT_OUT)/data/caliperperf
 LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
 include $(BUILD_JAVA_LIBRARY)
 
-##################################################
-# Prebuilt Java libraries
-include $(CLEAR_VARS)
-LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := caliper-prebuilt:libs/caliper.jar
-LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
-include $(BUILD_MULTI_PREBUILT)
-
 endif
diff --git a/benchmarks/libs/caliper.jar b/benchmarks/libs/caliper.jar
deleted file mode 100644
index 715e698..0000000
--- a/benchmarks/libs/caliper.jar
+++ /dev/null
Binary files differ
diff --git a/benchmarks/src/benchmarks/AdditionBenchmark.java b/benchmarks/src/benchmarks/AdditionBenchmark.java
index a18856e..5d7528b 100644
--- a/benchmarks/src/benchmarks/AdditionBenchmark.java
+++ b/benchmarks/src/benchmarks/AdditionBenchmark.java
@@ -16,14 +16,10 @@
 
 package benchmarks;
 
-import com.google.caliper.Param;
-import com.google.caliper.Runner;
-import com.google.caliper.SimpleBenchmark;
-
 /**
  * What do various kinds of addition cost?
  */
-public class AdditionBenchmark extends SimpleBenchmark {
+public class AdditionBenchmark {
     public int timeAddConstantToLocalInt(int reps) {
         int result = 0;
         for (int i = 0; i < reps; ++i) {
diff --git a/benchmarks/src/benchmarks/ArrayCopyBenchmark.java b/benchmarks/src/benchmarks/ArrayCopyBenchmark.java
index 75ad243..000782c 100644
--- a/benchmarks/src/benchmarks/ArrayCopyBenchmark.java
+++ b/benchmarks/src/benchmarks/ArrayCopyBenchmark.java
@@ -16,13 +16,9 @@
 
 package benchmarks;
 
-import com.google.caliper.Param;
-import com.google.caliper.Runner;
-import com.google.caliper.SimpleBenchmark;
-
 import java.util.Arrays;
 
-public class ArrayCopyBenchmark extends SimpleBenchmark {
+public class ArrayCopyBenchmark {
     public void timeManualArrayCopy(int reps) {
         char[] src = new char[8192];
         for (int rep = 0; rep < reps; ++rep) {
diff --git a/benchmarks/src/benchmarks/ArrayIterationBenchmark.java b/benchmarks/src/benchmarks/ArrayIterationBenchmark.java
index bdc255b..1425ca0 100644
--- a/benchmarks/src/benchmarks/ArrayIterationBenchmark.java
+++ b/benchmarks/src/benchmarks/ArrayIterationBenchmark.java
@@ -16,14 +16,10 @@
 
 package benchmarks;
 
-import com.google.caliper.Param;
-import com.google.caliper.Runner;
-import com.google.caliper.SimpleBenchmark;
-
 /**
  * How do various ways of iterating through an array compare?
  */
-public class ArrayIterationBenchmark extends SimpleBenchmark {
+public class ArrayIterationBenchmark {
     Foo[] mArray = new Foo[27];
     {
         for (int i = 0; i < mArray.length; ++i) mArray[i] = new Foo();
diff --git a/benchmarks/src/benchmarks/ArrayListIterationBenchmark.java b/benchmarks/src/benchmarks/ArrayListIterationBenchmark.java
index 4e5f145..92a8e66 100644
--- a/benchmarks/src/benchmarks/ArrayListIterationBenchmark.java
+++ b/benchmarks/src/benchmarks/ArrayListIterationBenchmark.java
@@ -16,16 +16,12 @@
 
 package benchmarks;
 
-import com.google.caliper.Param;
-import com.google.caliper.Runner;
-import com.google.caliper.SimpleBenchmark;
-
 import java.util.ArrayList;
 
 /**
  * Is a hand-coded counted loop through an ArrayList cheaper than enhanced for?
  */
-public class ArrayListIterationBenchmark extends SimpleBenchmark {
+public class ArrayListIterationBenchmark {
     ArrayList<Foo> mList = new ArrayList<Foo>();
     {
         for (int i = 0; i < 27; ++i) mList.add(new Foo());
diff --git a/benchmarks/src/benchmarks/BufferedZipFileBenchmark.java b/benchmarks/src/benchmarks/BufferedZipFileBenchmark.java
index f4d3822..3c0122f 100644
--- a/benchmarks/src/benchmarks/BufferedZipFileBenchmark.java
+++ b/benchmarks/src/benchmarks/BufferedZipFileBenchmark.java
@@ -16,8 +16,8 @@
 
 package benchmarks;
 
+import com.google.caliper.BeforeExperiment;
 import com.google.caliper.Param;
-import com.google.caliper.SimpleBenchmark;
 import java.io.BufferedInputStream;
 import java.io.File;
 import java.io.FileOutputStream;
@@ -27,13 +27,14 @@
 import java.util.zip.ZipFile;
 import java.util.zip.ZipOutputStream;
 
-public final class BufferedZipFileBenchmark extends SimpleBenchmark {
+public final class BufferedZipFileBenchmark {
     @Param({"128", "1024", "8192", "65536"}) int compressedSize;
     @Param({"4", "32", "128"}) int readSize;
 
     private File file;
 
-    @Override protected void setUp() throws Exception {
+    @BeforeExperiment
+    protected void setUp() throws Exception {
         file = File.createTempFile(getClass().getName(), ".zip");
         file.deleteOnExit();
 
diff --git a/benchmarks/src/benchmarks/ClassLoaderResourceBenchmark.java b/benchmarks/src/benchmarks/ClassLoaderResourceBenchmark.java
index 379eaec..33666b5 100644
--- a/benchmarks/src/benchmarks/ClassLoaderResourceBenchmark.java
+++ b/benchmarks/src/benchmarks/ClassLoaderResourceBenchmark.java
@@ -16,11 +16,9 @@
 
 package benchmarks;
 
-import com.google.caliper.SimpleBenchmark;
-
 import junit.framework.Assert;
 
-public class ClassLoaderResourceBenchmark extends SimpleBenchmark {
+public class ClassLoaderResourceBenchmark {
 
   private static final String EXISTENT_RESOURCE = "java/util/logging/logging.properties";
   private static final String MISSING_RESOURCE = "missing_entry";
diff --git a/benchmarks/src/benchmarks/DeepArrayOpsBenchmark.java b/benchmarks/src/benchmarks/DeepArrayOpsBenchmark.java
index 09b3186..1429062 100644
--- a/benchmarks/src/benchmarks/DeepArrayOpsBenchmark.java
+++ b/benchmarks/src/benchmarks/DeepArrayOpsBenchmark.java
@@ -17,13 +17,11 @@
 package benchmarks;
 
 import com.google.caliper.Param;
-import com.google.caliper.SimpleBenchmark;
-
 import java.lang.reflect.Array;
 import java.lang.reflect.Constructor;
 import java.util.Arrays;
 
-public class DeepArrayOpsBenchmark extends SimpleBenchmark {
+public class DeepArrayOpsBenchmark {
     @Param({"1", "4", "16", "256", "2048"}) int arrayLength;
 
     private Object[] array;
diff --git a/benchmarks/src/benchmarks/FieldAccessBenchmark.java b/benchmarks/src/benchmarks/FieldAccessBenchmark.java
index 19cb060..c2391d6 100644
--- a/benchmarks/src/benchmarks/FieldAccessBenchmark.java
+++ b/benchmarks/src/benchmarks/FieldAccessBenchmark.java
@@ -16,14 +16,10 @@
 
 package benchmarks;
 
-import com.google.caliper.Param;
-import com.google.caliper.Runner;
-import com.google.caliper.SimpleBenchmark;
-
 /**
  * What does field access cost?
  */
-public class FieldAccessBenchmark extends SimpleBenchmark {
+public class FieldAccessBenchmark {
     private static class Inner {
         public int publicInnerIntVal;
         protected int protectedInnerIntVal;
diff --git a/benchmarks/src/benchmarks/HashedCollectionsBenchmark.java b/benchmarks/src/benchmarks/HashedCollectionsBenchmark.java
index a826271..f2ecd1d 100644
--- a/benchmarks/src/benchmarks/HashedCollectionsBenchmark.java
+++ b/benchmarks/src/benchmarks/HashedCollectionsBenchmark.java
@@ -16,19 +16,15 @@
 
 package benchmarks;
 
-import com.google.caliper.Param;
-import com.google.caliper.Runner;
-import com.google.caliper.SimpleBenchmark;
-
-import java.util.concurrent.ConcurrentHashMap;
 import java.util.HashMap;
 import java.util.Hashtable;
 import java.util.LinkedHashMap;
+import java.util.concurrent.ConcurrentHashMap;
 
 /**
  * How do the various hash maps compare?
  */
-public class HashedCollectionsBenchmark extends SimpleBenchmark {
+public class HashedCollectionsBenchmark {
     public void timeHashMapGet(int reps) {
         HashMap<String, String> map = new HashMap<String, String>();
         map.put("hello", "world");
diff --git a/benchmarks/src/benchmarks/MethodInvocationBenchmark.java b/benchmarks/src/benchmarks/MethodInvocationBenchmark.java
index 7a5e1b6..6a023e0 100644
--- a/benchmarks/src/benchmarks/MethodInvocationBenchmark.java
+++ b/benchmarks/src/benchmarks/MethodInvocationBenchmark.java
@@ -16,14 +16,10 @@
 
 package benchmarks;
 
-import com.google.caliper.Param;
-import com.google.caliper.Runner;
-import com.google.caliper.SimpleBenchmark;
-
 /**
  * Compares various kinds of method invocation.
  */
-public class MethodInvocationBenchmark extends SimpleBenchmark {
+public class MethodInvocationBenchmark {
     interface I {
         void emptyInterface();
     }
diff --git a/benchmarks/src/benchmarks/MultiplicationBenchmark.java b/benchmarks/src/benchmarks/MultiplicationBenchmark.java
index b2f945b..8dfa628 100644
--- a/benchmarks/src/benchmarks/MultiplicationBenchmark.java
+++ b/benchmarks/src/benchmarks/MultiplicationBenchmark.java
@@ -16,14 +16,10 @@
 
 package benchmarks;
 
-import com.google.caliper.Param;
-import com.google.caliper.Runner;
-import com.google.caliper.SimpleBenchmark;
-
 /**
  * How much do various kinds of multiplication cost?
  */
-public class MultiplicationBenchmark extends SimpleBenchmark {
+public class MultiplicationBenchmark {
     public int timeMultiplyIntByConstant10(int reps) {
         int result = 1;
         for (int i = 0; i < reps; ++i) {
diff --git a/benchmarks/src/benchmarks/ReferenceBenchmark.java b/benchmarks/src/benchmarks/ReferenceBenchmark.java
index 0fa63f2..80bcb5e 100644
--- a/benchmarks/src/benchmarks/ReferenceBenchmark.java
+++ b/benchmarks/src/benchmarks/ReferenceBenchmark.java
@@ -16,14 +16,13 @@
 
 package benchmarks;
 
-import com.google.caliper.SimpleBenchmark;
 import java.lang.ref.PhantomReference;
 import java.lang.ref.ReferenceQueue;
 
 /**
  * Benchmark to evaluate the performance of References.
  */
-public class ReferenceBenchmark extends SimpleBenchmark {
+public class ReferenceBenchmark {
 
     private Object object;
 
diff --git a/benchmarks/src/benchmarks/ReferenceGetBenchmark.java b/benchmarks/src/benchmarks/ReferenceGetBenchmark.java
index 80142a1..6ea237b 100644
--- a/benchmarks/src/benchmarks/ReferenceGetBenchmark.java
+++ b/benchmarks/src/benchmarks/ReferenceGetBenchmark.java
@@ -17,14 +17,12 @@
 package benchmarks;
 
 import com.google.caliper.Param;
-import com.google.caliper.SimpleBenchmark;
-
 import java.lang.ref.Reference;
 import java.lang.ref.SoftReference;
 import java.lang.ref.WeakReference;
-import java.lang.reflect.*;
+import java.lang.reflect.Field;
 
-public class ReferenceGetBenchmark extends SimpleBenchmark {
+public class ReferenceGetBenchmark {
     @Param boolean intrinsicDisabled;
 
     private Object obj = "str";
diff --git a/benchmarks/src/benchmarks/StringIterationBenchmark.java b/benchmarks/src/benchmarks/StringIterationBenchmark.java
index 22c6ae2..1ee9e8c7 100644
--- a/benchmarks/src/benchmarks/StringIterationBenchmark.java
+++ b/benchmarks/src/benchmarks/StringIterationBenchmark.java
@@ -16,14 +16,10 @@
 
 package benchmarks;
 
-import com.google.caliper.Param;
-import com.google.caliper.Runner;
-import com.google.caliper.SimpleBenchmark;
-
 /**
  * How do the various schemes for iterating through a string compare?
  */
-public class StringIterationBenchmark extends SimpleBenchmark {
+public class StringIterationBenchmark {
     public void timeStringIteration0(int reps) {
         String s = "hello, world!";
         for (int rep = 0; rep < reps; ++rep) {
diff --git a/benchmarks/src/benchmarks/SystemArrayCopyBenchmark.java b/benchmarks/src/benchmarks/SystemArrayCopyBenchmark.java
index 5095ee1..000b497 100644
--- a/benchmarks/src/benchmarks/SystemArrayCopyBenchmark.java
+++ b/benchmarks/src/benchmarks/SystemArrayCopyBenchmark.java
@@ -17,9 +17,8 @@
 package benchmarks;
 
 import com.google.caliper.Param;
-import com.google.caliper.SimpleBenchmark;
 
-public class SystemArrayCopyBenchmark extends SimpleBenchmark {
+public class SystemArrayCopyBenchmark {
   @Param({"2", "4", "8", "16", "32", "64", "128", "256", "512", "1024",
           "2048", "4096", "8192", "16384", "32768", "65536", "131072", "262144"})
   int arrayLength;
diff --git a/benchmarks/src/benchmarks/VirtualVersusInterfaceBenchmark.java b/benchmarks/src/benchmarks/VirtualVersusInterfaceBenchmark.java
index f029c81..fa3bd6c 100644
--- a/benchmarks/src/benchmarks/VirtualVersusInterfaceBenchmark.java
+++ b/benchmarks/src/benchmarks/VirtualVersusInterfaceBenchmark.java
@@ -16,18 +16,14 @@
 
 package benchmarks;
 
-import com.google.caliper.Param;
-import com.google.caliper.Runner;
-import com.google.caliper.SimpleBenchmark;
-
-import java.util.Map;
 import java.util.HashMap;
+import java.util.Map;
 
 /**
  * Is there a performance reason to "Prefer virtual over interface", as the
  * Android documentation once claimed?
  */
-public class VirtualVersusInterfaceBenchmark extends SimpleBenchmark {
+public class VirtualVersusInterfaceBenchmark {
     public void timeMapPut(int reps) {
         Map<String, String> map = new HashMap<String, String>();
         for (int i = 0; i < reps; ++i) {
diff --git a/benchmarks/src/benchmarks/XmlParseBenchmark.java b/benchmarks/src/benchmarks/XmlParseBenchmark.java
index b5e7b93..69ab7a5 100644
--- a/benchmarks/src/benchmarks/XmlParseBenchmark.java
+++ b/benchmarks/src/benchmarks/XmlParseBenchmark.java
@@ -16,9 +16,8 @@
 
 package benchmarks;
 
+import com.google.caliper.BeforeExperiment;
 import com.google.caliper.Param;
-import com.google.caliper.Runner;
-import com.google.caliper.SimpleBenchmark;
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.FileInputStream;
@@ -37,7 +36,7 @@
 import org.xml.sax.helpers.DefaultHandler;
 import org.xmlpull.v1.XmlPullParser;
 
-public class XmlParseBenchmark extends SimpleBenchmark {
+public class XmlParseBenchmark {
 
     @Param String xmlFile;
     ByteArrayInputStream inputStream;
@@ -54,7 +53,8 @@
     private Constructor<? extends XmlPullParser> expatConstructor;
 
     @SuppressWarnings("unchecked")
-    @Override protected void setUp() throws Exception {
+    @BeforeExperiment
+    protected void setUp() throws Exception {
         byte[] xmlBytes = getXmlBytes();
         inputStream = new ByteArrayInputStream(xmlBytes);
         inputStream.mark(xmlBytes.length);
@@ -146,8 +146,4 @@
         }
         return elementCount;
     }
-
-    public static void main(String[] args) {
-        Runner.main(XmlParseBenchmark.class, args);
-    }
 }
diff --git a/benchmarks/src/benchmarks/XmlSerializeBenchmark.java b/benchmarks/src/benchmarks/XmlSerializeBenchmark.java
index 7319490..0ef2620 100644
--- a/benchmarks/src/benchmarks/XmlSerializeBenchmark.java
+++ b/benchmarks/src/benchmarks/XmlSerializeBenchmark.java
@@ -16,20 +16,15 @@
 
 package benchmarks;
 
+import com.google.caliper.BeforeExperiment;
 import com.google.caliper.Param;
-import com.google.caliper.Runner;
-import com.google.caliper.SimpleBenchmark;
-
-import org.xmlpull.v1.*;
-
 import java.io.CharArrayWriter;
-import java.io.IOException;
 import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
 import java.util.Random;
+import org.xmlpull.v1.XmlSerializer;
 
 
-public class XmlSerializeBenchmark extends SimpleBenchmark {
+public class XmlSerializeBenchmark {
 
     @Param( {"0.99 0.7 0.7 0.7 0.7 0.7",
             "0.999 0.3 0.3 0.95 0.9 0.9"})
@@ -84,7 +79,7 @@
     }
 
     @SuppressWarnings("unchecked")
-    @Override
+    @BeforeExperiment
     protected void setUp() throws Exception {
         kxmlConstructor = (Constructor) Class.forName("org.kxml2.io.KXmlSerializer")
                 .getConstructor();
@@ -111,8 +106,4 @@
     public void timeFast(int reps) throws Exception {
         internalTimeSerializer(fastConstructor, reps);
     }
-
-    public static void main(String[] args) {
-        Runner.main(XmlSerializeBenchmark.class, args);
-    }
 }
diff --git a/benchmarks/src/benchmarks/regression/AnnotatedElementBenchmark.java b/benchmarks/src/benchmarks/regression/AnnotatedElementBenchmark.java
index 107767b..dd7da4c 100644
--- a/benchmarks/src/benchmarks/regression/AnnotatedElementBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/AnnotatedElementBenchmark.java
@@ -16,20 +16,20 @@
 
 package benchmarks.regression;
 
-import com.google.caliper.Runner;
-import com.google.caliper.SimpleBenchmark;
+import com.google.caliper.BeforeExperiment;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 
-public class AnnotatedElementBenchmark extends SimpleBenchmark {
+public class AnnotatedElementBenchmark {
 
     private Class<?> type;
     private Field field;
     private Method method;
 
-    @Override protected void setUp() throws Exception {
+    @BeforeExperiment
+    protected void setUp() throws Exception {
         type = Type.class;
         field = Type.class.getField("field");
         method = Type.class.getMethod("method", String.class);
@@ -257,8 +257,4 @@
         int f() default 0;
         long g() default 0L;
     }
-
-    public static void main(String[] args) throws Exception {
-        Runner.main(AnnotatedElementBenchmark.class, args);
-    }
 }
diff --git a/benchmarks/src/benchmarks/regression/BidiBenchmark.java b/benchmarks/src/benchmarks/regression/BidiBenchmark.java
index bb5087e..a4e47e1 100644
--- a/benchmarks/src/benchmarks/regression/BidiBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/BidiBenchmark.java
@@ -16,14 +16,12 @@
 
 package benchmarks.regression;
 
-import com.google.caliper.SimpleBenchmark;
-
 import java.math.BigDecimal;
 import java.text.AttributedCharacterIterator;
 import java.text.Bidi;
 import java.text.DecimalFormat;
 
-public class BidiBenchmark extends SimpleBenchmark {
+public class BidiBenchmark {
 
     private static final AttributedCharacterIterator charIter =
             DecimalFormat.getInstance().formatToCharacterIterator(new BigDecimal(Math.PI));
diff --git a/benchmarks/src/benchmarks/regression/BigIntegerBenchmark.java b/benchmarks/src/benchmarks/regression/BigIntegerBenchmark.java
index 841b901..b890aa1 100644
--- a/benchmarks/src/benchmarks/regression/BigIntegerBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/BigIntegerBenchmark.java
@@ -18,10 +18,8 @@
 
 import java.math.BigInteger;
 import java.util.Random;
-import com.google.caliper.Param;
-import com.google.caliper.SimpleBenchmark;
 
-public class BigIntegerBenchmark extends SimpleBenchmark {
+public class BigIntegerBenchmark {
     public void timeRandomDivision(int reps) throws Exception {
         Random r = new Random();
         BigInteger x = new BigInteger(1024, r);
diff --git a/benchmarks/src/benchmarks/regression/BitSetBenchmark.java b/benchmarks/src/benchmarks/regression/BitSetBenchmark.java
index ee91993..92ef8f1 100644
--- a/benchmarks/src/benchmarks/regression/BitSetBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/BitSetBenchmark.java
@@ -16,17 +16,18 @@
 
 package benchmarks.regression;
 
+import com.google.caliper.BeforeExperiment;
 import com.google.caliper.Param;
-import com.google.caliper.SimpleBenchmark;
 import java.util.BitSet;
 
-public class BitSetBenchmark extends SimpleBenchmark {
+public class BitSetBenchmark {
     @Param({ "1000", "10000" })
     private int size;
 
     private BitSet bs;
 
-    @Override protected void setUp() throws Exception {
+    @BeforeExperiment
+    protected void setUp() throws Exception {
         bs = new BitSet(size);
     }
 
diff --git a/benchmarks/src/benchmarks/regression/BreakIteratorBenchmark.java b/benchmarks/src/benchmarks/regression/BreakIteratorBenchmark.java
index 8602ddc..804b7e3 100644
--- a/benchmarks/src/benchmarks/regression/BreakIteratorBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/BreakIteratorBenchmark.java
@@ -17,12 +17,10 @@
 package benchmarks.regression;
 
 import com.google.caliper.Param;
-import com.google.caliper.SimpleBenchmark;
-
 import java.text.BreakIterator;
 import java.util.Locale;
 
-public final class BreakIteratorBenchmark extends SimpleBenchmark {
+public final class BreakIteratorBenchmark {
 
     public static enum Text {
         LIPSUM(Locale.US, "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi mollis consequat nisl non pharetra. Praesent pretium vehicula odio sed ultrices. Aenean a felis libero. Vivamus sed commodo nibh. Pellentesque turpis lectus, euismod vel ante nec, cursus posuere orci. Suspendisse velit neque, fermentum luctus ultrices in, ultrices vitae arcu. Duis tincidunt cursus lorem. Nam ultricies accumsan quam vitae imperdiet. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Quisque aliquet pretium nisi, eget laoreet enim molestie sit amet. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.\nNam dapibus aliquam lacus ac suscipit. Proin in nibh sit amet purus congue laoreet eget quis nisl. Morbi gravida dignissim justo, a venenatis ante pulvinar at. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin ultrices vestibulum dui, vel aliquam lacus aliquam quis. Duis fringilla sapien ac lacus egestas, vel adipiscing elit euismod. Donec non tellus odio. Donec gravida eu massa ac feugiat. Aliquam erat volutpat. Praesent id adipiscing metus, nec laoreet enim. Aliquam vitae posuere turpis. Mauris ac pharetra sem. In at placerat tortor. Vivamus ac vehicula neque. Cras volutpat ullamcorper massa et varius. Praesent sagittis neque vitae nulla euismod pharetra.\nSed placerat sapien non molestie sollicitudin. Nullam sit amet dictum quam. Etiam tincidunt tortor vel pretium vehicula. Praesent fringilla ipsum vel velit luctus dignissim. Nulla massa ligula, mattis in enim et, mattis lacinia odio. Suspendisse tristique urna a orci commodo tempor. Duis lacinia egestas arcu a sollicitudin.\nIn ac feugiat lacus. Nunc fermentum eu est at tristique. Pellentesque quis ligula et orci placerat lacinia. Maecenas quis mauris diam. Etiam mi ipsum, tempus in purus quis, euismod faucibus orci. Nulla facilisi. Praesent sit amet sapien vel elit porta adipiscing. Phasellus sit amet volutpat diam.\nProin bibendum elit non lacus pharetra, quis eleifend tellus placerat. Nulla facilisi. Maecenas ante diam, pellentesque mattis mattis in, porta ut lorem. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nunc interdum tristique metus, in scelerisque odio fermentum eget. Cras nec venenatis lacus. Aenean euismod eget metus quis molestie. Cras tincidunt dolor ut massa ornare, in elementum lacus auctor. Cras sodales nisl lacus, id ultrices ligula varius at. Sed tristique sit amet tellus vel mollis. Sed sed sollicitudin quam. Sed sed adipiscing risus, et dictum orci. Cras tempor pellentesque turpis et tempus."),
diff --git a/benchmarks/src/benchmarks/regression/ByteBufferBenchmark.java b/benchmarks/src/benchmarks/regression/ByteBufferBenchmark.java
index 7812013..4febc0a 100644
--- a/benchmarks/src/benchmarks/regression/ByteBufferBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/ByteBufferBenchmark.java
@@ -17,16 +17,20 @@
 package benchmarks.regression;
 
 import com.google.caliper.Param;
-import com.google.caliper.Runner;
-import com.google.caliper.SimpleBenchmark;
+import java.io.File;
+import java.io.IOException;
+import java.io.RandomAccessFile;
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.nio.CharBuffer;
+import java.nio.DoubleBuffer;
+import java.nio.FloatBuffer;
+import java.nio.IntBuffer;
+import java.nio.LongBuffer;
+import java.nio.ShortBuffer;
+import java.nio.channels.FileChannel;
 
-import java.io.*;
-import java.nio.*;
-import java.nio.channels.*;
-import java.util.Arrays;
-import java.util.Collection;
-
-public class ByteBufferBenchmark extends SimpleBenchmark {
+public class ByteBufferBenchmark {
     public enum MyByteOrder {
         BIG(ByteOrder.BIG_ENDIAN), LITTLE(ByteOrder.LITTLE_ENDIAN);
         final ByteOrder byteOrder;
diff --git a/benchmarks/src/benchmarks/regression/ByteBufferScalarVersusVectorBenchmark.java b/benchmarks/src/benchmarks/regression/ByteBufferScalarVersusVectorBenchmark.java
index 7c75deb..4e1856a 100644
--- a/benchmarks/src/benchmarks/regression/ByteBufferScalarVersusVectorBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/ByteBufferScalarVersusVectorBenchmark.java
@@ -17,16 +17,9 @@
 package benchmarks.regression;
 
 import com.google.caliper.Param;
-import com.google.caliper.Runner;
-import com.google.caliper.SimpleBenchmark;
+import java.nio.ByteBuffer;
 
-import java.io.*;
-import java.nio.*;
-import java.nio.channels.*;
-import java.util.Arrays;
-import java.util.Collection;
-
-public class ByteBufferScalarVersusVectorBenchmark extends SimpleBenchmark {
+public class ByteBufferScalarVersusVectorBenchmark {
   @Param private ByteBufferBenchmark.MyByteOrder byteOrder;
   @Param({"true", "false"}) private boolean aligned;
   @Param private ByteBufferBenchmark.MyBufferType bufferType;
diff --git a/benchmarks/src/benchmarks/regression/CharacterBenchmark.java b/benchmarks/src/benchmarks/regression/CharacterBenchmark.java
index 953513b..bb9a51f 100644
--- a/benchmarks/src/benchmarks/regression/CharacterBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/CharacterBenchmark.java
@@ -16,15 +16,14 @@
 
 package benchmarks.regression;
 
+import com.google.caliper.BeforeExperiment;
 import com.google.caliper.Param;
-import com.google.caliper.Runner;
-import com.google.caliper.SimpleBenchmark;
 
 /**
  * Tests various Character methods, intended for testing multiple
  * implementations against each other.
  */
-public class CharacterBenchmark extends SimpleBenchmark {
+public class CharacterBenchmark {
 
     @Param private CharacterSet characterSet;
 
@@ -32,13 +31,14 @@
 
     private char[] chars;
 
-    @Override protected void setUp() throws Exception {
+    @BeforeExperiment
+    protected void setUp() throws Exception {
         this.chars = characterSet.chars;
     }
 
     public enum Overload { CHAR, INT }
 
-    @Override public double nanosToUnits(double nanos) {
+    public double nanosToUnits(double nanos) {
         return nanos / 65536;
     }
 
diff --git a/benchmarks/src/benchmarks/regression/CharsetBenchmark.java b/benchmarks/src/benchmarks/regression/CharsetBenchmark.java
index 21b9966..131dc8a 100644
--- a/benchmarks/src/benchmarks/regression/CharsetBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/CharsetBenchmark.java
@@ -16,11 +16,9 @@
 
 package benchmarks.regression;
 
-import java.nio.charset.Charset;
 import com.google.caliper.Param;
-import com.google.caliper.SimpleBenchmark;
 
-public class CharsetBenchmark extends SimpleBenchmark {
+public class CharsetBenchmark {
     @Param({ "1", "10", "100", "1000", "10000" })
     private int length;
 
diff --git a/benchmarks/src/benchmarks/regression/CharsetForNameBenchmark.java b/benchmarks/src/benchmarks/regression/CharsetForNameBenchmark.java
index 87dfb8b..d5b72e8 100644
--- a/benchmarks/src/benchmarks/regression/CharsetForNameBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/CharsetForNameBenchmark.java
@@ -16,11 +16,10 @@
 
 package benchmarks.regression;
 
-import java.nio.charset.Charset;
 import com.google.caliper.Param;
-import com.google.caliper.SimpleBenchmark;
+import java.nio.charset.Charset;
 
-public class CharsetForNameBenchmark extends SimpleBenchmark {
+public class CharsetForNameBenchmark {
     // canonical    => canonical charset name
     // built-in     => guaranteed-present charset
     // special-case => libcore treats this charset specially for performance
diff --git a/benchmarks/src/benchmarks/regression/ChecksumBenchmark.java b/benchmarks/src/benchmarks/regression/ChecksumBenchmark.java
index 0e7bf8d..61a95d7 100644
--- a/benchmarks/src/benchmarks/regression/ChecksumBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/ChecksumBenchmark.java
@@ -16,13 +16,10 @@
 
 package benchmarks.regression;
 
-import com.google.caliper.Param;
-import com.google.caliper.Runner;
-import com.google.caliper.SimpleBenchmark;
 import java.util.zip.Adler32;
 import java.util.zip.CRC32;
 
-public class ChecksumBenchmark extends SimpleBenchmark {
+public class ChecksumBenchmark {
     public void timeAdler_block(int reps) throws Exception {
         byte[] bytes = new byte[10000];
         Adler32 adler = new Adler32();
diff --git a/benchmarks/src/benchmarks/regression/CipherBenchmark.java b/benchmarks/src/benchmarks/regression/CipherBenchmark.java
index 56d549b..31cbcc3 100644
--- a/benchmarks/src/benchmarks/regression/CipherBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/CipherBenchmark.java
@@ -16,25 +16,21 @@
 
 package benchmarks.regression;
 
+import com.google.caliper.BeforeExperiment;
 import com.google.caliper.Param;
-import com.google.caliper.SimpleBenchmark;
-import java.security.KeyPair;
-import java.security.KeyPairGenerator;
 import java.security.spec.AlgorithmParameterSpec;
-
-import javax.crypto.KeyGenerator;
-import javax.crypto.SecretKey;
 import java.util.HashMap;
 import java.util.Map;
-
 import javax.crypto.Cipher;
+import javax.crypto.KeyGenerator;
+import javax.crypto.SecretKey;
 import javax.crypto.spec.IvParameterSpec;
 
 /**
  * Cipher benchmarks. Only runs on AES currently because of the combinatorial
  * explosion of the test as it stands.
  */
-public class CipherBenchmark extends SimpleBenchmark {
+public class CipherBenchmark {
 
     private static final int DATA_SIZE = 8192;
     private static final byte[] DATA = new byte[DATA_SIZE];
@@ -99,7 +95,8 @@
 
     private AlgorithmParameterSpec spec;
 
-    @Override protected void setUp() throws Exception {
+    @BeforeExperiment
+    protected void setUp() throws Exception {
         cipherAlgorithm = algorithm.toString() + "/" + mode.toString() + "/"
                 + padding.toString();
 
diff --git a/benchmarks/src/benchmarks/regression/CipherInputStreamBenchmark.java b/benchmarks/src/benchmarks/regression/CipherInputStreamBenchmark.java
index 9dce12a..161002c 100644
--- a/benchmarks/src/benchmarks/regression/CipherInputStreamBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/CipherInputStreamBenchmark.java
@@ -16,29 +16,20 @@
 
 package benchmarks.regression;
 
-import com.google.caliper.Param;
-import com.google.caliper.SimpleBenchmark;
-
+import com.google.caliper.BeforeExperiment;
 import java.io.ByteArrayInputStream;
 import java.io.InputStream;
-import java.security.KeyPair;
-import java.security.KeyPairGenerator;
 import java.security.spec.AlgorithmParameterSpec;
-
+import javax.crypto.Cipher;
 import javax.crypto.CipherInputStream;
 import javax.crypto.KeyGenerator;
 import javax.crypto.SecretKey;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.crypto.Cipher;
 import javax.crypto.spec.IvParameterSpec;
 
 /**
  * CipherInputStream benchmark.
  */
-public class CipherInputStreamBenchmark extends SimpleBenchmark {
+public class CipherInputStreamBenchmark {
 
     private static final int DATA_SIZE = 1024 * 1024;
     private static final byte[] DATA = new byte[DATA_SIZE];
@@ -63,7 +54,8 @@
 
     private AlgorithmParameterSpec spec;
 
-    @Override protected void setUp() throws Exception {
+    @BeforeExperiment
+    protected void setUp() throws Exception {
         KeyGenerator generator = KeyGenerator.getInstance("AES");
         generator.init(128);
         key = generator.generateKey();
diff --git a/benchmarks/src/benchmarks/regression/CollatorBenchmark.java b/benchmarks/src/benchmarks/regression/CollatorBenchmark.java
index 9a8f20e..794f5ec 100644
--- a/benchmarks/src/benchmarks/regression/CollatorBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/CollatorBenchmark.java
@@ -16,13 +16,11 @@
 
 package benchmarks.regression;
 
-import com.google.caliper.SimpleBenchmark;
-
 import java.text.Collator;
 import java.text.RuleBasedCollator;
 import java.util.Locale;
 
-public class CollatorBenchmark extends SimpleBenchmark {
+public class CollatorBenchmark {
 
     private static final RuleBasedCollator collator = (RuleBasedCollator)
             Collator.getInstance(Locale.US);
diff --git a/benchmarks/src/benchmarks/regression/CollectionsBenchmark.java b/benchmarks/src/benchmarks/regression/CollectionsBenchmark.java
index 18b969a..00c1191 100644
--- a/benchmarks/src/benchmarks/regression/CollectionsBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/CollectionsBenchmark.java
@@ -17,7 +17,6 @@
 package benchmarks.regression;
 
 import com.google.caliper.Param;
-import com.google.caliper.SimpleBenchmark;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Comparator;
@@ -25,7 +24,7 @@
 import java.util.Random;
 import java.util.Vector;
 
-public class CollectionsBenchmark extends SimpleBenchmark {
+public class CollectionsBenchmark {
     @Param({"4", "16", "64", "256", "1024"})
     private int arrayListLength;
 
diff --git a/benchmarks/src/benchmarks/regression/DateIntervalFormatBenchmark.java b/benchmarks/src/benchmarks/regression/DateIntervalFormatBenchmark.java
index e904b4d..3cde240 100644
--- a/benchmarks/src/benchmarks/regression/DateIntervalFormatBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/DateIntervalFormatBenchmark.java
@@ -16,16 +16,13 @@
 
 package benchmarks.regression;
 
-import com.google.caliper.SimpleBenchmark;
-
-import android.icu.util.ULocale;
 import android.icu.util.TimeZone;
-
+import android.icu.util.ULocale;
 import libcore.icu.DateIntervalFormat;
 
 import static libcore.icu.DateUtilsBridge.*;
 
-public class DateIntervalFormatBenchmark extends SimpleBenchmark {
+public class DateIntervalFormatBenchmark {
   public void timeDateIntervalFormat_formatDateRange_DATE(int reps) throws Exception {
     ULocale l = ULocale.US;
     TimeZone utc = TimeZone.getTimeZone("UTC");
diff --git a/benchmarks/src/benchmarks/regression/DateToStringBenchmark.java b/benchmarks/src/benchmarks/regression/DateToStringBenchmark.java
index 7fee61c..052fe38 100644
--- a/benchmarks/src/benchmarks/regression/DateToStringBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/DateToStringBenchmark.java
@@ -17,19 +17,18 @@
 package benchmarks.regression;
 
 import android.text.format.DateFormat;
-import com.google.caliper.Runner;
-import com.google.caliper.SimpleBenchmark;
+import com.google.caliper.BeforeExperiment;
 import java.text.SimpleDateFormat;
 import java.util.Calendar;
 import java.util.Date;
 import java.util.GregorianCalendar;
 
-public final class DateToStringBenchmark extends SimpleBenchmark {
+public final class DateToStringBenchmark {
     Date date;
     Calendar calendar;
     SimpleDateFormat format;
 
-    @Override
+    @BeforeExperiment
     protected void setUp() throws Exception {
         date = new Date(0);
         calendar = new GregorianCalendar();
@@ -60,8 +59,4 @@
             DateFormat.format("EEE MMM dd HH:mm:ss zzz yyyy", calendar);
         }
     }
-
-    public static void main(String[] args) throws Exception {
-        Runner.main(DateToStringBenchmark.class, args);
-    }
 }
diff --git a/benchmarks/src/benchmarks/regression/DecimalFormatBenchmark.java b/benchmarks/src/benchmarks/regression/DecimalFormatBenchmark.java
index 3d65ef0..0c4aa77 100644
--- a/benchmarks/src/benchmarks/regression/DecimalFormatBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/DecimalFormatBenchmark.java
@@ -1,13 +1,11 @@
 package benchmarks.regression;
 
-import com.google.caliper.SimpleBenchmark;
-
 import java.math.BigDecimal;
 import java.text.DecimalFormat;
 import java.text.NumberFormat;
 import java.util.Locale;
 
-public class DecimalFormatBenchmark extends SimpleBenchmark {
+public class DecimalFormatBenchmark {
 
     private static final String EXP_PATTERN = "##E0";
 
@@ -155,5 +153,4 @@
     public void time_formatToCharacterIterator10e1000(int reps) {
         formatToCharacterIterator(BD10E1000, reps);
     }
-
 }
diff --git a/benchmarks/src/benchmarks/regression/DefaultCharsetBenchmark.java b/benchmarks/src/benchmarks/regression/DefaultCharsetBenchmark.java
index bc7b013..24283e4 100644
--- a/benchmarks/src/benchmarks/regression/DefaultCharsetBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/DefaultCharsetBenchmark.java
@@ -17,10 +17,8 @@
 package benchmarks.regression;
 
 import java.nio.charset.Charset;
-import com.google.caliper.Param;
-import com.google.caliper.SimpleBenchmark;
 
-public class DefaultCharsetBenchmark extends SimpleBenchmark {
+public class DefaultCharsetBenchmark {
     public void time_defaultCharset(int reps) throws Exception {
         for (int i = 0; i < reps; ++i) {
             Charset.defaultCharset();
diff --git a/benchmarks/src/benchmarks/regression/DigestBenchmark.java b/benchmarks/src/benchmarks/regression/DigestBenchmark.java
index 7d00fec..e576d87 100644
--- a/benchmarks/src/benchmarks/regression/DigestBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/DigestBenchmark.java
@@ -16,11 +16,11 @@
 
 package benchmarks.regression;
 
-import com.google.caliper.Param;
-import com.google.caliper.SimpleBenchmark;
 import com.android.org.bouncycastle.crypto.Digest;
+import com.google.caliper.BeforeExperiment;
+import com.google.caliper.Param;
 
-public class DigestBenchmark extends SimpleBenchmark {
+public class DigestBenchmark {
 
     private static final int DATA_SIZE = 8192;
     private static final byte[] DATA = new byte[DATA_SIZE];
@@ -40,7 +40,8 @@
 
     private Class<? extends Digest> digestClass;
 
-    @Override protected void setUp() throws Exception {
+    @BeforeExperiment
+    protected void setUp() throws Exception {
         String className = "com.android.org.bouncycastle.crypto.digests.";
         switch (implementation) {
             case OPENSSL:
diff --git a/benchmarks/src/benchmarks/regression/DnsBenchmark.java b/benchmarks/src/benchmarks/regression/DnsBenchmark.java
index 2a71716..86bfa66 100644
--- a/benchmarks/src/benchmarks/regression/DnsBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/DnsBenchmark.java
@@ -16,13 +16,10 @@
 
 package benchmarks.regression;
 
-import com.google.caliper.Param;
-import com.google.caliper.Runner;
-import com.google.caliper.SimpleBenchmark;
 import java.net.InetAddress;
 import java.net.UnknownHostException;
 
-public class DnsBenchmark extends SimpleBenchmark {
+public class DnsBenchmark {
     public void timeDns(int reps) throws Exception {
         String[] hosts = new String[] {
             "www.amazon.com",
diff --git a/benchmarks/src/benchmarks/regression/DoPrivilegedBenchmark.java b/benchmarks/src/benchmarks/regression/DoPrivilegedBenchmark.java
index effb284..48b1fc8 100644
--- a/benchmarks/src/benchmarks/regression/DoPrivilegedBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/DoPrivilegedBenchmark.java
@@ -16,13 +16,10 @@
 
 package benchmarks.regression;
 
-import com.google.caliper.Param;
-import com.google.caliper.Runner;
-import com.google.caliper.SimpleBenchmark;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
 
-public class DoPrivilegedBenchmark extends SimpleBenchmark {
+public class DoPrivilegedBenchmark {
     public void timeDirect(int reps) throws Exception {
         for (int i = 0; i < reps; ++i) {
             String lineSeparator = System.getProperty("line.separator");
diff --git a/benchmarks/src/benchmarks/regression/DoubleBenchmark.java b/benchmarks/src/benchmarks/regression/DoubleBenchmark.java
index aa692ac..546c17e 100644
--- a/benchmarks/src/benchmarks/regression/DoubleBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/DoubleBenchmark.java
@@ -16,11 +16,7 @@
 
 package benchmarks.regression;
 
-import com.google.caliper.Param;
-import com.google.caliper.Runner;
-import com.google.caliper.SimpleBenchmark;
-
-public class DoubleBenchmark extends SimpleBenchmark {
+public class DoubleBenchmark {
     private double d = 1.2;
     private long l = 4608083138725491507L;
 
diff --git a/benchmarks/src/benchmarks/regression/EqualsHashCodeBenchmark.java b/benchmarks/src/benchmarks/regression/EqualsHashCodeBenchmark.java
index 72bb216..0a303d6 100644
--- a/benchmarks/src/benchmarks/regression/EqualsHashCodeBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/EqualsHashCodeBenchmark.java
@@ -16,12 +16,12 @@
 
 package benchmarks.regression;
 
+import com.google.caliper.BeforeExperiment;
 import com.google.caliper.Param;
-import com.google.caliper.SimpleBenchmark;
 import java.net.URI;
 import java.net.URL;
 
-public final class EqualsHashCodeBenchmark extends SimpleBenchmark {
+public final class EqualsHashCodeBenchmark {
     private enum Type {
         URI() {
             @Override Object newInstance(String text) throws Exception {
@@ -48,7 +48,8 @@
     Object c1;
     Object c2;
 
-    @Override protected void setUp() throws Exception {
+    @BeforeExperiment
+    protected void setUp() throws Exception {
         a1 = type.newInstance("https://mail.google.com/mail/u/0/?shva=1#inbox");
         a2 = type.newInstance("https://mail.google.com/mail/u/0/?shva=1#inbox");
         b1 = type.newInstance("http://developer.android.com/reference/java/net/URI.html");
diff --git a/benchmarks/src/benchmarks/regression/ExpensiveObjectsBenchmark.java b/benchmarks/src/benchmarks/regression/ExpensiveObjectsBenchmark.java
index 535e298..2777884 100644
--- a/benchmarks/src/benchmarks/regression/ExpensiveObjectsBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/ExpensiveObjectsBenchmark.java
@@ -16,17 +16,19 @@
 
 package benchmarks.regression;
 
-import com.google.caliper.Benchmark;
-import com.google.caliper.Param;
-import com.google.caliper.Runner;
-import com.google.caliper.SimpleBenchmark;
-import java.text.*;
-import java.util.*;
+import java.text.Collator;
+import java.text.DateFormat;
+import java.text.DateFormatSymbols;
+import java.text.DecimalFormatSymbols;
+import java.text.NumberFormat;
+import java.text.SimpleDateFormat;
+import java.util.GregorianCalendar;
+import java.util.Locale;
 
 /**
  * Benchmarks creation and cloning various expensive objects.
  */
-public class ExpensiveObjectsBenchmark extends SimpleBenchmark {
+public class ExpensiveObjectsBenchmark {
     public void timeNewDateFormatTimeInstance(int reps) {
         for (int i = 0; i < reps; ++i) {
             DateFormat df = DateFormat.getTimeInstance(DateFormat.SHORT);
diff --git a/benchmarks/src/benchmarks/regression/FloatBenchmark.java b/benchmarks/src/benchmarks/regression/FloatBenchmark.java
index a92bb69..6964b01 100644
--- a/benchmarks/src/benchmarks/regression/FloatBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/FloatBenchmark.java
@@ -16,11 +16,7 @@
 
 package benchmarks.regression;
 
-import com.google.caliper.Param;
-import com.google.caliper.Runner;
-import com.google.caliper.SimpleBenchmark;
-
-public class FloatBenchmark extends SimpleBenchmark {
+public class FloatBenchmark {
     private float f = 1.2f;
     private int i = 1067030938;
 
diff --git a/benchmarks/src/benchmarks/regression/FormatterBenchmark.java b/benchmarks/src/benchmarks/regression/FormatterBenchmark.java
index 0d4cf26..091e7ea 100644
--- a/benchmarks/src/benchmarks/regression/FormatterBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/FormatterBenchmark.java
@@ -16,15 +16,13 @@
 
 package benchmarks.regression;
 
-import com.google.caliper.Runner;
-import com.google.caliper.SimpleBenchmark;
 import java.util.Formatter;
 import java.util.Locale;
 
 /**
  * Compares Formatter against hand-written StringBuilder code.
  */
-public class FormatterBenchmark extends SimpleBenchmark {
+public class FormatterBenchmark {
     public void timeFormatter_NoFormatting(int reps) {
         for (int i = 0; i < reps; i++) {
             Formatter f = new Formatter();
diff --git a/benchmarks/src/benchmarks/regression/HostnameVerifierBenchmark.java b/benchmarks/src/benchmarks/regression/HostnameVerifierBenchmark.java
index e9218c4..9bf72a8 100644
--- a/benchmarks/src/benchmarks/regression/HostnameVerifierBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/HostnameVerifierBenchmark.java
@@ -16,9 +16,8 @@
 
 package benchmarks.regression;
 
+import com.google.caliper.BeforeExperiment;
 import com.google.caliper.Param;
-import com.google.caliper.Runner;
-import com.google.caliper.SimpleBenchmark;
 import java.io.ByteArrayInputStream;
 import java.net.URL;
 import java.security.Principal;
@@ -37,7 +36,7 @@
  * caches previous results which skews the results of the benchmark: In practice
  * each certificate instance is verified once and then released.
  */
-public final class HostnameVerifierBenchmark extends SimpleBenchmark {
+public final class HostnameVerifierBenchmark {
 
     @Param({"android.clients.google.com",
             "m.google.com",
@@ -49,7 +48,8 @@
     private HostnameVerifier hostnameVerifier;
     private byte[][] encodedCertificates;
 
-    @Override protected void setUp() throws Exception {
+    @BeforeExperiment
+    protected void setUp() throws Exception {
         URL url = new URL("https", host, "/");
         hostnameVerifier = HttpsURLConnection.getDefaultHostnameVerifier();
         HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
@@ -163,8 +163,4 @@
             throw new UnsupportedOperationException();
         }
     }
-
-    public static void main(String[] args) {
-        Runner.main(HostnameVerifierBenchmark.class, args);
-    }
 }
diff --git a/benchmarks/src/benchmarks/regression/IcuBenchmark.java b/benchmarks/src/benchmarks/regression/IcuBenchmark.java
index 36014f2..47661b8 100644
--- a/benchmarks/src/benchmarks/regression/IcuBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/IcuBenchmark.java
@@ -16,13 +16,10 @@
 
 package benchmarks.regression;
 
-import com.google.caliper.SimpleBenchmark;
-
 import java.util.Locale;
-
 import libcore.icu.ICU;
 
-public class IcuBenchmark extends SimpleBenchmark {
+public class IcuBenchmark {
 
     private static final String ASCII_LOWERCASE = makeUnicodeRange(97, 122);
     private static final String ASCII_UPPERCASE = makeUnicodeRange(65, 90);
diff --git a/benchmarks/src/benchmarks/regression/IdnBenchmark.java b/benchmarks/src/benchmarks/regression/IdnBenchmark.java
index 9de5261..6a40d01 100644
--- a/benchmarks/src/benchmarks/regression/IdnBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/IdnBenchmark.java
@@ -16,11 +16,9 @@
 
 package benchmarks.regression;
 
-import com.google.caliper.SimpleBenchmark;
-
 import java.net.IDN;
 
-public class IdnBenchmark extends SimpleBenchmark {
+public class IdnBenchmark {
 
     public void timeToUnicode(int reps) {
         for (int i = 0; i < reps; i++) {
diff --git a/benchmarks/src/benchmarks/regression/IntConstantDivisionBenchmark.java b/benchmarks/src/benchmarks/regression/IntConstantDivisionBenchmark.java
index 498b783..533461b 100644
--- a/benchmarks/src/benchmarks/regression/IntConstantDivisionBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/IntConstantDivisionBenchmark.java
@@ -16,11 +16,7 @@
 
 package benchmarks.regression;
 
-import com.google.caliper.Param;
-import com.google.caliper.Runner;
-import com.google.caliper.SimpleBenchmark;
-
-public class IntConstantDivisionBenchmark extends SimpleBenchmark {
+public class IntConstantDivisionBenchmark {
     public int timeDivideIntByConstant2(int reps) {
         int result = 1;
         for (int i = 0; i < reps; ++i) {
diff --git a/benchmarks/src/benchmarks/regression/IntConstantMultiplicationBenchmark.java b/benchmarks/src/benchmarks/regression/IntConstantMultiplicationBenchmark.java
index ca1349c..cc096d6 100644
--- a/benchmarks/src/benchmarks/regression/IntConstantMultiplicationBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/IntConstantMultiplicationBenchmark.java
@@ -16,11 +16,7 @@
 
 package benchmarks.regression;
 
-import com.google.caliper.Param;
-import com.google.caliper.Runner;
-import com.google.caliper.SimpleBenchmark;
-
-public class IntConstantMultiplicationBenchmark extends SimpleBenchmark {
+public class IntConstantMultiplicationBenchmark {
     public int timeMultiplyIntByConstant6(int reps) {
         int result = 1;
         for (int i = 0; i < reps; ++i) {
diff --git a/benchmarks/src/benchmarks/regression/IntConstantRemainderBenchmark.java b/benchmarks/src/benchmarks/regression/IntConstantRemainderBenchmark.java
index 6174721..b22868d 100644
--- a/benchmarks/src/benchmarks/regression/IntConstantRemainderBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/IntConstantRemainderBenchmark.java
@@ -16,11 +16,7 @@
 
 package benchmarks.regression;
 
-import com.google.caliper.Param;
-import com.google.caliper.Runner;
-import com.google.caliper.SimpleBenchmark;
-
-public class IntConstantRemainderBenchmark extends SimpleBenchmark {
+public class IntConstantRemainderBenchmark {
     public int timeRemainderIntByConstant2(int reps) {
         int result = 1;
         for (int i = 0; i < reps; ++i) {
diff --git a/benchmarks/src/benchmarks/regression/IntegerBenchmark.java b/benchmarks/src/benchmarks/regression/IntegerBenchmark.java
index 601bb5d..f7f97c7 100644
--- a/benchmarks/src/benchmarks/regression/IntegerBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/IntegerBenchmark.java
@@ -16,10 +16,7 @@
 
 package benchmarks.regression;
 
-import com.google.caliper.Param;
-import com.google.caliper.SimpleBenchmark;
-
-public class IntegerBenchmark extends SimpleBenchmark {
+public class IntegerBenchmark {
     public int timeLongSignumBranch(int reps) {
         int t = 0;
         for (int i = 0; i < reps; ++i) {
diff --git a/benchmarks/src/benchmarks/regression/IntegralToStringBenchmark.java b/benchmarks/src/benchmarks/regression/IntegralToStringBenchmark.java
index cab9e98..3445849 100644
--- a/benchmarks/src/benchmarks/regression/IntegralToStringBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/IntegralToStringBenchmark.java
@@ -16,11 +16,7 @@
 
 package benchmarks.regression;
 
-import com.google.caliper.Param;
-import com.google.caliper.Runner;
-import com.google.caliper.SimpleBenchmark;
-
-public class IntegralToStringBenchmark extends SimpleBenchmark {
+public class IntegralToStringBenchmark {
 
     private static final int SMALL  = 12;
     private static final int MEDIUM = 12345;
diff --git a/benchmarks/src/benchmarks/regression/JarFileBenchmark.java b/benchmarks/src/benchmarks/regression/JarFileBenchmark.java
index 626ca21..6e0cb57 100644
--- a/benchmarks/src/benchmarks/regression/JarFileBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/JarFileBenchmark.java
@@ -16,12 +16,12 @@
 
 package benchmarks.regression;
 
-import java.io.File;
-import java.util.jar.*;
 import com.google.caliper.Param;
-import com.google.caliper.SimpleBenchmark;
+import java.io.File;
+import java.util.jar.JarFile;
+import java.util.jar.Manifest;
 
-public class JarFileBenchmark extends SimpleBenchmark {
+public class JarFileBenchmark {
     @Param({
         "/system/framework/bouncycastle.jar",
         "/system/framework/core.jar",
diff --git a/benchmarks/src/benchmarks/regression/KeyPairGeneratorBenchmark.java b/benchmarks/src/benchmarks/regression/KeyPairGeneratorBenchmark.java
index 762c935..75c71b4 100644
--- a/benchmarks/src/benchmarks/regression/KeyPairGeneratorBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/KeyPairGeneratorBenchmark.java
@@ -16,17 +16,13 @@
 
 package benchmarks.regression;
 
+import com.google.caliper.BeforeExperiment;
 import com.google.caliper.Param;
-import com.google.caliper.SimpleBenchmark;
 import java.security.KeyPair;
-import java.security.PrivateKey;
-import java.security.PublicKey;
 import java.security.KeyPairGenerator;
 import java.security.SecureRandom;
-import java.util.HashMap;
-import java.util.Map;
 
-public class KeyPairGeneratorBenchmark extends SimpleBenchmark {
+public class KeyPairGeneratorBenchmark {
     @Param private Algorithm algorithm;
 
     public enum Algorithm {
@@ -42,7 +38,8 @@
     private KeyPairGenerator generator;
     private SecureRandom random;
 
-    @Override protected void setUp() throws Exception {
+    @BeforeExperiment
+    protected void setUp() throws Exception {
         this.generatorAlgorithm = algorithm.toString();
         
         final String provider;
diff --git a/benchmarks/src/benchmarks/regression/LoopingBackwardsBenchmark.java b/benchmarks/src/benchmarks/regression/LoopingBackwardsBenchmark.java
index 054eff9..f0a474c 100644
--- a/benchmarks/src/benchmarks/regression/LoopingBackwardsBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/LoopingBackwardsBenchmark.java
@@ -17,15 +17,13 @@
 package benchmarks.regression;
 
 import com.google.caliper.Param;
-import com.google.caliper.Runner;
-import com.google.caliper.SimpleBenchmark;
 
 /**
  * Testing the old canard that looping backwards is faster.
  *
  * @author Kevin Bourrillion
  */
-public class LoopingBackwardsBenchmark extends SimpleBenchmark {
+public class LoopingBackwardsBenchmark {
   @Param({"2", "20", "2000", "20000000"}) int max;
 
   public int timeForwards(int reps) {
diff --git a/benchmarks/src/benchmarks/regression/MathBenchmark.java b/benchmarks/src/benchmarks/regression/MathBenchmark.java
index 19b2162..41426b5 100644
--- a/benchmarks/src/benchmarks/regression/MathBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/MathBenchmark.java
@@ -16,15 +16,11 @@
 
 package benchmarks.regression;
 
-import com.google.caliper.Param;
-import com.google.caliper.Runner;
-import com.google.caliper.SimpleBenchmark;
-
 /**
  * Many of these tests are bogus in that the cost will vary wildly depending on inputs.
  * For _my_ current purposes, that's okay. But beware!
  */
-public class MathBenchmark extends SimpleBenchmark {
+public class MathBenchmark {
     private final double d = 1.2;
     private final float f = 1.2f;
     private final int i = 1;
diff --git a/benchmarks/src/benchmarks/regression/MessageDigestBenchmark.java b/benchmarks/src/benchmarks/regression/MessageDigestBenchmark.java
index c9d8074..a986434 100644
--- a/benchmarks/src/benchmarks/regression/MessageDigestBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/MessageDigestBenchmark.java
@@ -17,10 +17,9 @@
 package benchmarks.regression;
 
 import com.google.caliper.Param;
-import com.google.caliper.SimpleBenchmark;
 import java.security.MessageDigest;
 
-public class MessageDigestBenchmark extends SimpleBenchmark {
+public class MessageDigestBenchmark {
 
     private static final int DATA_SIZE = 8192;
     private static final byte[] DATA = new byte[DATA_SIZE];
diff --git a/benchmarks/src/benchmarks/regression/MutableIntBenchmark.java b/benchmarks/src/benchmarks/regression/MutableIntBenchmark.java
index ee4f2d9..9e7f893 100644
--- a/benchmarks/src/benchmarks/regression/MutableIntBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/MutableIntBenchmark.java
@@ -17,11 +17,9 @@
 package benchmarks.regression;
 
 import com.google.caliper.Param;
-import com.google.caliper.Runner;
-import com.google.caliper.SimpleBenchmark;
 import java.util.concurrent.atomic.AtomicInteger;
 
-public final class MutableIntBenchmark extends SimpleBenchmark {
+public final class MutableIntBenchmark {
 
     enum Kind {
         ARRAY() {
@@ -85,8 +83,4 @@
     public void timeGet(int reps) {
         kind.timeGet(reps);
     }
-
-    public static void main(String[] args) {
-        Runner.main(MutableIntBenchmark.class, args);
-    }
 }
diff --git a/benchmarks/src/benchmarks/regression/NativeMethodBenchmark.java b/benchmarks/src/benchmarks/regression/NativeMethodBenchmark.java
index 2e482ef..c30ea08 100644
--- a/benchmarks/src/benchmarks/regression/NativeMethodBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/NativeMethodBenchmark.java
@@ -16,10 +16,9 @@
 
 package benchmarks.regression;
 
-import com.google.caliper.SimpleBenchmark;
 import org.apache.harmony.dalvik.NativeTestTarget;
 
-public class NativeMethodBenchmark extends SimpleBenchmark {
+public class NativeMethodBenchmark {
     public void time_emptyJniStaticSynchronizedMethod0(int reps) throws Exception {
         for (int i = 0; i < reps; ++i) {
             NativeTestTarget.emptyJniStaticSynchronizedMethod0();
diff --git a/benchmarks/src/benchmarks/regression/ParseBenchmark.java b/benchmarks/src/benchmarks/regression/ParseBenchmark.java
index b44b429..8f52a34 100644
--- a/benchmarks/src/benchmarks/regression/ParseBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/ParseBenchmark.java
@@ -16,9 +16,8 @@
 
 package benchmarks.regression;
 
+import com.google.caliper.BeforeExperiment;
 import com.google.caliper.Param;
-import com.google.caliper.Runner;
-import com.google.caliper.SimpleBenchmark;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
@@ -40,7 +39,7 @@
  * That file contains Twitter feed data, which is representative of what
  * applications will be parsing.
  */
-public final class ParseBenchmark extends SimpleBenchmark {
+public final class ParseBenchmark {
 
     @Param Document document;
     @Param Api api;
@@ -90,7 +89,8 @@
     private String text;
     private Parser parser;
 
-    @Override protected void setUp() throws Exception {
+    @BeforeExperiment
+    protected void setUp() throws Exception {
         text = resourceToString("/" + document.name() + "." + api.extension);
         parser = api.newParser();
     }
@@ -101,10 +101,6 @@
         }
     }
 
-    public static void main(String... args) throws Exception {
-        Runner.main(ParseBenchmark.class, args);
-    }
-
     private static String resourceToString(String path) throws Exception {
         InputStream in = ParseBenchmark.class.getResourceAsStream(path);
         if (in == null) {
diff --git a/benchmarks/src/benchmarks/regression/PriorityQueueBenchmark.java b/benchmarks/src/benchmarks/regression/PriorityQueueBenchmark.java
index 2fe661b..a5b02b4 100644
--- a/benchmarks/src/benchmarks/regression/PriorityQueueBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/PriorityQueueBenchmark.java
@@ -16,15 +16,15 @@
 
 package benchmarks.regression;
 
+import com.google.caliper.BeforeExperiment;
 import com.google.caliper.Param;
-import com.google.caliper.SimpleBenchmark;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import java.util.PriorityQueue;
 import java.util.Random;
 
-public class PriorityQueueBenchmark extends SimpleBenchmark {
+public class PriorityQueueBenchmark {
     @Param({"100", "1000", "10000"}) private int queueSize;
     @Param({"0", "25", "50", "75", "100"}) private int hitRate;
 
@@ -33,7 +33,8 @@
     private List<Integer> seekElements;
     private Random random = new Random(189279387L);
 
-    @Override protected void setUp() throws Exception {
+    @BeforeExperiment
+    protected void setUp() throws Exception {
         pq = new PriorityQueue<Integer>();
         usepq = new PriorityQueue<Integer>();
         seekElements = new ArrayList<Integer>();
diff --git a/benchmarks/src/benchmarks/regression/PropertyAccessBenchmark.java b/benchmarks/src/benchmarks/regression/PropertyAccessBenchmark.java
index cabd6ed..2781a29 100644
--- a/benchmarks/src/benchmarks/regression/PropertyAccessBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/PropertyAccessBenchmark.java
@@ -16,11 +16,11 @@
 
 package benchmarks.regression;
 
-import com.google.caliper.SimpleBenchmark;
+import com.google.caliper.BeforeExperiment;
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 
-public final class PropertyAccessBenchmark extends SimpleBenchmark {
+public final class PropertyAccessBenchmark {
     private View view = new View();
     private Method setX;
     private GeneratedProperty generatedSetter = new GeneratedSetter();
@@ -28,7 +28,8 @@
     private Field x;
     private Object[] argsBox = new Object[1];
 
-    @Override protected void setUp() throws Exception {
+    @BeforeExperiment
+    protected void setUp() throws Exception {
         setX = View.class.getDeclaredMethod("setX", float.class);
         x = View.class.getDeclaredField("x");
     }
diff --git a/benchmarks/src/benchmarks/regression/ProviderBenchmark.java b/benchmarks/src/benchmarks/regression/ProviderBenchmark.java
index 649aa01..cfbd642 100644
--- a/benchmarks/src/benchmarks/regression/ProviderBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/ProviderBenchmark.java
@@ -20,11 +20,7 @@
 import java.security.Security;
 import javax.crypto.Cipher;
 
-import com.google.caliper.Param;
-import com.google.caliper.SimpleBenchmark;
-import javax.net.ssl.SSLSocketFactory;
-
-public class ProviderBenchmark extends SimpleBenchmark {
+public class ProviderBenchmark {
     public void timeStableProviders(int reps) throws Exception {
         for (int i = 0; i < reps; ++i) {
             Cipher c = Cipher.getInstance("RSA");
diff --git a/benchmarks/src/benchmarks/regression/RandomBenchmark.java b/benchmarks/src/benchmarks/regression/RandomBenchmark.java
index 0792805..284c63f 100644
--- a/benchmarks/src/benchmarks/regression/RandomBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/RandomBenchmark.java
@@ -18,10 +18,8 @@
 
 import java.security.SecureRandom;
 import java.util.Random;
-import com.google.caliper.Param;
-import com.google.caliper.SimpleBenchmark;
 
-public class RandomBenchmark extends SimpleBenchmark {
+public class RandomBenchmark {
     public void timeNewRandom(int reps) throws Exception {
         for (int i = 0; i < reps; ++i) {
             Random rng = new Random();
diff --git a/benchmarks/src/benchmarks/regression/RealToStringBenchmark.java b/benchmarks/src/benchmarks/regression/RealToStringBenchmark.java
index 8914cf64..dcdae39 100644
--- a/benchmarks/src/benchmarks/regression/RealToStringBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/RealToStringBenchmark.java
@@ -16,11 +16,7 @@
 
 package benchmarks.regression;
 
-import com.google.caliper.Param;
-import com.google.caliper.Runner;
-import com.google.caliper.SimpleBenchmark;
-
-public class RealToStringBenchmark extends SimpleBenchmark {
+public class RealToStringBenchmark {
 
     private static final float SMALL  = -123.45f;
     private static final float MEDIUM = -123.45e8f;
diff --git a/benchmarks/src/benchmarks/regression/ReflectionBenchmark.java b/benchmarks/src/benchmarks/regression/ReflectionBenchmark.java
index 4b47b26..e3c7bbf 100644
--- a/benchmarks/src/benchmarks/regression/ReflectionBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/ReflectionBenchmark.java
@@ -16,12 +16,11 @@
 
 package benchmarks.regression;
 
-import com.google.caliper.Param;
-import com.google.caliper.Runner;
-import com.google.caliper.SimpleBenchmark;
-import java.lang.reflect.*;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
 
-public class ReflectionBenchmark extends SimpleBenchmark {
+public class ReflectionBenchmark {
     public void timeObject_getClass(int reps) throws Exception {
         C c = new C();
         for (int rep = 0; rep < reps; ++rep) {
diff --git a/benchmarks/src/benchmarks/regression/RelativeDateTimeFormatterBenchmark.java b/benchmarks/src/benchmarks/regression/RelativeDateTimeFormatterBenchmark.java
index ea2cf4a..6ddbc77 100644
--- a/benchmarks/src/benchmarks/regression/RelativeDateTimeFormatterBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/RelativeDateTimeFormatterBenchmark.java
@@ -16,8 +16,6 @@
 
 package benchmarks.regression;
 
-import com.google.caliper.SimpleBenchmark;
-
 import java.util.Locale;
 import java.util.TimeZone;
 
@@ -25,7 +23,7 @@
 import static libcore.icu.RelativeDateTimeFormatter.getRelativeDateTimeString;
 import static libcore.icu.RelativeDateTimeFormatter.getRelativeTimeSpanString;
 
-public class RelativeDateTimeFormatterBenchmark extends SimpleBenchmark {
+public class RelativeDateTimeFormatterBenchmark {
   public void timeRelativeDateTimeFormatter_getRelativeTimeSpanString(int reps) throws Exception {
     Locale l = Locale.US;
     TimeZone utc = TimeZone.getTimeZone("Europe/London");
diff --git a/benchmarks/src/benchmarks/regression/SSLLoopbackBenchmark.java b/benchmarks/src/benchmarks/regression/SSLLoopbackBenchmark.java
index 0d9a792..f88c793 100644
--- a/benchmarks/src/benchmarks/regression/SSLLoopbackBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/SSLLoopbackBenchmark.java
@@ -16,23 +16,12 @@
 
 package benchmarks.regression;
 
-import com.google.caliper.SimpleBenchmark;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.InetAddress;
-import java.net.Socket;
-import java.net.URL;
-import javax.net.SocketFactory;
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.SSLServerSocketFactory;
 import javax.net.ssl.SSLSocket;
-
 import libcore.java.security.TestKeyStore;
 import libcore.javax.net.ssl.TestSSLContext;
 import libcore.javax.net.ssl.TestSSLSocketPair;
 
-public class SSLLoopbackBenchmark extends SimpleBenchmark {
+public class SSLLoopbackBenchmark {
 
     public void time(int reps) throws Exception {
         for (int i = 0; i < reps; ++i) {
diff --git a/benchmarks/src/benchmarks/regression/SSLSocketBenchmark.java b/benchmarks/src/benchmarks/regression/SSLSocketBenchmark.java
index 5be890e..d7aa8ff 100644
--- a/benchmarks/src/benchmarks/regression/SSLSocketBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/SSLSocketBenchmark.java
@@ -16,8 +16,8 @@
 
 package benchmarks.regression;
 
+import com.google.caliper.BeforeExperiment;
 import com.google.caliper.Param;
-import com.google.caliper.SimpleBenchmark;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
@@ -27,7 +27,7 @@
 import javax.net.SocketFactory;
 import javax.net.ssl.SSLContext;
 
-public class SSLSocketBenchmark extends SimpleBenchmark {
+public class SSLSocketBenchmark {
 
     private static final int BUFFER_SIZE = 8192;
 
@@ -71,7 +71,8 @@
 
     private SocketFactory sf;
 
-    @Override protected void setUp() throws Exception {
+    @BeforeExperiment
+    protected void setUp() throws Exception {
         SSLContext sslContext = SSLContext.getInstance("SSL");
         sslContext.init(null, null, null);
         this.sf = sslContext.getSocketFactory();
diff --git a/benchmarks/src/benchmarks/regression/SSLSocketFactoryBenchmark.java b/benchmarks/src/benchmarks/regression/SSLSocketFactoryBenchmark.java
index d0448d6..2b00c39 100644
--- a/benchmarks/src/benchmarks/regression/SSLSocketFactoryBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/SSLSocketFactoryBenchmark.java
@@ -16,11 +16,9 @@
 
 package benchmarks.regression;
 
-import com.google.caliper.Param;
-import com.google.caliper.SimpleBenchmark;
 import javax.net.ssl.SSLSocketFactory;
 
-public class SSLSocketFactoryBenchmark extends SimpleBenchmark {
+public class SSLSocketFactoryBenchmark {
     public void time(int reps) throws Exception {
         for (int i = 0; i < reps; ++i) {
             SSLSocketFactory.getDefault();
diff --git a/benchmarks/src/benchmarks/regression/SchemePrefixBenchmark.java b/benchmarks/src/benchmarks/regression/SchemePrefixBenchmark.java
index d90fe29..375965e 100644
--- a/benchmarks/src/benchmarks/regression/SchemePrefixBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/SchemePrefixBenchmark.java
@@ -17,12 +17,11 @@
 package benchmarks.regression;
 
 import com.google.caliper.Param;
-import com.google.caliper.SimpleBenchmark;
 import java.util.Locale;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-public final class SchemePrefixBenchmark extends SimpleBenchmark {
+public final class SchemePrefixBenchmark {
 
     enum Strategy {
         JAVA() {
diff --git a/benchmarks/src/benchmarks/regression/SerializationBenchmark.java b/benchmarks/src/benchmarks/regression/SerializationBenchmark.java
index bc958eb..6ff4342 100644
--- a/benchmarks/src/benchmarks/regression/SerializationBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/SerializationBenchmark.java
@@ -16,14 +16,15 @@
 
 package benchmarks.regression;
 
-import com.google.caliper.Param;
-import com.google.caliper.Runner;
-import com.google.caliper.SimpleBenchmark;
-import java.io.*;
-import java.lang.reflect.*;
-import java.util.*;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.ObjectStreamClass;
+import java.io.Serializable;
+import java.util.ArrayList;
 
-public class SerializationBenchmark extends SimpleBenchmark {
+public class SerializationBenchmark {
     private static byte[] bytes(Object o) throws Exception {
         ByteArrayOutputStream baos = new ByteArrayOutputStream(1024);
         ObjectOutputStream out = new ObjectOutputStream(baos);
diff --git a/benchmarks/src/benchmarks/regression/SignatureBenchmark.java b/benchmarks/src/benchmarks/regression/SignatureBenchmark.java
index 373b876..e7a3c80 100644
--- a/benchmarks/src/benchmarks/regression/SignatureBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/SignatureBenchmark.java
@@ -16,9 +16,8 @@
 
 package benchmarks.regression;
 
-import com.android.org.conscrypt.OpenSSLSignature;
+import com.google.caliper.BeforeExperiment;
 import com.google.caliper.Param;
-import com.google.caliper.SimpleBenchmark;
 import java.security.KeyPair;
 import java.security.KeyPairGenerator;
 import java.security.PrivateKey;
@@ -30,7 +29,7 @@
 /**
  * Tests RSA and DSA signature creation and verification.
  */
-public class SignatureBenchmark extends SimpleBenchmark {
+public class SignatureBenchmark {
 
     private static final int DATA_SIZE = 8192;
     private static final byte[] DATA = new byte[DATA_SIZE];
@@ -64,7 +63,8 @@
     private PrivateKey privateKey;
     private PublicKey publicKey;
 
-    @Override protected void setUp() throws Exception {
+    @BeforeExperiment
+    protected void setUp() throws Exception {
         this.signatureAlgorithm = algorithm.toString();
 
         String keyAlgorithm = signatureAlgorithm.substring(signatureAlgorithm.length() - 3 ,
diff --git a/benchmarks/src/benchmarks/regression/StrictMathBenchmark.java b/benchmarks/src/benchmarks/regression/StrictMathBenchmark.java
index e844d93..0dcf882 100644
--- a/benchmarks/src/benchmarks/regression/StrictMathBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/StrictMathBenchmark.java
@@ -16,15 +16,11 @@
 
 package benchmarks.regression;
 
-import com.google.caliper.Param;
-import com.google.caliper.Runner;
-import com.google.caliper.SimpleBenchmark;
-
 /**
  * Many of these tests are bogus in that the cost will vary wildly depending on inputs.
  * For _my_ current purposes, that's okay. But beware!
  */
-public class StrictMathBenchmark extends SimpleBenchmark {
+public class StrictMathBenchmark {
     private final double d = 1.2;
     private final float f = 1.2f;
     private final int i = 1;
diff --git a/benchmarks/src/benchmarks/regression/StringBenchmark.java b/benchmarks/src/benchmarks/regression/StringBenchmark.java
index e09ee8b..dc425c3 100644
--- a/benchmarks/src/benchmarks/regression/StringBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/StringBenchmark.java
@@ -17,9 +17,8 @@
 package benchmarks.regression;
 
 import com.google.caliper.Param;
-import com.google.caliper.SimpleBenchmark;
 
-public class StringBenchmark extends SimpleBenchmark {
+public class StringBenchmark {
     enum StringLengths {
         EMPTY(""),
         SHORT("short"),
diff --git a/benchmarks/src/benchmarks/regression/StringBuilderBenchmark.java b/benchmarks/src/benchmarks/regression/StringBuilderBenchmark.java
index 79eff2a..07a2305 100644
--- a/benchmarks/src/benchmarks/regression/StringBuilderBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/StringBuilderBenchmark.java
@@ -17,13 +17,11 @@
 package benchmarks.regression;
 
 import com.google.caliper.Param;
-import com.google.caliper.Runner;
-import com.google.caliper.SimpleBenchmark;
 
 /**
  * Tests the performance of various StringBuilder methods.
  */
-public class StringBuilderBenchmark extends SimpleBenchmark {
+public class StringBuilderBenchmark {
 
     @Param({"1", "10", "100"}) private int length;
 
diff --git a/benchmarks/src/benchmarks/regression/StringCaseMappingBenchmark.java b/benchmarks/src/benchmarks/regression/StringCaseMappingBenchmark.java
index ae6b6b6..cd554a8 100644
--- a/benchmarks/src/benchmarks/regression/StringCaseMappingBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/StringCaseMappingBenchmark.java
@@ -16,11 +16,10 @@
 
 package benchmarks.regression;
 
-import java.util.Locale;
 import com.google.caliper.Param;
-import com.google.caliper.SimpleBenchmark;
+import java.util.Locale;
 
-public class StringCaseMappingBenchmark extends SimpleBenchmark {
+public class StringCaseMappingBenchmark {
     enum Inputs {
         EMPTY(""),
 
diff --git a/benchmarks/src/benchmarks/regression/StringEqualsBenchmark.java b/benchmarks/src/benchmarks/regression/StringEqualsBenchmark.java
index 3ba2ac1..db19b25 100644
--- a/benchmarks/src/benchmarks/regression/StringEqualsBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/StringEqualsBenchmark.java
@@ -16,9 +16,7 @@
 
 package benchmarks.regression;
 
-import com.google.caliper.Param;
-import com.google.caliper.Runner;
-import com.google.caliper.SimpleBenchmark;
+import com.google.caliper.BeforeExperiment;
 import junit.framework.Assert;
 
 /**
@@ -27,7 +25,7 @@
  * that are not equal, identical strings with different references, strings with different endings,
  * interned strings, and strings of different lengths.
  */
-public class StringEqualsBenchmark extends SimpleBenchmark {
+public class StringEqualsBenchmark {
     private final String long1 = "Ahead-of-time compilation is possible as the compiler may just"
         + "convert an instruction thus: dex code: add-int v1000, v2000, v3000 C code: setIntRegter"
         + "(1000, call_dex_add_int(getIntRegister(2000), getIntRegister(3000)) This means even lid"
@@ -181,7 +179,8 @@
 
     // Check assumptions about how the compiler, new String(String), and String.intern() work.
     // Any failures here would invalidate these benchmarks.
-    @Override protected void setUp() throws Exception {
+    @BeforeExperiment
+    protected void setUp() throws Exception {
         // String constants are the same object
         Assert.assertSame("abc", "abc");
         // new String(String) makes a copy
diff --git a/benchmarks/src/benchmarks/regression/StringIsEmptyBenchmark.java b/benchmarks/src/benchmarks/regression/StringIsEmptyBenchmark.java
index a3be80a..4be478e 100644
--- a/benchmarks/src/benchmarks/regression/StringIsEmptyBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/StringIsEmptyBenchmark.java
@@ -16,10 +16,7 @@
 
 package benchmarks.regression;
 
-import com.google.caliper.Runner;
-import com.google.caliper.SimpleBenchmark;
-
-public class StringIsEmptyBenchmark extends SimpleBenchmark {
+public class StringIsEmptyBenchmark {
     public void timeIsEmpty_NonEmpty(int reps) {
         boolean result = true;
         for (int i = 0; i < reps; ++i) {
diff --git a/benchmarks/src/benchmarks/regression/StringLengthBenchmark.java b/benchmarks/src/benchmarks/regression/StringLengthBenchmark.java
index 962e395..104103a 100644
--- a/benchmarks/src/benchmarks/regression/StringLengthBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/StringLengthBenchmark.java
@@ -16,10 +16,7 @@
 
 package benchmarks.regression;
 
-import com.google.caliper.Runner;
-import com.google.caliper.SimpleBenchmark;
-
-public class StringLengthBenchmark extends SimpleBenchmark {
+public class StringLengthBenchmark {
     public void timeLength(int reps) {
         int length = 0;
         for (int i = 0; i < reps; ++i) {
diff --git a/benchmarks/src/benchmarks/regression/StringSplitBenchmark.java b/benchmarks/src/benchmarks/regression/StringSplitBenchmark.java
index 37fdf8f..7c747cf 100644
--- a/benchmarks/src/benchmarks/regression/StringSplitBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/StringSplitBenchmark.java
@@ -16,10 +16,9 @@
 
 package benchmarks.regression;
 
-import com.google.caliper.SimpleBenchmark;
 import java.util.regex.Pattern;
 
-public class StringSplitBenchmark extends SimpleBenchmark {
+public class StringSplitBenchmark {
     public void timeStringSplitComma(int reps) {
         for (int i = 0; i < reps; ++i) {
             "this,is,a,simple,example".split(",");
diff --git a/benchmarks/src/benchmarks/regression/StringToRealBenchmark.java b/benchmarks/src/benchmarks/regression/StringToRealBenchmark.java
index ef7a633..5d04d7b 100644
--- a/benchmarks/src/benchmarks/regression/StringToRealBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/StringToRealBenchmark.java
@@ -17,10 +17,8 @@
 package benchmarks.regression;
 
 import com.google.caliper.Param;
-import com.google.caliper.Runner;
-import com.google.caliper.SimpleBenchmark;
 
-public class StringToRealBenchmark extends SimpleBenchmark {
+public class StringToRealBenchmark {
 
     @Param({
         "NaN",
diff --git a/benchmarks/src/benchmarks/regression/ThreadLocalBenchmark.java b/benchmarks/src/benchmarks/regression/ThreadLocalBenchmark.java
index df0715b..59f7fc6 100644
--- a/benchmarks/src/benchmarks/regression/ThreadLocalBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/ThreadLocalBenchmark.java
@@ -16,11 +16,7 @@
 
 package benchmarks.regression;
 
-import com.google.caliper.Param;
-import com.google.caliper.Runner;
-import com.google.caliper.SimpleBenchmark;
-
-public class ThreadLocalBenchmark extends SimpleBenchmark {
+public class ThreadLocalBenchmark {
     private static final ThreadLocal<char[]> BUFFER = new ThreadLocal<char[]>() {
         @Override protected char[] initialValue() {
             return new char[20];
diff --git a/benchmarks/src/benchmarks/regression/TimeZoneBenchmark.java b/benchmarks/src/benchmarks/regression/TimeZoneBenchmark.java
index ccef392..191e00d 100644
--- a/benchmarks/src/benchmarks/regression/TimeZoneBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/TimeZoneBenchmark.java
@@ -16,10 +16,9 @@
 
 package benchmarks.regression;
 
-import com.google.caliper.SimpleBenchmark;
 import java.util.TimeZone;
 
-public class TimeZoneBenchmark extends SimpleBenchmark {
+public class TimeZoneBenchmark {
     public void timeTimeZone_getDefault(int reps) throws Exception {
         for (int rep = 0; rep < reps; ++rep) {
             TimeZone.getDefault();
diff --git a/benchmarks/src/benchmarks/regression/URLConnectionBenchmark.java b/benchmarks/src/benchmarks/regression/URLConnectionBenchmark.java
index a4817b5..bd7c047 100644
--- a/benchmarks/src/benchmarks/regression/URLConnectionBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/URLConnectionBenchmark.java
@@ -17,7 +17,6 @@
 package benchmarks.regression;
 
 import com.google.caliper.Param;
-import com.google.caliper.SimpleBenchmark;
 import com.google.mockwebserver.Dispatcher;
 import com.google.mockwebserver.MockResponse;
 import com.google.mockwebserver.MockWebServer;
@@ -26,9 +25,8 @@
 import java.io.InputStream;
 import java.net.HttpURLConnection;
 import java.net.URL;
-import java.net.URLConnection;
 
-public final class URLConnectionBenchmark extends SimpleBenchmark {
+public final class URLConnectionBenchmark {
 
     @Param({"0", "1024", "1048576"}) private int bodySize;
     @Param({"2048"}) private int chunkSize;
diff --git a/benchmarks/src/benchmarks/regression/XmlEntitiesBenchmark.java b/benchmarks/src/benchmarks/regression/XmlEntitiesBenchmark.java
index 4c5cc18..7c50975 100644
--- a/benchmarks/src/benchmarks/regression/XmlEntitiesBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/XmlEntitiesBenchmark.java
@@ -16,8 +16,8 @@
 
 package benchmarks.regression;
 
+import com.google.caliper.BeforeExperiment;
 import com.google.caliper.Param;
-import com.google.caliper.SimpleBenchmark;
 import java.io.StringReader;
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
@@ -26,7 +26,7 @@
 import org.xmlpull.v1.XmlPullParserFactory;
 
 // http://code.google.com/p/android/issues/detail?id=18102
-public final class XmlEntitiesBenchmark extends SimpleBenchmark {
+public final class XmlEntitiesBenchmark {
   
   @Param({"10", "100", "1000"}) int length;
   @Param({"0", "0.5", "1.0"}) float entityFraction;
@@ -37,7 +37,8 @@
   /** a string like {@code <doc>&amp;&amp;++</doc>}. */
   private String xml;
 
-  @Override protected void setUp() throws Exception {
+  @BeforeExperiment
+  protected void setUp() throws Exception {
     xmlPullParserFactory = XmlPullParserFactory.newInstance();
     documentBuilderFactory = DocumentBuilderFactory.newInstance();