| /* |
| * Copyright (C) 2010 Google Inc. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package benchmarks.regression; |
| |
| import com.google.caliper.Param; |
| import com.google.caliper.Runner; |
| import com.google.caliper.SimpleBenchmark; |
| import java.io.*; |
| import java.lang.reflect.*; |
| import java.util.*; |
| |
| public class SerializationBenchmark extends SimpleBenchmark { |
| private static byte[] bytes(Object o) throws Exception { |
| ByteArrayOutputStream baos = new ByteArrayOutputStream(1024); |
| ObjectOutputStream out = new ObjectOutputStream(baos); |
| out.writeObject(o); |
| out.close(); |
| return baos.toByteArray(); |
| } |
| |
| public void timeReadIntArray(int reps) throws Exception { |
| int[] intArray = new int[256]; |
| readSingleObject(reps, intArray); |
| } |
| |
| public void timeWriteIntArray(int reps) throws Exception { |
| int[] intArray = new int[256]; |
| writeSingleObject(reps, intArray); |
| } |
| public void timeReadArrayListInteger(int reps) throws Exception { |
| ArrayList<Integer> object = new ArrayList<Integer>(); |
| for (int i = 0; i < 256; ++i) { |
| object.add(i); |
| } |
| readSingleObject(reps, object); |
| } |
| |
| public void timeWriteArrayListInteger(int reps) throws Exception { |
| ArrayList<Integer> object = new ArrayList<Integer>(); |
| for (int i = 0; i < 256; ++i) { |
| object.add(i); |
| } |
| writeSingleObject(reps, object); |
| } |
| |
| public void timeReadString(int reps) throws Exception { |
| readSingleObject(reps, "hello"); |
| } |
| |
| public void timeReadObjectStreamClass(int reps) throws Exception { |
| // A special case because serialization itself requires this class. |
| // (This should really be a unit test.) |
| ObjectStreamClass osc = ObjectStreamClass.lookup(String.class); |
| readSingleObject(reps, osc); |
| } |
| |
| public void timeWriteString(int reps) throws Exception { |
| // String is a special case that avoids JNI. |
| writeSingleObject(reps, "hello"); |
| } |
| |
| public void timeWriteObjectStreamClass(int reps) throws Exception { |
| // A special case because serialization itself requires this class. |
| // (This should really be a unit test.) |
| ObjectStreamClass osc = ObjectStreamClass.lookup(String.class); |
| writeSingleObject(reps, osc); |
| } |
| |
| // This is a baseline for the others. |
| public void timeWriteNoObjects(int reps) throws Exception { |
| ByteArrayOutputStream baos = new ByteArrayOutputStream(1024); |
| ObjectOutputStream out = new ObjectOutputStream(baos); |
| for (int rep = 0; rep < reps; ++rep) { |
| out.reset(); |
| baos.reset(); |
| } |
| out.close(); |
| } |
| |
| private void readSingleObject(int reps, Object object) throws Exception { |
| byte[] bytes = bytes(object); |
| ByteArrayInputStream bais = new ByteArrayInputStream(bytes); |
| for (int rep = 0; rep < reps; ++rep) { |
| ObjectInputStream in = new ObjectInputStream(bais); |
| in.readObject(); |
| in.close(); |
| bais.reset(); |
| } |
| } |
| |
| private void writeSingleObject(int reps, Object o) throws Exception { |
| ByteArrayOutputStream baos = new ByteArrayOutputStream(1024); |
| ObjectOutputStream out = new ObjectOutputStream(baos); |
| for (int rep = 0; rep < reps; ++rep) { |
| out.writeObject(o); |
| out.reset(); |
| baos.reset(); |
| } |
| out.close(); |
| } |
| |
| public void timeWriteEveryKindOfField(int reps) throws Exception { |
| writeSingleObject(reps, new LittleBitOfEverything()); |
| } |
| public void timeWriteSerializableBoolean(int reps) throws Exception { |
| writeSingleObject(reps, new SerializableBoolean()); |
| } |
| public void timeWriteSerializableByte(int reps) throws Exception { |
| writeSingleObject(reps, new SerializableByte()); |
| } |
| public void timeWriteSerializableChar(int reps) throws Exception { |
| writeSingleObject(reps, new SerializableChar()); |
| } |
| public void timeWriteSerializableDouble(int reps) throws Exception { |
| writeSingleObject(reps, new SerializableDouble()); |
| } |
| public void timeWriteSerializableFloat(int reps) throws Exception { |
| writeSingleObject(reps, new SerializableFloat()); |
| } |
| public void timeWriteSerializableInt(int reps) throws Exception { |
| writeSingleObject(reps, new SerializableInt()); |
| } |
| public void timeWriteSerializableLong(int reps) throws Exception { |
| writeSingleObject(reps, new SerializableLong()); |
| } |
| public void timeWriteSerializableShort(int reps) throws Exception { |
| writeSingleObject(reps, new SerializableShort()); |
| } |
| public void timeWriteSerializableReference(int reps) throws Exception { |
| writeSingleObject(reps, new SerializableReference()); |
| } |
| |
| public void timeReadEveryKindOfField(int reps) throws Exception { |
| readSingleObject(reps, new LittleBitOfEverything()); |
| } |
| public void timeReadSerializableBoolean(int reps) throws Exception { |
| readSingleObject(reps, new SerializableBoolean()); |
| } |
| public void timeReadSerializableByte(int reps) throws Exception { |
| readSingleObject(reps, new SerializableByte()); |
| } |
| public void timeReadSerializableChar(int reps) throws Exception { |
| readSingleObject(reps, new SerializableChar()); |
| } |
| public void timeReadSerializableDouble(int reps) throws Exception { |
| readSingleObject(reps, new SerializableDouble()); |
| } |
| public void timeReadSerializableFloat(int reps) throws Exception { |
| readSingleObject(reps, new SerializableFloat()); |
| } |
| public void timeReadSerializableInt(int reps) throws Exception { |
| readSingleObject(reps, new SerializableInt()); |
| } |
| public void timeReadSerializableLong(int reps) throws Exception { |
| readSingleObject(reps, new SerializableLong()); |
| } |
| public void timeReadSerializableShort(int reps) throws Exception { |
| readSingleObject(reps, new SerializableShort()); |
| } |
| public void timeReadSerializableReference(int reps) throws Exception { |
| readSingleObject(reps, new SerializableReference()); |
| } |
| |
| public static class SerializableBoolean implements Serializable { |
| boolean z; |
| } |
| public static class SerializableByte implements Serializable { |
| byte b; |
| } |
| public static class SerializableChar implements Serializable { |
| char c; |
| } |
| public static class SerializableDouble implements Serializable { |
| double d; |
| } |
| public static class SerializableFloat implements Serializable { |
| float f; |
| } |
| public static class SerializableInt implements Serializable { |
| int i; |
| } |
| public static class SerializableLong implements Serializable { |
| long j; |
| } |
| public static class SerializableShort implements Serializable { |
| short s; |
| } |
| public static class SerializableReference implements Serializable { |
| Object l; |
| } |
| |
| public static class LittleBitOfEverything implements Serializable { |
| boolean z; |
| byte b; |
| char c; |
| double d; |
| float f; |
| int i; |
| long j; |
| short s; |
| Object l; |
| } |
| } |