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