J. Duke | 319a3b9 | 2007-12-01 00:00:00 +0000 | [diff] [blame^] | 1 | /* |
| 2 | * Copyright 1999 Sun Microsystems, Inc. All Rights Reserved. |
| 3 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
| 4 | * |
| 5 | * This code is free software; you can redistribute it and/or modify it |
| 6 | * under the terms of the GNU General Public License version 2 only, as |
| 7 | * published by the Free Software Foundation. |
| 8 | * |
| 9 | * This code is distributed in the hope that it will be useful, but WITHOUT |
| 10 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
| 11 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
| 12 | * version 2 for more details (a copy is included in the LICENSE file that |
| 13 | * accompanied this code). |
| 14 | * |
| 15 | * You should have received a copy of the GNU General Public License version |
| 16 | * 2 along with this work; if not, write to the Free Software Foundation, |
| 17 | * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
| 18 | * |
| 19 | * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, |
| 20 | * CA 95054 USA or visit www.sun.com if you need additional information or |
| 21 | * have any questions. |
| 22 | */ |
| 23 | |
| 24 | /* |
| 25 | * |
| 26 | */ |
| 27 | |
| 28 | package bench.serial; |
| 29 | |
| 30 | import bench.Benchmark; |
| 31 | import java.io.ObjectInputStream; |
| 32 | import java.io.ObjectOutputStream; |
| 33 | import java.io.ObjectStreamClass; |
| 34 | import java.io.Serializable; |
| 35 | |
| 36 | /** |
| 37 | * Benchmark for testing speed of class descriptor reads/writes. |
| 38 | */ |
| 39 | public class ClassDesc implements Benchmark { |
| 40 | |
| 41 | static class Dummy0 implements Serializable { Dummy0 i0; } |
| 42 | static class Dummy1 extends Dummy0 { Dummy1 i1; } |
| 43 | static class Dummy2 extends Dummy1 { Dummy2 i2; } |
| 44 | static class Dummy3 extends Dummy2 { Dummy3 i3; } |
| 45 | static class Dummy4 extends Dummy3 { Dummy4 i4; } |
| 46 | static class Dummy5 extends Dummy4 { Dummy5 i5; } |
| 47 | static class Dummy6 extends Dummy5 { Dummy6 i6; } |
| 48 | static class Dummy7 extends Dummy6 { Dummy7 i7; } |
| 49 | static class Dummy8 extends Dummy7 { Dummy8 i8; } |
| 50 | static class Dummy9 extends Dummy8 { Dummy9 i9; } |
| 51 | static class Dummy10 extends Dummy9 { Dummy10 i10; } |
| 52 | static class Dummy11 extends Dummy10 { Dummy11 i11; } |
| 53 | static class Dummy12 extends Dummy11 { Dummy12 i12; } |
| 54 | static class Dummy13 extends Dummy12 { Dummy13 i13; } |
| 55 | static class Dummy14 extends Dummy13 { Dummy14 i14; } |
| 56 | static class Dummy15 extends Dummy14 { Dummy15 i15; } |
| 57 | static class Dummy16 extends Dummy15 { Dummy16 i16; } |
| 58 | static class Dummy17 extends Dummy16 { Dummy17 i17; } |
| 59 | static class Dummy18 extends Dummy17 { Dummy18 i18; } |
| 60 | static class Dummy19 extends Dummy18 { Dummy19 i19; } |
| 61 | static class Dummy20 extends Dummy19 { Dummy20 i20; } |
| 62 | static class Dummy21 extends Dummy20 { Dummy21 i21; } |
| 63 | static class Dummy22 extends Dummy21 { Dummy22 i22; } |
| 64 | static class Dummy23 extends Dummy22 { Dummy23 i23; } |
| 65 | static class Dummy24 extends Dummy23 { Dummy24 i24; } |
| 66 | static class Dummy25 extends Dummy24 { Dummy25 i25; } |
| 67 | static class Dummy26 extends Dummy25 { Dummy26 i26; } |
| 68 | static class Dummy27 extends Dummy26 { Dummy27 i27; } |
| 69 | static class Dummy28 extends Dummy27 { Dummy28 i28; } |
| 70 | static class Dummy29 extends Dummy28 { Dummy29 i29; } |
| 71 | static class Dummy30 extends Dummy29 { Dummy30 i30; } |
| 72 | static class Dummy31 extends Dummy30 { Dummy31 i31; } |
| 73 | static class Dummy32 extends Dummy31 { Dummy32 i32; } |
| 74 | static class Dummy33 extends Dummy32 { Dummy33 i33; } |
| 75 | static class Dummy34 extends Dummy33 { Dummy34 i34; } |
| 76 | static class Dummy35 extends Dummy34 { Dummy35 i35; } |
| 77 | static class Dummy36 extends Dummy35 { Dummy36 i36; } |
| 78 | static class Dummy37 extends Dummy36 { Dummy37 i37; } |
| 79 | static class Dummy38 extends Dummy37 { Dummy38 i38; } |
| 80 | static class Dummy39 extends Dummy38 { Dummy39 i39; } |
| 81 | static class Dummy40 extends Dummy39 { Dummy40 i40; } |
| 82 | static class Dummy41 extends Dummy40 { Dummy41 i41; } |
| 83 | static class Dummy42 extends Dummy41 { Dummy42 i42; } |
| 84 | static class Dummy43 extends Dummy42 { Dummy43 i43; } |
| 85 | static class Dummy44 extends Dummy43 { Dummy44 i44; } |
| 86 | static class Dummy45 extends Dummy44 { Dummy45 i45; } |
| 87 | static class Dummy46 extends Dummy45 { Dummy46 i46; } |
| 88 | static class Dummy47 extends Dummy46 { Dummy47 i47; } |
| 89 | static class Dummy48 extends Dummy47 { Dummy48 i48; } |
| 90 | static class Dummy49 extends Dummy48 { Dummy49 i49; } |
| 91 | static class Dummy50 extends Dummy49 { Dummy50 i50; } |
| 92 | |
| 93 | /** |
| 94 | * Write and read class descriptors to/from a stream. |
| 95 | * Arguments: <# cycles> |
| 96 | */ |
| 97 | public long run(String[] args) throws Exception { |
| 98 | int ncycles = Integer.parseInt(args[0]); |
| 99 | StreamBuffer sbuf = new StreamBuffer(); |
| 100 | ObjectOutputStream oout = |
| 101 | new ObjectOutputStream(sbuf.getOutputStream()); |
| 102 | ObjectInputStream oin = |
| 103 | new ObjectInputStream(sbuf.getInputStream()); |
| 104 | ObjectStreamClass desc = ObjectStreamClass.lookup(Dummy50.class); |
| 105 | |
| 106 | doReps(oout, oin, sbuf, desc, 1); // warmup |
| 107 | |
| 108 | long start = System.currentTimeMillis(); |
| 109 | doReps(oout, oin, sbuf, desc, ncycles); |
| 110 | return System.currentTimeMillis() - start; |
| 111 | } |
| 112 | |
| 113 | /** |
| 114 | * Run benchmark for given number of cycles. |
| 115 | */ |
| 116 | void doReps(ObjectOutputStream oout, ObjectInputStream oin, |
| 117 | StreamBuffer sbuf, ObjectStreamClass desc, int ncycles) |
| 118 | throws Exception |
| 119 | { |
| 120 | for (int i = 0; i < ncycles; i++) { |
| 121 | sbuf.reset(); |
| 122 | oout.reset(); |
| 123 | oout.writeObject(desc); |
| 124 | oout.flush(); |
| 125 | oin.readObject(); |
| 126 | } |
| 127 | } |
| 128 | } |
| 129 | |