Add benchmarks for obtaining stack trace class array.

Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/415108f6
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/415108f6
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/415108f6

Branch: refs/heads/master
Commit: 415108f6aac8213e1ab61025d03229b74ba18fd5
Parents: 85f01ff
Author: Matt Sicker <[email protected]>
Authored: Sat Oct 4 10:15:49 2014 -0500
Committer: Matt Sicker <[email protected]>
Committed: Sat Oct 4 10:15:49 2014 -0500

----------------------------------------------------------------------
 .../log4j/perf/jmh/ReflectionBenchmark.java     | 32 +++++++++++++++++---
 1 file changed, 28 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/415108f6/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/ReflectionBenchmark.java
----------------------------------------------------------------------
diff --git 
a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/ReflectionBenchmark.java
 
b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/ReflectionBenchmark.java
index 87e83f1..08f6a3d 100644
--- 
a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/ReflectionBenchmark.java
+++ 
b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/ReflectionBenchmark.java
@@ -22,27 +22,26 @@ import java.util.Random;
 
 import org.apache.logging.log4j.message.Message;
 import org.apache.logging.log4j.message.StringFormattedMessage;
-import org.openjdk.jmh.annotations.Benchmark;
 import org.apache.logging.log4j.util.ReflectionUtil;
+import org.openjdk.jmh.annotations.Benchmark;
 import org.openjdk.jmh.annotations.Level;
 import org.openjdk.jmh.annotations.Scope;
 import org.openjdk.jmh.annotations.Setup;
 import org.openjdk.jmh.annotations.State;
-
 import sun.reflect.Reflection;
 
 /**
  * <p>
  * Benchmarks the different ways the caller class can be obtained. To run this 
in sampling mode (latency test):
  * </p>
- * 
+ *
  * <pre>
  *     java -jar benchmarks.jar ".*ReflectionBenchmark.*" -i 5 -f 1 -wi 5 -bm 
sample -tu ns
  * </pre>
  * <p>
  * To run this in throughput testing mode:
  * </p>
- * 
+ *
  * <pre>
  *     java -jar benchmarks.jar ".*ReflectionBenchmark.*" -i 5 -f 1 -wi 5 -bm 
Throughput -tu ms
  * </pre>
@@ -62,6 +61,14 @@ public class ReflectionBenchmark {
         }
     }
 
+    @State(Scope.Benchmark)
+    public static class ClassContextManager extends SecurityManager {
+        @Override
+        protected Class[] getClassContext() {
+            return super.getClassContext();
+        }
+    }
+
     @Benchmark
     public void baseline() {
     }
@@ -118,4 +125,21 @@ public class ReflectionBenchmark {
                 Object[].class);
         return constructor.newInstance("Hello %i", new Object[] { rng.random 
});
     }
+
+    @Benchmark
+    public Class<?>[] test11_getClassContextViaCallerClass() {
+        // let's not benchmark LinkedList or anything here
+        final Class<?>[] classes = new Class<?>[100];
+        Class<?> clazz;
+        for (int i = 0; null != (clazz = ReflectionUtil.getCallerClass(i)); 
i++) {
+            classes[i] = clazz;
+        }
+        return classes;
+    }
+
+    @Benchmark
+    public Class<?>[] test12_getClassContextViaSecurityManager(final 
ClassContextManager classContextManager) {
+        return classContextManager.getClassContext();
+    }
+
 }

Reply via email to