1 /* 2 * Copyright 2017-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. 3 */ 4 package kotlinx.benchmarks.protobuf 5 6 import kotlinx.serialization.Serializable 7 import kotlinx.serialization.protobuf.* 8 import org.openjdk.jmh.annotations.* 9 import java.util.concurrent.* 10 11 @Warmup(iterations = 5, time = 1) 12 @Measurement(iterations = 5, time = 1) 13 @BenchmarkMode(Mode.Throughput) 14 @OutputTimeUnit(TimeUnit.MILLISECONDS) 15 @State(Scope.Benchmark) 16 @Fork(1) 17 open class ProtoHuge { 18 19 @Serializable 20 data class Values130( 21 val field0: Int, 22 val field1: Int, 23 val field2: Int, 24 val field3: Int, 25 val field4: Int, 26 val field5: Int, 27 val field6: Int, 28 val field7: Int, 29 val field8: Int, 30 val field9: Int, 31 32 val field10: Int, 33 val field11: Int, 34 val field12: Int, 35 val field13: Int, 36 val field14: Int, 37 val field15: Int, 38 val field16: Int, 39 val field17: Int, 40 val field18: Int, 41 val field19: Int, 42 43 val field20: Int, 44 val field21: Int, 45 val field22: Int, 46 val field23: Int, 47 val field24: Int, 48 val field25: Int, 49 val field26: Int, 50 val field27: Int, 51 val field28: Int, 52 val field29: Int, 53 54 val field30: Int, 55 val field31: Int, 56 val field32: Int, 57 val field33: Int, 58 val field34: Int, 59 val field35: Int, 60 val field36: Int, 61 val field37: Int, 62 val field38: Int, 63 val field39: Int, 64 65 val field40: Int, 66 val field41: Int, 67 val field42: Int, 68 val field43: Int, 69 val field44: Int, 70 val field45: Int, 71 val field46: Int, 72 val field47: Int, 73 val field48: Int, 74 val field49: Int, 75 76 val field50: Int, 77 val field51: Int, 78 val field52: Int, 79 val field53: Int, 80 val field54: Int, 81 val field55: Int, 82 val field56: Int, 83 val field57: Int, 84 val field58: Int, 85 val field59: Int, 86 87 val field60: Int, 88 val field61: Int, 89 val field62: Int, 90 val field63: Int, 91 val field64: Int, 92 val field65: Int, 93 val field66: Int, 94 val field67: Int, 95 val field68: Int, 96 val field69: Int, 97 98 val field70: Int, 99 val field71: Int, 100 val field72: Int, 101 val field73: Int, 102 val field74: Int, 103 val field75: Int, 104 val field76: Int, 105 val field77: Int, 106 val field78: Int, 107 val field79: Int, 108 109 val field80: Int, 110 val field81: Int, 111 val field82: Int, 112 val field83: Int, 113 val field84: Int, 114 val field85: Int, 115 val field86: Int, 116 val field87: Int, 117 val field88: Int, 118 val field89: Int, 119 120 val field90: Int, 121 val field91: Int, 122 val field92: Int, 123 val field93: Int, 124 val field94: Int, 125 val field95: Int, 126 val field96: Int, 127 val field97: Int, 128 val field98: Int, 129 val field99: Int, 130 131 val field100: Int, 132 val field101: Int, 133 val field102: Int, 134 val field103: Int, 135 val field104: Int, 136 val field105: Int, 137 val field106: Int, 138 val field107: Int, 139 val field108: Int, 140 val field109: Int, 141 142 val field110: Int, 143 val field111: Int, 144 val field112: Int, 145 val field113: Int, 146 val field114: Int, 147 val field115: Int, 148 val field116: Int, 149 val field117: Int, 150 val field118: Int, 151 val field119: Int, 152 153 val field120: Int, 154 val field121: Int, 155 val field122: Int, 156 val field123: Int, 157 val field124: Int, 158 val field125: Int, 159 val field126: Int, 160 val field127: Int, 161 val field128: Int, 162 val field129: Int 163 ) 164 165 private val values130 = Values130( 166 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 167 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 168 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 169 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 170 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 171 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 172 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 173 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 174 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 175 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 176 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 177 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 178 120, 121, 122, 123, 124, 125, 126, 127, 128, 129 179 ) 180 181 private val values130Bytes = ProtoBuf.encodeToByteArray(Values130.serializer(), values130) 182 183 @Benchmark toBytes130null184 fun toBytes130() = ProtoBuf.encodeToByteArray(Values130.serializer(), values130) 185 186 @Benchmark 187 fun fromBytes130() = ProtoBuf.decodeFromByteArray(Values130.serializer(), values130Bytes) 188 189 } 190