Bläddra i källkod

refactoring: BencharkRunner

Ranides Atterwim 11 år sedan
förälder
incheckning
d180367e5c

+ 1 - 1
pom.xml

@@ -5,7 +5,7 @@
 
     <groupId>net.ranides</groupId>
     <artifactId>assira</artifactId>
-    <version>0.72.0</version>
+    <version>0.72.1</version>
     <packaging>jar</packaging>
 
     <name>assira</name>

+ 12 - 57
src/test/java/net/ranides/assira/BenchmarkFormatter.java

@@ -8,93 +8,48 @@ package net.ranides.assira;
 
 import com.google.caliper.SimpleBenchmark;
 import java.io.PrintStream;
-import java.lang.reflect.Field;
 import java.util.ArrayList;
-import java.util.Collections;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.TreeMap;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+import net.ranides.assira.BenchmarkRunner.ParamsField;
 import net.ranides.assira.collection.Grid;
-import net.ranides.assira.reflection.ReflectUtils;
 import net.ranides.assira.text.Strings;
 
 /**
  *
  * @author Ranides Atterwim <ranides@gmail.com>
  */
-public final class BenchmarkFormatter {
+public final class BenchmarkReport {
     
     private final Map<String, Grid<?>> params = new HashMap<>();
     
-    
-    public static List<Integer> getParams(Class<?> clazz) {
-        ParamsField params = getParamsField(clazz);
-        if(null == params) {
-            return Collections.emptyList();
-        }
-        return params.value.column("param", Integer.class);
+    public static void print(PrintStream out, Class<?> clazz, String data) {
+        print(out, Arrays.<Class<?>>asList(clazz), data);
     }
     
-    private static ParamsField getParamsField(Class<?> clazz) {
-        for(Field field : clazz.getDeclaredFields()) {
-            ReflectUtils.access(field);
-            BenchmarkRunner.ParamGrid info = field.getAnnotation(BenchmarkRunner.ParamGrid.class);
-            if( null != info) {
-                try {
-                    return new ParamsField(info.value(), (Grid<?>)field.get(null));
-                } catch(ReflectiveOperationException cause) {
-                    throw new IllegalArgumentException(cause);
-                }
-            }
-        }
-        return null;
-    }
-    
-    private static class ParamsField {
-        public final String[] keys;
-        public final Grid<?> value;
-
-        public ParamsField(String[] keys, Grid<?> value) {
-            this.keys = keys;
-            this.value = value;
-        }
-    }
-    
-    public static void report(List<Class<?>> list, String data) {
-        BenchmarkFormatter formatter = new BenchmarkFormatter();
+    public static void print(PrintStream out, List<Class<?>> list, String data) {
+        BenchmarkReport formatter = new BenchmarkReport();
         for(Class<?> clazz : list ) {
-            if( SimpleBenchmark.class.isAssignableFrom(clazz) ) {
-                formatter.putParams(clazz);
-            }
-        }
-        formatter.print(data);
-    }
-    
-    public static void report(Class<?> clazz, String data) {
-        BenchmarkFormatter formatter = new BenchmarkFormatter();
-        if( SimpleBenchmark.class.isAssignableFrom(clazz) ) {
             formatter.putParams(clazz);
         }
-        formatter.print(data);
+        formatter.format(System.out, data);
     }
     
     private void putParams(Class<?> clazz) {
-        ParamsField field = getParamsField(clazz);
-        if(null == field) {
+        ParamsField field = new ParamsField(clazz);
+        if(!field.exists()) {
             return;
         }
-        for(String key : field.keys) {
-            params.put(key, field.value);
+        for(String key : field.keys()) {
+            params.put(key, field.value());
         }
     }
     
-    private void print(String input) {
-        format(System.out, input);
-    }
-    
     private void format(PrintStream out, String input) {
         Pattern RE_BENCHMARK = Pattern.compile("\\{vm=(.+?), trial=(.+?), benchmark=(.+?)(?:, param=(.+?))?\\} ([0-9,]+) ns; \\?=([0-9,]+) ns @ ([0-9]+) trials");
         

+ 60 - 3
src/test/java/net/ranides/assira/BenchmarkRunner.java

@@ -11,14 +11,18 @@ import java.io.IOException;
 import java.io.OutputStream;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
+import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
+import net.ranides.assira.collection.Grid;
 import net.ranides.assira.io.MultiOutputStream;
 import net.ranides.assira.reflection.ClassInspector;
 import net.ranides.assira.reflection.Invoker;
 import net.ranides.assira.reflection.MemberUtils;
 import net.ranides.assira.reflection.PackageScanner;
+import net.ranides.assira.reflection.ReflectUtils;
 import net.ranides.assira.trace.StackInspector;
 
 /**
@@ -38,7 +42,7 @@ public final class BenchmarkRunner {
         for(Class<?> clazz : found) {
             invoke(clazz);
         }
-        BenchmarkFormatter.report(found, collector.toString());
+        BenchmarkReport.print(System.out, found, collector.toString());
     }
     
     public static void run() {
@@ -50,7 +54,15 @@ public final class BenchmarkRunner {
     public static void run(Class<?> clazz) {
         OutputStream collector = MultiOutputStream.tee();
         invoke(clazz);
-        BenchmarkFormatter.report(clazz, collector.toString());
+        BenchmarkReport.print(System.out, clazz, collector.toString());
+    }
+    
+    public static List<Integer> getParams(Class<?> clazz) {
+        ParamsField params = new ParamsField(clazz);
+        if(params.exists()) {
+            return params.value.column("param", Integer.class);
+        }
+        return Collections.emptyList();
     }
     
     private static void invoke(Class<?> clazz) {
@@ -69,7 +81,7 @@ public final class BenchmarkRunner {
             clazz.getName()
         };
         
-        List<Integer> params = BenchmarkFormatter.getParams(clazz);
+        List<Integer> params = getParams(clazz);
         if( params.isEmpty() ) {
             new com.google.caliper.Runner().run(args);
             return;
@@ -138,5 +150,50 @@ public final class BenchmarkRunner {
         String[] value();
                 
     }
+    
+    static class ParamsField {
+        
+        private final String[] keys;
+        private final Grid<?> value;
+
+        public ParamsField(String[] keys, Grid<?> value) {
+            this.keys = keys;
+            this.value = value;
+        }
+        
+        public ParamsField(Class<?> clazz) {
+            String[] ikeys = null;
+            Grid<?> ivalue = null;
+        
+            for(Field field : clazz.getDeclaredFields()) {
+                ReflectUtils.access(field);
+                BenchmarkRunner.ParamGrid info = field.getAnnotation(BenchmarkRunner.ParamGrid.class);
+                if( null != info) {
+                    try {
+                        ikeys = info.value();
+                        ivalue = (Grid<?>)field.get(null);
+                        break;
+                    } catch(ReflectiveOperationException cause) {
+                        throw new IllegalArgumentException(cause);
+                    }
+                }
+            }
+            this.keys = ikeys;
+            this.value = ivalue;
+        }
+        
+        public boolean exists() {
+            return keys != null && value!=null;
+        }
+
+        public String[] keys() {
+            return keys;
+        }
+
+        public Grid<?> value() {
+            return value;
+        }
+        
+    }
 }