aboutsummaryrefslogtreecommitdiffhomepage
path: root/benchmarks/java/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'benchmarks/java/src/main')
-rwxr-xr-xbenchmarks/java/src/main/java/com/google/protobuf/ProtoBench.java180
-rwxr-xr-xbenchmarks/java/src/main/java/com/google/protobuf/ProtoBenchCaliper.java197
-rwxr-xr-xbenchmarks/java/src/main/java/com/google/protobuf/ProtoCaliperBenchmark.java214
3 files changed, 214 insertions, 377 deletions
diff --git a/benchmarks/java/src/main/java/com/google/protobuf/ProtoBench.java b/benchmarks/java/src/main/java/com/google/protobuf/ProtoBench.java
deleted file mode 100755
index f8d3b797..00000000
--- a/benchmarks/java/src/main/java/com/google/protobuf/ProtoBench.java
+++ /dev/null
@@ -1,180 +0,0 @@
-// Protocol Buffers - Google's data interchange format
-// Copyright 2009 Google Inc. All rights reserved.
-// https://developers.google.com/protocol-buffers/
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-
-package com.google.protobuf;
-
-import com.google.caliper.BeforeExperiment;
-import com.google.caliper.Benchmark;
-import com.google.caliper.Param;
-import com.google.caliper.runner.CaliperMain;
-import com.google.protobuf.ByteString;
-import com.google.protobuf.CodedInputStream;
-import com.google.protobuf.CodedOutputStream;
-import com.google.protobuf.ExtensionRegistry;
-import com.google.protobuf.Message;
-import com.google.protobuf.benchmarks.Benchmarks.BenchmarkDataset;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.EOFException;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.io.RandomAccessFile;
-import java.nio.file.Files;
-import java.nio.file.Paths;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Scanner;
-
-
-public class ProtoBench {
-
- private ProtoBench() {
- // Prevent instantiation
- }
-
- public static void main(String[] args) {
- if (args.length < 1) {
- System.err.println("Usage: ./java-benchmark <input data>");
- System.err.println("input data is in the format of \"benchmarks.proto\"");
- System.exit(1);
- }
- boolean success = true;
- for (int i = 0; i < args.length; i++) {
- success &= runTest(args[i]);
- }
- System.exit(success ? 0 : 1);
- }
-
-
- /**
- * Runs a single test with specific test data. Error messages are displayed to stderr,
- * and the return value indicates general success/failure.
- */
- public static boolean runTest(String file) {
- byte[] inputData;
- BenchmarkDataset benchmarkDataset;
- try {
- inputData = readAllBytes(file);
- benchmarkDataset = BenchmarkDataset.parseFrom(inputData);
- } catch (IOException e) {
- System.err.println("Unable to get input data");
- return false;
- }
- List<String> argsList = getCaliperOption(benchmarkDataset);
- if (argsList == null) {
- System.err.println("Unable to get default message " + benchmarkDataset.getMessageName());
- return false;
- }
- argsList.add("-DdataFile=" + file);
- argsList.add("com.google.protobuf.ProtoBenchCaliper");
-
- try {
- String args[] = new String[argsList.size()];
- argsList.toArray(args);
- CaliperMain.exitlessMain(args,
- new PrintWriter(System.out, true), new PrintWriter(System.err, true));
- } catch (Exception e) {
- System.err.println("Error: " + e.getMessage());
- System.err.println("Detailed exception information:");
- e.printStackTrace(System.err);
- return false;
- }
- try {
- double mininumScale = 0;
- // If the file not exist, this will throw IOException, which won't print the warning
- // information below.
- Scanner scanner = new Scanner(new String(readAllBytes("JavaBenchmarkWarning.txt")));
- while (scanner.hasNext()) {
- mininumScale = Math.max(mininumScale, scanner.nextDouble());
- }
- scanner.close();
-
- System.out.println(
- "WARNING: This benchmark's whole iterations are not enough, consider to config caliper to "
- + "run for more time to make the result more convincing. You may change the configure "
- + "code in com.google.protobuf.ProtoBench.getCaliperOption() of benchmark "
- + benchmarkDataset.getMessageName()
- + " to run for more time. e.g. Change the value of "
- + "instrument.runtime.options.timingInterval or value of "
- + "instrument.runtime.options.measurements to be at least "
- + Math.round(mininumScale * 10 + 1) / 10.0
- + " times of before, then build and run the benchmark again\n");
- Files.deleteIfExists(Paths.get("JavaBenchmarkWarning.txt"));
- } catch (IOException e) {
- // The IOException here should be file not found, which means there's no warning generated by
- // The benchmark, so this IOException should be discarded.
- }
- return true;
- }
-
-
- private static List<String> getCaliperOption(final BenchmarkDataset benchmarkDataset) {
- List<String> temp = new ArrayList<String>();
- if (benchmarkDataset.getMessageName().equals("benchmarks.proto3.GoogleMessage1")) {
- temp.add("-DbenchmarkMessageType=GOOGLE_MESSAGE1_PROTO3");
- } else if (benchmarkDataset.getMessageName().equals("benchmarks.proto2.GoogleMessage1")) {
- temp.add("-DbenchmarkMessageType=GOOGLE_MESSAGE1_PROTO2");
- } else if (benchmarkDataset.getMessageName().equals("benchmarks.proto2.GoogleMessage2")) {
- temp.add("-DbenchmarkMessageType=GOOGLE_MESSAGE2");
- } else if (benchmarkDataset.getMessageName().
- equals("benchmarks.google_message3.GoogleMessage3")) {
- temp.add("-DbenchmarkMessageType=GOOGLE_MESSAGE3");
- temp.add("-Cinstrument.runtime.options.timingInterval=3000ms");
- temp.add("-Cinstrument.runtime.options.measurements=20");
- } else if (benchmarkDataset.getMessageName().
- equals("benchmarks.google_message4.GoogleMessage4")) {
- temp.add("-DbenchmarkMessageType=GOOGLE_MESSAGE4");
- temp.add("-Cinstrument.runtime.options.timingInterval=1500ms");
- temp.add("-Cinstrument.runtime.options.measurements=20");
- } else {
- return null;
- }
-
- temp.add("-i");
- temp.add("runtime");
- temp.add("-b");
- String benchmarkNames = "serializeToByteString,serializeToByteArray,serializeToMemoryStream"
- + ",deserializeFromByteString,deserializeFromByteArray,deserializeFromMemoryStream";
- temp.add(benchmarkNames);
-
- return temp;
- }
-
- public static byte[] readAllBytes(String filename) throws IOException {
- RandomAccessFile file = new RandomAccessFile(new File(filename), "r");
- byte[] content = new byte[(int) file.length()];
- file.readFully(content);
- return content;
- }
-}
diff --git a/benchmarks/java/src/main/java/com/google/protobuf/ProtoBenchCaliper.java b/benchmarks/java/src/main/java/com/google/protobuf/ProtoBenchCaliper.java
deleted file mode 100755
index a7027586..00000000
--- a/benchmarks/java/src/main/java/com/google/protobuf/ProtoBenchCaliper.java
+++ /dev/null
@@ -1,197 +0,0 @@
-
-package com.google.protobuf;
-
-import com.google.caliper.BeforeExperiment;
-import com.google.caliper.AfterExperiment;
-import com.google.caliper.Benchmark;
-import com.google.caliper.Param;
-import com.google.protobuf.ByteString;
-import com.google.protobuf.CodedOutputStream;
-import com.google.protobuf.ExtensionRegistry;
-import com.google.protobuf.Message;
-import com.google.protobuf.benchmarks.Benchmarks.BenchmarkDataset;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.BufferedWriter;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-public class ProtoBenchCaliper {
- public enum BenchmarkMessageType {
- GOOGLE_MESSAGE1_PROTO3 {
- @Override ExtensionRegistry getExtensionRegistry() { return ExtensionRegistry.newInstance(); }
- @Override
- Message getDefaultInstance() {
- return com.google.protobuf.benchmarks.BenchmarkMessage1Proto3.GoogleMessage1
- .getDefaultInstance();
- }
- },
- GOOGLE_MESSAGE1_PROTO2 {
- @Override ExtensionRegistry getExtensionRegistry() { return ExtensionRegistry.newInstance(); }
- @Override
- Message getDefaultInstance() {
- return com.google.protobuf.benchmarks.BenchmarkMessage1Proto2.GoogleMessage1
- .getDefaultInstance();
- }
- },
- GOOGLE_MESSAGE2 {
- @Override ExtensionRegistry getExtensionRegistry() { return ExtensionRegistry.newInstance(); }
- @Override
- Message getDefaultInstance() {
- return com.google.protobuf.benchmarks.BenchmarkMessage2.GoogleMessage2.getDefaultInstance();
- }
- },
- GOOGLE_MESSAGE3 {
- @Override
- ExtensionRegistry getExtensionRegistry() {
- ExtensionRegistry extensions = ExtensionRegistry.newInstance();
- benchmarks.google_message3.BenchmarkMessage38.registerAllExtensions(extensions);
- benchmarks.google_message3.BenchmarkMessage37.registerAllExtensions(extensions);
- benchmarks.google_message3.BenchmarkMessage36.registerAllExtensions(extensions);
- benchmarks.google_message3.BenchmarkMessage35.registerAllExtensions(extensions);
- benchmarks.google_message3.BenchmarkMessage34.registerAllExtensions(extensions);
- benchmarks.google_message3.BenchmarkMessage33.registerAllExtensions(extensions);
- benchmarks.google_message3.BenchmarkMessage32.registerAllExtensions(extensions);
- benchmarks.google_message3.BenchmarkMessage31.registerAllExtensions(extensions);
- benchmarks.google_message3.BenchmarkMessage3.registerAllExtensions(extensions);
- return extensions;
- }
- @Override
- Message getDefaultInstance() {
- return benchmarks.google_message3.BenchmarkMessage3.GoogleMessage3.getDefaultInstance();
- }
- },
- GOOGLE_MESSAGE4 {
- @Override
- ExtensionRegistry getExtensionRegistry() {
- ExtensionRegistry extensions = ExtensionRegistry.newInstance();
- benchmarks.google_message4.BenchmarkMessage43.registerAllExtensions(extensions);
- benchmarks.google_message4.BenchmarkMessage42.registerAllExtensions(extensions);
- benchmarks.google_message4.BenchmarkMessage41.registerAllExtensions(extensions);
- benchmarks.google_message4.BenchmarkMessage4.registerAllExtensions(extensions);
- return extensions;
- }
- @Override
- Message getDefaultInstance() {
- return benchmarks.google_message4.BenchmarkMessage4.GoogleMessage4.getDefaultInstance();
- }
- };
-
- abstract ExtensionRegistry getExtensionRegistry();
- abstract Message getDefaultInstance();
- }
-
- @Param
- private BenchmarkMessageType benchmarkMessageType;
- @Param
- private String dataFile;
-
- private byte[] inputData;
- private BenchmarkDataset benchmarkDataset;
- private Message defaultMessage;
- private ExtensionRegistry extensions;
- private List<byte[]> inputDataList;
- private List<ByteArrayInputStream> inputStreamList;
- private List<ByteString> inputStringList;
- private List<Message> sampleMessageList;
- private long counter;
-
- @BeforeExperiment
- void setUp() throws IOException {
- inputData = ProtoBench.readAllBytes(dataFile);
- benchmarkDataset = BenchmarkDataset.parseFrom(inputData);
- defaultMessage = benchmarkMessageType.getDefaultInstance();
- extensions = benchmarkMessageType.getExtensionRegistry();
- inputDataList = new ArrayList<byte[]>();
- inputStreamList = new ArrayList<ByteArrayInputStream>();
- inputStringList = new ArrayList<ByteString>();
- sampleMessageList = new ArrayList<Message>();
-
- for (int i = 0; i < benchmarkDataset.getPayloadCount(); i++) {
- byte[] singleInputData = benchmarkDataset.getPayload(i).toByteArray();
- inputDataList.add(benchmarkDataset.getPayload(i).toByteArray());
- inputStreamList.add(new ByteArrayInputStream(
- benchmarkDataset.getPayload(i).toByteArray()));
- inputStringList.add(benchmarkDataset.getPayload(i));
- sampleMessageList.add(
- defaultMessage.newBuilderForType().mergeFrom(singleInputData, extensions).build());
- }
-
- counter = 0;
- }
-
-
- @Benchmark
- void serializeToByteString(int reps) throws IOException {
- for (int i = 0; i < reps; i++) {
- sampleMessageList.get((int) (counter % sampleMessageList.size())).toByteString();
- counter++;
- }
- }
-
- @Benchmark
- void serializeToByteArray(int reps) throws IOException {
- for (int i = 0; i < reps; i++) {
- sampleMessageList.get((int) (counter % sampleMessageList.size())).toByteArray();
- counter++;
- }
- }
-
- @Benchmark
- void serializeToMemoryStream(int reps) throws IOException {
- for (int i = 0; i < reps; i++) {
- ByteArrayOutputStream output = new ByteArrayOutputStream();
- sampleMessageList.get((int) (counter % sampleMessageList.size())).writeTo(output);
- counter++;
- }
- }
-
- @Benchmark
- void deserializeFromByteString(int reps) throws IOException {
- for (int i = 0; i < reps; i++) {
- benchmarkMessageType.getDefaultInstance().getParserForType().parseFrom(
- inputStringList.get((int) (counter % inputStringList.size())), extensions);
- counter++;
- }
- }
-
- @Benchmark
- void deserializeFromByteArray(int reps) throws IOException {
- for (int i = 0; i < reps; i++) {
- benchmarkMessageType.getDefaultInstance().getParserForType().parseFrom(
- inputDataList.get((int) (counter % inputDataList.size())), extensions);
- counter++;
- }
- }
-
- @Benchmark
- void deserializeFromMemoryStream(int reps) throws IOException {
- for (int i = 0; i < reps; i++) {
- benchmarkMessageType.getDefaultInstance().getParserForType().parseFrom(
- inputStreamList.get((int) (counter % inputStreamList.size())), extensions);
- inputStreamList.get((int) (counter % inputStreamList.size())).reset();
- counter++;
- }
- }
-
- @AfterExperiment
- void checkCounter() throws IOException {
- if (counter == 1) {
- // Dry run
- return;
- }
- if (benchmarkDataset.getPayloadCount() != 1
- && counter < benchmarkDataset.getPayloadCount() * 10L) {
- BufferedWriter writer = new BufferedWriter(new FileWriter("JavaBenchmarkWarning.txt", true));
- // If the total number of non-warmup reps is smaller than 100 times of the total number of
- // datasets, then output the scale that need to multiply to the configuration (either extend
- // the running time for one timingInterval or run for more measurements).
- writer.append(1.0 * benchmarkDataset.getPayloadCount() * 10L / counter + " ");
- writer.close();
- }
- }
-}
diff --git a/benchmarks/java/src/main/java/com/google/protobuf/ProtoCaliperBenchmark.java b/benchmarks/java/src/main/java/com/google/protobuf/ProtoCaliperBenchmark.java
new file mode 100755
index 00000000..c766d74e
--- /dev/null
+++ b/benchmarks/java/src/main/java/com/google/protobuf/ProtoCaliperBenchmark.java
@@ -0,0 +1,214 @@
+
+package com.google.protobuf;
+
+import com.google.caliper.BeforeExperiment;
+import com.google.caliper.AfterExperiment;
+import com.google.caliper.Benchmark;
+import com.google.caliper.Param;
+import com.google.caliper.api.VmOptions;
+import com.google.protobuf.ByteString;
+import com.google.protobuf.CodedOutputStream;
+import com.google.protobuf.ExtensionRegistry;
+import com.google.protobuf.Message;
+import com.google.protobuf.benchmarks.Benchmarks.BenchmarkDataset;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.RandomAccessFile;
+import java.util.ArrayList;
+import java.util.List;
+
+// Caliper set CICompilerCount to 1 for making sure compilation doesn't run in parallel with itself,
+// This makes TieredCompilation not working. We just disable TieredCompilation by default. In master
+// branch this has been disabled by default in caliper:
+// https://github.com/google/caliper/blob/master/caliper-runner/src/main/java/com/google/caliper/runner/target/Jvm.java#L38:14
+// But this haven't been added into most recent release.
+@VmOptions("-XX:-TieredCompilation")
+public class ProtoCaliperBenchmark {
+ public enum BenchmarkMessageType {
+ GOOGLE_MESSAGE1_PROTO3 {
+ @Override ExtensionRegistry getExtensionRegistry() { return ExtensionRegistry.newInstance(); }
+ @Override
+ Message getDefaultInstance() {
+ return com.google.protobuf.benchmarks.BenchmarkMessage1Proto3.GoogleMessage1
+ .getDefaultInstance();
+ }
+ },
+ GOOGLE_MESSAGE1_PROTO2 {
+ @Override ExtensionRegistry getExtensionRegistry() { return ExtensionRegistry.newInstance(); }
+ @Override
+ Message getDefaultInstance() {
+ return com.google.protobuf.benchmarks.BenchmarkMessage1Proto2.GoogleMessage1
+ .getDefaultInstance();
+ }
+ },
+ GOOGLE_MESSAGE2 {
+ @Override ExtensionRegistry getExtensionRegistry() { return ExtensionRegistry.newInstance(); }
+ @Override
+ Message getDefaultInstance() {
+ return com.google.protobuf.benchmarks.BenchmarkMessage2.GoogleMessage2.getDefaultInstance();
+ }
+ },
+ GOOGLE_MESSAGE3 {
+ @Override
+ ExtensionRegistry getExtensionRegistry() {
+ ExtensionRegistry extensions = ExtensionRegistry.newInstance();
+ com.google.protobuf.benchmarks.BenchmarkMessage38.registerAllExtensions(extensions);
+ com.google.protobuf.benchmarks.BenchmarkMessage37.registerAllExtensions(extensions);
+ com.google.protobuf.benchmarks.BenchmarkMessage36.registerAllExtensions(extensions);
+ com.google.protobuf.benchmarks.BenchmarkMessage35.registerAllExtensions(extensions);
+ com.google.protobuf.benchmarks.BenchmarkMessage34.registerAllExtensions(extensions);
+ com.google.protobuf.benchmarks.BenchmarkMessage33.registerAllExtensions(extensions);
+ com.google.protobuf.benchmarks.BenchmarkMessage32.registerAllExtensions(extensions);
+ com.google.protobuf.benchmarks.BenchmarkMessage31.registerAllExtensions(extensions);
+ com.google.protobuf.benchmarks.BenchmarkMessage3.registerAllExtensions(extensions);
+ return extensions;
+ }
+ @Override
+ Message getDefaultInstance() {
+ return com.google.protobuf.benchmarks.BenchmarkMessage3.GoogleMessage3.getDefaultInstance();
+ }
+ },
+ GOOGLE_MESSAGE4 {
+ @Override
+ ExtensionRegistry getExtensionRegistry() {
+ ExtensionRegistry extensions = ExtensionRegistry.newInstance();
+ com.google.protobuf.benchmarks.BenchmarkMessage43.registerAllExtensions(extensions);
+ com.google.protobuf.benchmarks.BenchmarkMessage42.registerAllExtensions(extensions);
+ com.google.protobuf.benchmarks.BenchmarkMessage41.registerAllExtensions(extensions);
+ com.google.protobuf.benchmarks.BenchmarkMessage4.registerAllExtensions(extensions);
+ return extensions;
+ }
+ @Override
+ Message getDefaultInstance() {
+ return com.google.protobuf.benchmarks.BenchmarkMessage4.GoogleMessage4.getDefaultInstance();
+ }
+ };
+
+ abstract ExtensionRegistry getExtensionRegistry();
+ abstract Message getDefaultInstance();
+ }
+
+ private BenchmarkMessageType benchmarkMessageType;
+ @Param("")
+ private String dataFile;
+
+ private byte[] inputData;
+ private BenchmarkDataset benchmarkDataset;
+ private Message defaultMessage;
+ private ExtensionRegistry extensions;
+ private List<byte[]> inputDataList;
+ private List<ByteArrayInputStream> inputStreamList;
+ private List<ByteString> inputStringList;
+ private List<Message> sampleMessageList;
+
+ private BenchmarkMessageType getMessageType() throws IOException {
+ if (benchmarkDataset.getMessageName().equals("benchmarks.proto3.GoogleMessage1")) {
+ return BenchmarkMessageType.GOOGLE_MESSAGE1_PROTO3;
+ } else if (benchmarkDataset.getMessageName().equals("benchmarks.proto2.GoogleMessage1")) {
+ return BenchmarkMessageType.GOOGLE_MESSAGE1_PROTO2;
+ } else if (benchmarkDataset.getMessageName().equals("benchmarks.proto2.GoogleMessage2")) {
+ return BenchmarkMessageType.GOOGLE_MESSAGE2;
+ } else if (benchmarkDataset.getMessageName().
+ equals("benchmarks.google_message3.GoogleMessage3")) {
+ return BenchmarkMessageType.GOOGLE_MESSAGE3;
+ } else if (benchmarkDataset.getMessageName().
+ equals("benchmarks.google_message4.GoogleMessage4")) {
+ return BenchmarkMessageType.GOOGLE_MESSAGE4;
+ } else {
+ throw new IllegalStateException("Invalid DataFile! There's no testing message named "
+ + benchmarkDataset.getMessageName());
+ }
+ }
+
+ @BeforeExperiment
+ void setUp() throws IOException {
+ if (!dataFile.equals("")) {
+ RandomAccessFile file = new RandomAccessFile(new File(dataFile), "r");
+ inputData = new byte[(int) file.length()];
+ file.readFully(inputData);
+ benchmarkDataset = BenchmarkDataset.parseFrom(inputData);
+ benchmarkMessageType = getMessageType();
+ } else {
+ inputData = new byte[0];
+ benchmarkDataset = BenchmarkDataset.parseFrom(inputData);
+ benchmarkMessageType = BenchmarkMessageType.GOOGLE_MESSAGE2;
+ }
+ defaultMessage = benchmarkMessageType.getDefaultInstance();
+ extensions = benchmarkMessageType.getExtensionRegistry();
+ inputDataList = new ArrayList<byte[]>();
+ inputStreamList = new ArrayList<ByteArrayInputStream>();
+ inputStringList = new ArrayList<ByteString>();
+ sampleMessageList = new ArrayList<Message>();
+
+ for (int i = 0; i < benchmarkDataset.getPayloadCount(); i++) {
+ byte[] singleInputData = benchmarkDataset.getPayload(i).toByteArray();
+ inputDataList.add(benchmarkDataset.getPayload(i).toByteArray());
+ inputStreamList.add(new ByteArrayInputStream(
+ benchmarkDataset.getPayload(i).toByteArray()));
+ inputStringList.add(benchmarkDataset.getPayload(i));
+ sampleMessageList.add(
+ defaultMessage.newBuilderForType().mergeFrom(singleInputData, extensions).build());
+ }
+ }
+
+
+ @Benchmark
+ void serializeToByteArray(int reps) throws IOException {
+ if (sampleMessageList.size() == 0) {
+ return;
+ }
+ for (int i = 0; i < reps; i++) {
+ for (int j = 0; j < sampleMessageList.size(); j++) {
+ sampleMessageList.get(j).toByteArray();
+ }
+ }
+ }
+
+ @Benchmark
+ void serializeToMemoryStream(int reps) throws IOException {
+ if (sampleMessageList.size() == 0) {
+ return;
+ }
+ for (int i = 0; i < reps; i++) {
+ for (int j = 0; j < sampleMessageList.size(); j++) {
+ ByteArrayOutputStream output = new ByteArrayOutputStream();
+ sampleMessageList.get(j).writeTo(output);
+ }
+ }
+ }
+
+ @Benchmark
+ void deserializeFromByteArray(int reps) throws IOException {
+ if (inputDataList.size() == 0) {
+ return;
+ }
+ for (int i = 0; i < reps; i++) {
+ for (int j = 0; j < inputDataList.size(); j++) {
+ benchmarkMessageType.getDefaultInstance().getParserForType().parseFrom(
+ inputDataList.get(j), extensions);
+ }
+ }
+ }
+
+ @Benchmark
+ void deserializeFromMemoryStream(int reps) throws IOException {
+ if (inputStreamList.size() == 0) {
+ return;
+ }
+ for (int i = 0; i < reps; i++) {
+ for (int j = 0; j < inputStreamList.size(); j++) {
+ benchmarkMessageType.getDefaultInstance().getParserForType().parseFrom(
+ inputStreamList.get(j), extensions);
+ inputStreamList.get(j).reset();
+ }
+ }
+ }
+}
+
+