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;
+ }
+ }
+
}