-
Notifications
You must be signed in to change notification settings - Fork 612
/
LookupOverheadBenchmark.kt
45 lines (33 loc) · 1.1 KB
/
LookupOverheadBenchmark.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package kotlinx.benchmarks.json
import kotlinx.serialization.*
import kotlinx.serialization.builtins.*
import kotlinx.serialization.json.*
import org.openjdk.jmh.annotations.*
import java.util.concurrent.*
@Warmup(iterations = 7, time = 1)
@Measurement(iterations = 7, time = 1)
@BenchmarkMode(Mode.Throughput)
@OutputTimeUnit(TimeUnit.MICROSECONDS)
@State(Scope.Benchmark)
@Fork(2)
open class LookupOverheadBenchmark {
@Serializable
class Holder(val a: String)
@Serializable
class Generic<T>(val a: T)
private val data = """{"a":""}"""
@Serializable
object Object
@Benchmark
fun dataReified() = Json.decodeFromString<Holder>(data)
@Benchmark
fun dataPlain() = Json.decodeFromString(Holder.serializer(), data)
@Benchmark
fun genericReified() = Json.decodeFromString<Generic<String>>(data)
@Benchmark
fun genericPlain() = Json.decodeFromString(Generic.serializer(String.serializer()), data)
@Benchmark
fun objectReified() = Json.decodeFromString<Object>("{}")
@Benchmark
fun objectPlain() = Json.decodeFromString(Object.serializer(), "{}")
}