Skip to content

Commit

Permalink
Add performance comparison to snakeyaml-engine (#217)
Browse files Browse the repository at this point in the history
This way we should have a reference point to the implementation where
SnakeYAML Engine KMP was forked from.
  • Loading branch information
krzema12 authored Jul 27, 2024
1 parent 222a16e commit c2dd42a
Show file tree
Hide file tree
Showing 2 changed files with 58 additions and 0 deletions.
6 changes: 6 additions & 0 deletions snake-kmp-benchmarks/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,12 @@ kotlin {
}
}

jvmMain {
dependencies {
implementation("org.snakeyaml:snakeyaml-engine:2.7")
}
}

jsMain {
dependencies {
implementation("net.thauvin.erik.urlencoder:urlencoder-lib:1.5.0") {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package it.krzeminski.snakeyaml.engine.kmp.benchmark

import kotlinx.benchmark.*
import okio.Path.Companion.toPath
import okio.buffer
import okio.use
import org.snakeyaml.engine.v2.api.LoadSettings
import org.snakeyaml.engine.v2.api.YamlUnicodeReader
import org.snakeyaml.engine.v2.composer.Composer
import org.snakeyaml.engine.v2.constructor.BaseConstructor
import org.snakeyaml.engine.v2.constructor.StandardConstructor
import org.snakeyaml.engine.v2.parser.ParserImpl
import org.snakeyaml.engine.v2.scanner.StreamReader

@State(Scope.Benchmark)
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(BenchmarkTimeUnit.MILLISECONDS)
class SnakeyamlEngineJvmLoadingTimeBenchmark {
@Param("")
var openAiYamlPath: String = ""

private val loadSettings = LoadSettings.builder().build()

private lateinit var constructor: BaseConstructor

@Setup
fun setUp() {
constructor = StandardConstructor(loadSettings)
}

@Benchmark
fun loadsOpenAiSchema(): Map<*, *> {
return with(fileSystem()) {
openReadOnly(openAiYamlPath.toPath(normalize = true)).use { handle ->
handle.source().buffer().use { source ->
val reader = StreamReader(
loadSettings,
YamlUnicodeReader(source.inputStream()),
)
val composer = Composer(
loadSettings,
ParserImpl(
loadSettings,
reader,
)
)
constructor.constructSingleDocument(composer.getSingleNode()) as Map<*, *>
}
}
}
}
}

0 comments on commit c2dd42a

Please sign in to comment.