1 /* 2 * Copyright 2017-2022 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. 3 */ 4 5 package kotlinx.benchmarks.json 6 7 import kotlinx.serialization.* 8 import kotlinx.serialization.builtins.* 9 import kotlinx.serialization.json.* 10 import org.openjdk.jmh.annotations.* 11 import java.util.concurrent.* 12 13 @Warmup(iterations = 7, time = 1) 14 @Measurement(iterations = 7, time = 1) 15 @BenchmarkMode(Mode.Throughput) 16 @OutputTimeUnit(TimeUnit.MICROSECONDS) 17 @State(Scope.Benchmark) 18 @Fork(2) 19 open class LookupOverheadBenchmark { 20 21 @Serializable 22 class Holder(val a: String) 23 24 @Serializable 25 class Generic<T>(val a: T) 26 27 @Serializable 28 class DoubleGeneric<T1, T2>(val a: T1, val b: T2) 29 30 @Serializable 31 class PentaGeneric<T1, T2, T3, T4, T5>(val a: T1, val b: T2, val c: T3, val d: T4, val e: T5) 32 33 private val data = """{"a":""}""" 34 private val doubleData = """{"a":"","b":0}""" 35 private val pentaData = """{"a":"","b":0,"c":1,"d":true,"e":" "}""" 36 37 @Serializable 38 object Object 39 40 @Benchmark dataReifiednull41 fun dataReified() = Json.decodeFromString<Holder>(data) 42 43 @Benchmark 44 fun dataPlain() = Json.decodeFromString(Holder.serializer(), data) 45 46 @Benchmark 47 fun genericReified() = Json.decodeFromString<Generic<String>>(data) 48 49 @Benchmark 50 fun genericPlain() = Json.decodeFromString(Generic.serializer(String.serializer()), data) 51 52 @Benchmark 53 fun doubleGenericReified() = Json.decodeFromString<DoubleGeneric<String, Int>>(doubleData) 54 55 @Benchmark 56 fun doubleGenericPlain() = Json.decodeFromString(DoubleGeneric.serializer(String.serializer(), Int.serializer()), doubleData) 57 58 @Benchmark 59 fun pentaGenericReified() = Json.decodeFromString<PentaGeneric<String, Int, Long, Boolean, Char>>(pentaData) 60 61 @Benchmark 62 fun pentaGenericPlain() = Json.decodeFromString(PentaGeneric.serializer(String.serializer(), Int.serializer(), Long.serializer(), Boolean.serializer(), Char.serializer()), pentaData) 63 64 @Benchmark 65 fun objectReified() = Json.decodeFromString<Object>("{}") 66 67 @Benchmark 68 fun objectPlain() = Json.decodeFromString(Object.serializer(), "{}") 69 } 70