• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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