You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by mi...@apache.org on 2017/05/22 11:32:12 UTC

[6/6] logging-log4j2 git commit: Test encoding

Test encoding


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

Branch: refs/heads/gelf-layout-efficiency
Commit: f99ef52500ee79d81670494b05c0ad8be5eda475
Parents: 8167fff
Author: Mikael Ståldal <mi...@magine.com>
Authored: Wed May 18 16:43:16 2016 +0200
Committer: Mikael Ståldal <mi...@magine.com>
Committed: Wed May 18 16:43:16 2016 +0200

----------------------------------------------------------------------
 ...ractStringLayoutStringEncodingBenchmark.java | 97 +++++++++++++++++++-
 1 file changed, 96 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/f99ef525/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/AbstractStringLayoutStringEncodingBenchmark.java
----------------------------------------------------------------------
diff --git a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/AbstractStringLayoutStringEncodingBenchmark.java b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/AbstractStringLayoutStringEncodingBenchmark.java
index 96ffebb..8a49861 100644
--- a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/AbstractStringLayoutStringEncodingBenchmark.java
+++ b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/AbstractStringLayoutStringEncodingBenchmark.java
@@ -17,6 +17,7 @@
 
 package org.apache.logging.log4j.perf.jmh;
 
+import java.nio.ByteBuffer;
 import java.nio.charset.Charset;
 import java.util.Map;
 import java.util.concurrent.TimeUnit;
@@ -27,8 +28,11 @@ import org.apache.logging.log4j.core.Layout;
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.impl.Log4jLogEvent;
 import org.apache.logging.log4j.core.layout.AbstractStringLayout;
+import org.apache.logging.log4j.core.layout.ByteBufferDestination;
+import org.apache.logging.log4j.core.layout.Encoder;
 import org.apache.logging.log4j.message.Message;
 import org.apache.logging.log4j.message.SimpleMessage;
+import org.apache.logging.log4j.util.StringBuilderFormattable;
 import org.openjdk.jmh.annotations.Benchmark;
 import org.openjdk.jmh.annotations.BenchmarkMode;
 import org.openjdk.jmh.annotations.Mode;
@@ -59,8 +63,15 @@ public class AbstractStringLayoutStringEncodingBenchmark {
     private Layout utf8CseqLayout;
     private Layout utf16CseqLayout;
 
+    private Layout usAsciiEncodingLayout;
+    private Layout iso8859_1EncodingLayout;
+    private Layout utf8EncodingLayout;
+    private Layout utf16EncodingLayout;
+
     private LogEvent logEvent;
 
+    private Destination destination;
+
     @Setup
     public void setUp() {
         bytes = new byte[128];
@@ -78,10 +89,17 @@ public class AbstractStringLayoutStringEncodingBenchmark {
         utf8CseqLayout = new CseqLayout(Charset.forName("UTF-8"));
         utf16CseqLayout = new CseqLayout(Charset.forName("UTF-16"));
 
+        usAsciiEncodingLayout = new EncodingLayout(Charset.forName("US-ASCII"));
+        iso8859_1EncodingLayout = new EncodingLayout(Charset.forName("ISO-8859-1"));
+        utf8EncodingLayout = new EncodingLayout(Charset.forName("UTF-8"));
+        utf16EncodingLayout = new EncodingLayout(Charset.forName("UTF-16"));
+
         StringBuilder msg = new StringBuilder();
         msg.append(MESSAGE);
 
         logEvent = createLogEvent(new SimpleMessage(msg));
+
+        destination = new Destination();
     }
 
     private static LogEvent createLogEvent(Message message) {
@@ -134,6 +152,13 @@ public class AbstractStringLayoutStringEncodingBenchmark {
     @BenchmarkMode(Mode.Throughput)
     @OutputTimeUnit(TimeUnit.MILLISECONDS)
     @Benchmark
+    public void usAsciiEncoding() {
+        usAsciiEncodingLayout.encode(logEvent, destination);
+    }
+
+    @BenchmarkMode(Mode.Throughput)
+    @OutputTimeUnit(TimeUnit.MILLISECONDS)
+    @Benchmark
     public void iso8859_1String() {
         consume(iso8859_1StringLayout.toByteArray(logEvent));
     }
@@ -148,6 +173,13 @@ public class AbstractStringLayoutStringEncodingBenchmark {
     @BenchmarkMode(Mode.Throughput)
     @OutputTimeUnit(TimeUnit.MILLISECONDS)
     @Benchmark
+    public void iso8859_1Encoding() {
+        iso8859_1EncodingLayout.encode(logEvent, destination);
+    }
+
+    @BenchmarkMode(Mode.Throughput)
+    @OutputTimeUnit(TimeUnit.MILLISECONDS)
+    @Benchmark
     public void utf8String() {
         consume(utf8StringLayout.toByteArray(logEvent));
     }
@@ -162,6 +194,13 @@ public class AbstractStringLayoutStringEncodingBenchmark {
     @BenchmarkMode(Mode.Throughput)
     @OutputTimeUnit(TimeUnit.MILLISECONDS)
     @Benchmark
+    public void utf8Encoding() {
+        utf8EncodingLayout.encode(logEvent, destination);
+    }
+
+    @BenchmarkMode(Mode.Throughput)
+    @OutputTimeUnit(TimeUnit.MILLISECONDS)
+    @Benchmark
     public void utf16String() {
         consume(utf16StringLayout.toByteArray(logEvent));
     }
@@ -173,12 +212,27 @@ public class AbstractStringLayoutStringEncodingBenchmark {
         consume(utf16CseqLayout.toByteArray(logEvent));
     }
 
-    private long consume(byte[] bytes) {
+    @BenchmarkMode(Mode.Throughput)
+    @OutputTimeUnit(TimeUnit.MILLISECONDS)
+    @Benchmark
+    public void utf16Encoding() {
+        utf16EncodingLayout.encode(logEvent, destination);
+    }
+
+    private static long consume(byte[] bytes) {
         long checksum = 0;
         for (byte b : bytes) checksum += b;
         return checksum;
     }
 
+    private static long consume(byte[] bytes, int offset, int length) {
+        long checksum = 0;
+        for (int i = offset; i < length; i++) {
+            checksum += bytes[i];
+        }
+        return checksum;
+    }
+
     private static class StringLayout extends AbstractStringLayout {
         public StringLayout(Charset charset) {
             super(charset);
@@ -223,4 +277,45 @@ public class AbstractStringLayoutStringEncodingBenchmark {
         }
     }
 
+    private static class EncodingLayout extends AbstractStringLayout {
+        public EncodingLayout(Charset charset) {
+            super(charset);
+        }
+
+        @Override
+        public String toSerializable(LogEvent event) {
+            return null;
+        }
+
+        @Override
+        public byte[] toByteArray(LogEvent event) {
+            return null;
+        }
+
+        @Override
+        public void encode(final LogEvent event, final ByteBufferDestination destination) {
+            StringBuilder sb = getStringBuilder();
+            ((StringBuilderFormattable) event.getMessage()).formatTo(sb);
+            final Encoder<StringBuilder> helper = getStringBuilderEncoder();
+            helper.encode(sb, destination);
+        }
+    }
+
+    private static class Destination implements ByteBufferDestination {
+        ByteBuffer buffer = ByteBuffer.wrap(new byte[512]);
+
+        @Override
+        public ByteBuffer getByteBuffer() {
+            return buffer;
+        }
+
+        @Override
+        public ByteBuffer drain(ByteBuffer buf) {
+            buf.flip();
+            consume(buf.array(), buf.position(), buf.limit());
+            buf.clear();
+            return buf;
+        }
+    }
+
 }