From 6ce56fda46f509a3d73f0766e92f0776e661c3ef Mon Sep 17 00:00:00 2001 From: Justin Brooks Date: Wed, 8 Mar 2023 17:17:00 -0600 Subject: [PATCH 1/3] Add jackson benchmarks --- .../android/AndroidBenchmark.kt | 94 +++++++++++++++++++ gradle/wrapper/gradle-wrapper.properties | 2 +- models/build.gradle | 3 + .../models/jackson/JackFriend.kt | 9 ++ .../models/jackson/JackImage.kt | 11 +++ .../models/jackson/JackName.kt | 9 ++ .../models/jackson/JackResponse.kt | 10 ++ .../models/jackson/JackUser.kt | 30 ++++++ .../models/jacksonKotlin/JKFriend.kt | 6 ++ .../models/jacksonKotlin/JKImage.kt | 8 ++ .../models/jacksonKotlin/JKName.kt | 6 ++ .../models/jacksonKotlin/JKResponse.kt | 10 ++ .../models/jacksonKotlin/JKUser.kt | 34 +++++++ 13 files changed, 231 insertions(+), 1 deletion(-) create mode 100644 models/src/main/java/dev/zacsweers/jsonserialization/models/jackson/JackFriend.kt create mode 100644 models/src/main/java/dev/zacsweers/jsonserialization/models/jackson/JackImage.kt create mode 100644 models/src/main/java/dev/zacsweers/jsonserialization/models/jackson/JackName.kt create mode 100644 models/src/main/java/dev/zacsweers/jsonserialization/models/jackson/JackResponse.kt create mode 100644 models/src/main/java/dev/zacsweers/jsonserialization/models/jackson/JackUser.kt create mode 100644 models/src/main/java/dev/zacsweers/jsonserialization/models/jacksonKotlin/JKFriend.kt create mode 100644 models/src/main/java/dev/zacsweers/jsonserialization/models/jacksonKotlin/JKImage.kt create mode 100644 models/src/main/java/dev/zacsweers/jsonserialization/models/jacksonKotlin/JKName.kt create mode 100644 models/src/main/java/dev/zacsweers/jsonserialization/models/jacksonKotlin/JKResponse.kt create mode 100644 models/src/main/java/dev/zacsweers/jsonserialization/models/jacksonKotlin/JKUser.kt diff --git a/android/benchmark/src/androidTest/kotlin/dev/zacsweers/jsonserialization/android/AndroidBenchmark.kt b/android/benchmark/src/androidTest/kotlin/dev/zacsweers/jsonserialization/android/AndroidBenchmark.kt index 69f9514..dfd8b94 100644 --- a/android/benchmark/src/androidTest/kotlin/dev/zacsweers/jsonserialization/android/AndroidBenchmark.kt +++ b/android/benchmark/src/androidTest/kotlin/dev/zacsweers/jsonserialization/android/AndroidBenchmark.kt @@ -18,6 +18,8 @@ package dev.zacsweers.jsonserialization.android import androidx.benchmark.junit4.BenchmarkRule import androidx.benchmark.junit4.measureRepeated import androidx.test.filters.LargeTest +import com.fasterxml.jackson.databind.json.JsonMapper +import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper import com.google.common.base.Charsets import com.google.common.io.Resources import com.google.gson.Gson @@ -28,11 +30,17 @@ import com.squareup.moshi.Moshi import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory import dev.zacsweers.jsonserialization.models.adapter.GeneratedJsonAdapterFactory import dev.zacsweers.jsonserialization.models.adapter.GeneratedTypeAdapterFactory +import dev.zacsweers.jsonserialization.models.jackson.JackResponse +import dev.zacsweers.jsonserialization.models.jacksonKotlin.JKResponse import dev.zacsweers.jsonserialization.models.kotlinx_serialization.Response import dev.zacsweers.jsonserialization.models.java_serialization.ResponseJ import dev.zacsweers.jsonserialization.models.model_av.ResponseAV import dev.zacsweers.jsonserialization.models.moshiKotlinCodegen.KCGResponse import dev.zacsweers.jsonserialization.models.moshiKotlinReflective.KRResponse +import java.io.BufferedInputStream +import java.io.BufferedOutputStream +import java.io.ByteArrayInputStream +import java.io.ByteArrayOutputStream import kotlinx.serialization.KSerializer import okio.Buffer import okio.BufferedSink @@ -236,6 +244,40 @@ class AndroidBenchmark( } } + class JacksonDatabind(json: String) { + val mapper = JsonMapper() + val response: JackResponse = mapper.readValue(json, JackResponse::class.java) + } + + class JacksonDatabindBuffer(private val json: String) { + val mapper = JsonMapper() + val response: JackResponse = mapper.readValue(json, JackResponse::class.java) + lateinit var bufferedInput: BufferedInputStream + lateinit var bufferedOutput: BufferedOutputStream + + fun setupIteration() { + bufferedInput = BufferedInputStream(ByteArrayInputStream(json.toByteArray())) + bufferedOutput = BufferedOutputStream(ByteArrayOutputStream()) + } + } + + class JacksonKotlinDatabind(json: String) { + val mapper = jacksonObjectMapper() + val response: JKResponse = mapper.readValue(json, JKResponse::class.java) + } + + class JacksonKotlinDatabindBuffer(private val json: String) { + val mapper = jacksonObjectMapper() + val response: JKResponse = mapper.readValue(json, JKResponse::class.java) + lateinit var bufferedInput: BufferedInputStream + lateinit var bufferedOutput: BufferedOutputStream + + fun setupIteration() { + bufferedInput = BufferedInputStream(ByteArrayInputStream(json.toByteArray())) + bufferedOutput = BufferedOutputStream(ByteArrayOutputStream()) + } + } + @get:Rule val benchmarkRule = BenchmarkRule() @Suppress("UnstableApiUsage") @@ -382,4 +424,56 @@ class AndroidBenchmark( val param = runWithTimingDisabled { AVGsonBuffer(json).also { it.setupIteration() } } param.adapter.fromJson(param.source) } + + @Test + fun jackson_string_fromJson() = benchmarkRule.measureRepeated { + val param = runWithTimingDisabled { JacksonDatabind(json) } + param.mapper.readValue(json, JackResponse::class.java) + } + + @Test + fun jackson_buffer_fromJson() = benchmarkRule.measureRepeated { + val param = runWithTimingDisabled { JacksonDatabindBuffer(json).also { it.setupIteration() } } + param.mapper.readValue(param.bufferedInput, JackResponse::class.java) + } + + @Test + fun jackson_string_toJson() = benchmarkRule.measureRepeated { + val param = runWithTimingDisabled { JacksonDatabind(json) } + param.mapper.writeValueAsString(param.response) + } + + @Test + fun jackson_buffer_toJson() = benchmarkRule.measureRepeated { + val param = runWithTimingDisabled { JacksonDatabindBuffer(json).also { it.setupIteration() } } + param.mapper.writeValue(param.bufferedOutput, param.response) + } + + @Test + fun jackson_kotlin_string_fromJson() = benchmarkRule.measureRepeated { + val param = runWithTimingDisabled { JacksonKotlinDatabind(json) } + param.mapper.readValue(json, JKResponse::class.java) + } + + @Test + fun jackson_kotlin_string_toJson() = benchmarkRule.measureRepeated { + val param = runWithTimingDisabled { JacksonKotlinDatabind(json) } + param.mapper.writeValueAsString(param.response) + } + + @Test + fun jackson_kotlin_buffer_fromJson() = benchmarkRule.measureRepeated { + val param = runWithTimingDisabled { + JacksonKotlinDatabindBuffer(json).also { it.setupIteration() } + } + param.mapper.readValue(param.bufferedInput, JKResponse::class.java) + } + + @Test + fun jackson_kotlin_buffer_toJson() = benchmarkRule.measureRepeated { + val param = runWithTimingDisabled { + JacksonKotlinDatabindBuffer(json).also { it.setupIteration() } + } + param.mapper.writeValue(param.bufferedOutput, param.response) + } } \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 1ba7206..14e30f7 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.0.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/models/build.gradle b/models/build.gradle index 1f669ec..bfb697f 100644 --- a/models/build.gradle +++ b/models/build.gradle @@ -35,4 +35,7 @@ dependencies { api "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version" api "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" api "org.jetbrains.kotlinx:kotlinx-serialization-json:$serialization_version" + + api 'com.fasterxml.jackson.core:jackson-databind:2.14.2' + api 'com.fasterxml.jackson.module:jackson-module-kotlin:2.14.2' } diff --git a/models/src/main/java/dev/zacsweers/jsonserialization/models/jackson/JackFriend.kt b/models/src/main/java/dev/zacsweers/jsonserialization/models/jackson/JackFriend.kt new file mode 100644 index 0000000..77ce1bf --- /dev/null +++ b/models/src/main/java/dev/zacsweers/jsonserialization/models/jackson/JackFriend.kt @@ -0,0 +1,9 @@ +package dev.zacsweers.jsonserialization.models.jackson + +import com.fasterxml.jackson.annotation.JsonCreator +import com.fasterxml.jackson.annotation.JsonProperty + +data class JackFriend @JsonCreator constructor( + @JsonProperty("id") val id: Int, + @JsonProperty("name") val name: String, +) diff --git a/models/src/main/java/dev/zacsweers/jsonserialization/models/jackson/JackImage.kt b/models/src/main/java/dev/zacsweers/jsonserialization/models/jackson/JackImage.kt new file mode 100644 index 0000000..a15e58f --- /dev/null +++ b/models/src/main/java/dev/zacsweers/jsonserialization/models/jackson/JackImage.kt @@ -0,0 +1,11 @@ +package dev.zacsweers.jsonserialization.models.jackson + +import com.fasterxml.jackson.annotation.JsonCreator +import com.fasterxml.jackson.annotation.JsonProperty + +class JackImage @JsonCreator constructor( + @JsonProperty("id") val id: String, + @JsonProperty("format") val format: String, + @JsonProperty("url") val url: String, + @JsonProperty("description") val description: String, +) diff --git a/models/src/main/java/dev/zacsweers/jsonserialization/models/jackson/JackName.kt b/models/src/main/java/dev/zacsweers/jsonserialization/models/jackson/JackName.kt new file mode 100644 index 0000000..33962ad --- /dev/null +++ b/models/src/main/java/dev/zacsweers/jsonserialization/models/jackson/JackName.kt @@ -0,0 +1,9 @@ +package dev.zacsweers.jsonserialization.models.jackson + +import com.fasterxml.jackson.annotation.JsonCreator +import com.fasterxml.jackson.annotation.JsonProperty + +class JackName @JsonCreator constructor( + @JsonProperty("first") val first: String, + @JsonProperty("last") val last: String, +) diff --git a/models/src/main/java/dev/zacsweers/jsonserialization/models/jackson/JackResponse.kt b/models/src/main/java/dev/zacsweers/jsonserialization/models/jackson/JackResponse.kt new file mode 100644 index 0000000..ad16f38 --- /dev/null +++ b/models/src/main/java/dev/zacsweers/jsonserialization/models/jackson/JackResponse.kt @@ -0,0 +1,10 @@ +package dev.zacsweers.jsonserialization.models.jackson + +import com.fasterxml.jackson.annotation.JsonCreator +import com.fasterxml.jackson.annotation.JsonProperty + +class JackResponse @JsonCreator constructor( + @JsonProperty("users") val users: List, + @JsonProperty("status") val status: String, + @JsonProperty("is_real_json") val isRealJson: Boolean, +) diff --git a/models/src/main/java/dev/zacsweers/jsonserialization/models/jackson/JackUser.kt b/models/src/main/java/dev/zacsweers/jsonserialization/models/jackson/JackUser.kt new file mode 100644 index 0000000..c954968 --- /dev/null +++ b/models/src/main/java/dev/zacsweers/jsonserialization/models/jackson/JackUser.kt @@ -0,0 +1,30 @@ +package dev.zacsweers.jsonserialization.models.jackson + +import com.fasterxml.jackson.annotation.JsonCreator +import com.fasterxml.jackson.annotation.JsonProperty + +data class JackUser @JsonCreator constructor( + @JsonProperty("_id") val id: String, + @JsonProperty("index") val index: Int, + @JsonProperty("guid") val guid: String, + @JsonProperty("is_active") val isActive: Boolean, + @JsonProperty("balance") val balance: String, + @JsonProperty("picture") val pictureUrl: String, + @JsonProperty("age") val age: Int, + @JsonProperty("name") val name: JackName, + @JsonProperty("company") val company: String, + @JsonProperty("email") val email: String, + @JsonProperty("address") val address: String, + @JsonProperty("about") val about: String, + @JsonProperty("registered") val registered: String, + @JsonProperty("latitude") val latitude: Double, + @JsonProperty("longitude") val longitude: Double, + @JsonProperty("tags") val tags: List, + @JsonProperty("range") val range: List, + @JsonProperty("friends") val friends: List, + @JsonProperty("images") val images: List, + @JsonProperty("greeting") val greeting: String, + @JsonProperty("favorite_fruit") val favoriteFruit: String, + @JsonProperty("eye_color") val eyeColor: String, + @JsonProperty("phone") val phone: String, +) diff --git a/models/src/main/java/dev/zacsweers/jsonserialization/models/jacksonKotlin/JKFriend.kt b/models/src/main/java/dev/zacsweers/jsonserialization/models/jacksonKotlin/JKFriend.kt new file mode 100644 index 0000000..d0cb6c2 --- /dev/null +++ b/models/src/main/java/dev/zacsweers/jsonserialization/models/jacksonKotlin/JKFriend.kt @@ -0,0 +1,6 @@ +package dev.zacsweers.jsonserialization.models.jacksonKotlin + +data class JKFriend( + val id: Int, + val name: String, +) diff --git a/models/src/main/java/dev/zacsweers/jsonserialization/models/jacksonKotlin/JKImage.kt b/models/src/main/java/dev/zacsweers/jsonserialization/models/jacksonKotlin/JKImage.kt new file mode 100644 index 0000000..dac10dc --- /dev/null +++ b/models/src/main/java/dev/zacsweers/jsonserialization/models/jacksonKotlin/JKImage.kt @@ -0,0 +1,8 @@ +package dev.zacsweers.jsonserialization.models.jacksonKotlin + +class JKImage( + val id: String, + val format: String, + val url: String, + val description: String, +) diff --git a/models/src/main/java/dev/zacsweers/jsonserialization/models/jacksonKotlin/JKName.kt b/models/src/main/java/dev/zacsweers/jsonserialization/models/jacksonKotlin/JKName.kt new file mode 100644 index 0000000..1da29e3 --- /dev/null +++ b/models/src/main/java/dev/zacsweers/jsonserialization/models/jacksonKotlin/JKName.kt @@ -0,0 +1,6 @@ +package dev.zacsweers.jsonserialization.models.jacksonKotlin + +class JKName( + val first: String, + val last: String, +) diff --git a/models/src/main/java/dev/zacsweers/jsonserialization/models/jacksonKotlin/JKResponse.kt b/models/src/main/java/dev/zacsweers/jsonserialization/models/jacksonKotlin/JKResponse.kt new file mode 100644 index 0000000..b7f8d18 --- /dev/null +++ b/models/src/main/java/dev/zacsweers/jsonserialization/models/jacksonKotlin/JKResponse.kt @@ -0,0 +1,10 @@ +package dev.zacsweers.jsonserialization.models.jacksonKotlin + +import com.fasterxml.jackson.annotation.JsonProperty + +class JKResponse( + val users: List, + val status: String, + @JsonProperty("is_real_json") + val isRealJson: Boolean +) diff --git a/models/src/main/java/dev/zacsweers/jsonserialization/models/jacksonKotlin/JKUser.kt b/models/src/main/java/dev/zacsweers/jsonserialization/models/jacksonKotlin/JKUser.kt new file mode 100644 index 0000000..97d289e --- /dev/null +++ b/models/src/main/java/dev/zacsweers/jsonserialization/models/jacksonKotlin/JKUser.kt @@ -0,0 +1,34 @@ +package dev.zacsweers.jsonserialization.models.jacksonKotlin + +import com.fasterxml.jackson.annotation.JsonProperty + +data class JKUser( + @JsonProperty("_id") + val id: String, + val index: Int, + val guid: String, + @JsonProperty("is_active") + val isActive: Boolean, + val balance: String, + @JsonProperty("picture") + val pictureUrl: String, + val age: Int, + val name: JKName, + val company: String, + val email: String, + val address: String, + val about: String, + val registered: String, + val latitude: Double, + val longitude: Double, + val tags: List, + val range: List, + val friends: List, + val images: List, + val greeting: String, + @JsonProperty("favorite_fruit") + val favoriteFruit: String, + @JsonProperty("eye_color") + val eyeColor: String, + val phone: String +) From bca1e551b74955a3cd816d2692296c5676abd574 Mon Sep 17 00:00:00 2001 From: Justin Brooks Date: Thu, 9 Mar 2023 09:00:18 -0600 Subject: [PATCH 2/3] Improve buffering and cache reader/writer --- .../android/AndroidBenchmark.kt | 98 +++++++++++++------ 1 file changed, 68 insertions(+), 30 deletions(-) diff --git a/android/benchmark/src/androidTest/kotlin/dev/zacsweers/jsonserialization/android/AndroidBenchmark.kt b/android/benchmark/src/androidTest/kotlin/dev/zacsweers/jsonserialization/android/AndroidBenchmark.kt index dfd8b94..3c6b5f1 100644 --- a/android/benchmark/src/androidTest/kotlin/dev/zacsweers/jsonserialization/android/AndroidBenchmark.kt +++ b/android/benchmark/src/androidTest/kotlin/dev/zacsweers/jsonserialization/android/AndroidBenchmark.kt @@ -18,6 +18,8 @@ package dev.zacsweers.jsonserialization.android import androidx.benchmark.junit4.BenchmarkRule import androidx.benchmark.junit4.measureRepeated import androidx.test.filters.LargeTest +import com.fasterxml.jackson.databind.ObjectReader +import com.fasterxml.jackson.databind.ObjectWriter import com.fasterxml.jackson.databind.json.JsonMapper import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper import com.google.common.base.Charsets @@ -32,8 +34,8 @@ import dev.zacsweers.jsonserialization.models.adapter.GeneratedJsonAdapterFactor import dev.zacsweers.jsonserialization.models.adapter.GeneratedTypeAdapterFactory import dev.zacsweers.jsonserialization.models.jackson.JackResponse import dev.zacsweers.jsonserialization.models.jacksonKotlin.JKResponse -import dev.zacsweers.jsonserialization.models.kotlinx_serialization.Response import dev.zacsweers.jsonserialization.models.java_serialization.ResponseJ +import dev.zacsweers.jsonserialization.models.kotlinx_serialization.Response import dev.zacsweers.jsonserialization.models.model_av.ResponseAV import dev.zacsweers.jsonserialization.models.moshiKotlinCodegen.KCGResponse import dev.zacsweers.jsonserialization.models.moshiKotlinReflective.KRResponse @@ -41,6 +43,10 @@ import java.io.BufferedInputStream import java.io.BufferedOutputStream import java.io.ByteArrayInputStream import java.io.ByteArrayOutputStream +import java.io.InputStreamReader +import java.io.OutputStreamWriter +import java.io.Reader +import java.io.Writer import kotlinx.serialization.KSerializer import okio.Buffer import okio.BufferedSink @@ -50,15 +56,11 @@ import org.junit.Test import org.junit.runner.RunWith import org.junit.runners.Parameterized import org.junit.runners.Parameterized.Parameters -import java.io.InputStreamReader -import java.io.OutputStreamWriter -import java.io.Reader -import java.io.Writer @LargeTest @RunWith(Parameterized::class) class AndroidBenchmark( - minified: Boolean + minified: Boolean, ) { companion object { @@ -245,36 +247,72 @@ class AndroidBenchmark( } class JacksonDatabind(json: String) { - val mapper = JsonMapper() - val response: JackResponse = mapper.readValue(json, JackResponse::class.java) + private val mapper = JsonMapper() + val reader: ObjectReader + val writer: ObjectWriter + val response: JackResponse + + init { + val javaType = mapper.typeFactory.constructType(JackResponse::class.java) + reader = mapper.readerFor(javaType) + writer = mapper.writerFor(javaType) + response = reader.readValue(json, JackResponse::class.java) + } } class JacksonDatabindBuffer(private val json: String) { - val mapper = JsonMapper() - val response: JackResponse = mapper.readValue(json, JackResponse::class.java) - lateinit var bufferedInput: BufferedInputStream - lateinit var bufferedOutput: BufferedOutputStream + private val mapper = JsonMapper() + val reader: ObjectReader + val writer: ObjectWriter + val response: JackResponse + lateinit var source: Reader + lateinit var sink: Writer + + init { + val javaType = mapper.typeFactory.constructType(JackResponse::class.java) + reader = mapper.readerFor(javaType) + writer = mapper.writerFor(javaType) + response = reader.readValue(source, JackResponse::class.java) + } fun setupIteration() { - bufferedInput = BufferedInputStream(ByteArrayInputStream(json.toByteArray())) - bufferedOutput = BufferedOutputStream(ByteArrayOutputStream()) + source = InputStreamReader(Buffer().write(json.toByteArray()).inputStream(), Charsets.UTF_8) + sink = OutputStreamWriter(Buffer().outputStream(), Charsets.UTF_8) } } class JacksonKotlinDatabind(json: String) { - val mapper = jacksonObjectMapper() - val response: JKResponse = mapper.readValue(json, JKResponse::class.java) + private val mapper = jacksonObjectMapper() + val reader: ObjectReader + val writer: ObjectWriter + val response: JKResponse + + init { + val javaType = mapper.typeFactory.constructType(JKResponse::class.java) + reader = mapper.readerFor(javaType) + writer = mapper.writerFor(javaType) + response = reader.readValue(json) + } } class JacksonKotlinDatabindBuffer(private val json: String) { - val mapper = jacksonObjectMapper() - val response: JKResponse = mapper.readValue(json, JKResponse::class.java) - lateinit var bufferedInput: BufferedInputStream - lateinit var bufferedOutput: BufferedOutputStream + private val mapper = jacksonObjectMapper() + val reader: ObjectReader + val writer: ObjectWriter + val response: JKResponse + lateinit var source: Reader + lateinit var sink: Writer + + init { + val javaType = mapper.typeFactory.constructType(JKResponse::class.java) + reader = mapper.readerFor(javaType) + writer = mapper.writerFor(javaType) + response = reader.readValue(source) + } fun setupIteration() { - bufferedInput = BufferedInputStream(ByteArrayInputStream(json.toByteArray())) - bufferedOutput = BufferedOutputStream(ByteArrayOutputStream()) + source = InputStreamReader(Buffer().write(json.toByteArray()).inputStream(), Charsets.UTF_8) + sink = OutputStreamWriter(Buffer().outputStream(), Charsets.UTF_8) } } @@ -428,37 +466,37 @@ class AndroidBenchmark( @Test fun jackson_string_fromJson() = benchmarkRule.measureRepeated { val param = runWithTimingDisabled { JacksonDatabind(json) } - param.mapper.readValue(json, JackResponse::class.java) + param.reader.readValue(json, JackResponse::class.java) } @Test fun jackson_buffer_fromJson() = benchmarkRule.measureRepeated { val param = runWithTimingDisabled { JacksonDatabindBuffer(json).also { it.setupIteration() } } - param.mapper.readValue(param.bufferedInput, JackResponse::class.java) + param.reader.readValue(param.source, JackResponse::class.java) } @Test fun jackson_string_toJson() = benchmarkRule.measureRepeated { val param = runWithTimingDisabled { JacksonDatabind(json) } - param.mapper.writeValueAsString(param.response) + param.writer.writeValueAsString(param.response) } @Test fun jackson_buffer_toJson() = benchmarkRule.measureRepeated { val param = runWithTimingDisabled { JacksonDatabindBuffer(json).also { it.setupIteration() } } - param.mapper.writeValue(param.bufferedOutput, param.response) + param.writer.writeValue(param.sink, param.response) } @Test fun jackson_kotlin_string_fromJson() = benchmarkRule.measureRepeated { val param = runWithTimingDisabled { JacksonKotlinDatabind(json) } - param.mapper.readValue(json, JKResponse::class.java) + param.reader.readValue(json, JKResponse::class.java) } @Test fun jackson_kotlin_string_toJson() = benchmarkRule.measureRepeated { val param = runWithTimingDisabled { JacksonKotlinDatabind(json) } - param.mapper.writeValueAsString(param.response) + param.writer.writeValueAsString(param.response) } @Test @@ -466,7 +504,7 @@ class AndroidBenchmark( val param = runWithTimingDisabled { JacksonKotlinDatabindBuffer(json).also { it.setupIteration() } } - param.mapper.readValue(param.bufferedInput, JKResponse::class.java) + param.reader.readValue(param.source, JKResponse::class.java) } @Test @@ -474,6 +512,6 @@ class AndroidBenchmark( val param = runWithTimingDisabled { JacksonKotlinDatabindBuffer(json).also { it.setupIteration() } } - param.mapper.writeValue(param.bufferedOutput, param.response) + param.writer.writeValue(param.sink, param.response) } } \ No newline at end of file From 437a17b055b866ba960d1eacb92d7e2cfce29d8d Mon Sep 17 00:00:00 2001 From: Justin Brooks Date: Thu, 9 Mar 2023 09:10:41 -0600 Subject: [PATCH 3/3] Fix initialization --- .../zacsweers/jsonserialization/android/AndroidBenchmark.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/android/benchmark/src/androidTest/kotlin/dev/zacsweers/jsonserialization/android/AndroidBenchmark.kt b/android/benchmark/src/androidTest/kotlin/dev/zacsweers/jsonserialization/android/AndroidBenchmark.kt index 3c6b5f1..05e414e 100644 --- a/android/benchmark/src/androidTest/kotlin/dev/zacsweers/jsonserialization/android/AndroidBenchmark.kt +++ b/android/benchmark/src/androidTest/kotlin/dev/zacsweers/jsonserialization/android/AndroidBenchmark.kt @@ -272,7 +272,7 @@ class AndroidBenchmark( val javaType = mapper.typeFactory.constructType(JackResponse::class.java) reader = mapper.readerFor(javaType) writer = mapper.writerFor(javaType) - response = reader.readValue(source, JackResponse::class.java) + response = reader.readValue(json, JackResponse::class.java) } fun setupIteration() { @@ -307,7 +307,7 @@ class AndroidBenchmark( val javaType = mapper.typeFactory.constructType(JKResponse::class.java) reader = mapper.readerFor(javaType) writer = mapper.writerFor(javaType) - response = reader.readValue(source) + response = reader.readValue(json) } fun setupIteration() {