Skip to content

Commit 359ef12

Browse files
committed
Merge pull request #129 from msgpack/add_unpacker_buffer_reset_benchmark
Add a benchmark of MessageBufferInput#reset
2 parents 9f23d28 + 6d9937a commit 359ef12

File tree

2 files changed

+46
-5
lines changed

2 files changed

+46
-5
lines changed

msgpack-core/src/main/java/org/msgpack/core/buffer/ArrayBufferInput.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,17 @@ public ArrayBufferInput(byte[] arr, int offset, int length) {
2020
this.buffer = MessageBuffer.wrap(checkNotNull(arr, "input array is null")).slice(offset, length);
2121
}
2222

23-
public void reset(byte[] arr) {
24-
this.buffer = MessageBuffer.wrap(checkNotNull(arr, "input array is null"));
23+
public void reset(MessageBuffer buf) {
24+
this.buffer = buf;
2525
this.isRead = false;
2626
}
2727

28+
public void reset(byte[] arr) {
29+
reset(MessageBuffer.wrap(checkNotNull(arr, "input array is null")));
30+
}
31+
2832
public void reset(byte[] arr, int offset, int len) {
29-
this.buffer = MessageBuffer.wrap(checkNotNull(arr, "input array is null")).slice(offset, len);
30-
this.isRead = false;
33+
reset(MessageBuffer.wrap(checkNotNull(arr, "input array is null")).slice(offset, len));
3134
}
3235

3336
@Override

msgpack-core/src/test/scala/org/msgpack/core/MessageUnpackerTest.scala

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import java.io.{EOFException, ByteArrayInputStream, ByteArrayOutputStream}
44
import scala.util.Random
55
import org.msgpack.core.buffer.{MessageBuffer, MessageBufferInput, OutputStreamBufferOutput, ArrayBufferInput}
66
import org.msgpack.value.ValueType
7+
import xerial.core.io.IOUtil
78

89
/**
910
* Created on 2014/05/07.
@@ -529,6 +530,43 @@ class MessageUnpackerTest extends MessagePackSpec {
529530

530531
}
531532

532-
}
533+
// TODO: change tag 'ignore' to 'in'
534+
"improve the performance via reset method" taggedAs("reset-arr") in {
535+
536+
val out = new ByteArrayOutputStream
537+
val packer = MessagePackFactory.newDefaultPacker(out)
538+
packer.packInt(0)
539+
packer.flush
540+
val arr = out.toByteArray
541+
val mb = MessageBuffer.wrap(arr)
542+
543+
val N = 1000
544+
val t = time("unpacker", repeat = 10) {
545+
block("no-buffer-reset") {
546+
IOUtil.withResource(MessagePackFactory.newDefaultUnpacker(arr)) { unpacker =>
547+
for (i <- 0 until N) {
548+
val buf = new ArrayBufferInput(arr)
549+
unpacker.reset(buf)
550+
unpacker.unpackInt
551+
unpacker.close
552+
}
553+
}
554+
}
533555

556+
block("buffer-reset") {
557+
IOUtil.withResource(MessagePackFactory.newDefaultUnpacker(arr)) { unpacker =>
558+
val buf = new ArrayBufferInput(arr)
559+
for (i <- 0 until N) {
560+
buf.reset(mb)
561+
unpacker.reset(buf)
562+
unpacker.unpackInt
563+
unpacker.close
564+
}
565+
}
566+
}
567+
}
568+
569+
t("buffer-reset").averageWithoutMinMax should be <= t("no-buffer-reset").averageWithoutMinMax
570+
}
571+
}
534572
}

0 commit comments

Comments
 (0)