1 package kotlinx.benchmarks.json 2 3 import kotlinx.benchmarks.model.* 4 import kotlinx.serialization.* 5 import kotlinx.serialization.json.* 6 import kotlinx.serialization.json.Json.Default.decodeFromString 7 import kotlinx.serialization.json.Json.Default.encodeToString 8 import org.openjdk.jmh.annotations.* 9 import java.util.concurrent.* 10 11 @Warmup(iterations = 7, time = 1) 12 @Measurement(iterations = 7, time = 1) 13 @BenchmarkMode(Mode.Throughput) 14 @OutputTimeUnit(TimeUnit.SECONDS) 15 @State(Scope.Benchmark) 16 @Fork(2) 17 open class CitmBenchmark { 18 /* 19 * For some reason Citm is kind of de-facto standard cross-language benchmark. 20 * Order of magnitude: 200 ops/sec 21 */ 22 private val input = CitmBenchmark::class.java.getResource("/citm_catalog.json").readBytes().decodeToString() 23 private val citm = Json.decodeFromString(CitmCatalog.serializer(), input) 24 25 @Setup initnull26 fun init() { 27 require(citm == Json.decodeFromString(CitmCatalog.serializer(), Json.encodeToString(citm))) 28 } 29 30 @Benchmark decodeCitmnull31 fun decodeCitm(): CitmCatalog = Json.decodeFromString(CitmCatalog.serializer(), input) 32 33 @Benchmark 34 fun encodeCitm(): String = Json.encodeToString(CitmCatalog.serializer(), citm) 35 } 36