json-serialization-benchmarking icon indicating copy to clipboard operation
json-serialization-benchmarking copied to clipboard

Add jackson benchmarks

Open jzbrooks opened this issue 2 years ago • 2 comments
trafficstars

Resolves #17

jzbrooks avatar Mar 08 '23 23:03 jzbrooks

Results

The benchmarks ran on an emulator (which might be less than ideal, but I don't have a rooted device such that microbenchmark can lock cpu freq) on a MacBook Pro (16-inch, 2019) / 2.6 GHz 6-Core Intel Core i7 / 32 GB 2667 MHz DDR4

    3,780,714 ns AndroidBenchmark.jackson_buffer_toJson[minified=true]
    5,937,129 ns AndroidBenchmark.jackson_kotlin_buffer_toJson[minified=true]
    3,782,060 ns AndroidBenchmark.jackson_string_toJson[minified=true]
    1,891,089 ns AndroidBenchmark.jackson_buffer_fromJson[minified=true]
    5,432,586 ns AndroidBenchmark.jackson_kotlin_string_toJson[minified=true]
    4,092,667 ns AndroidBenchmark.jackson_kotlin_buffer_fromJson[minified=true]
    1,702,849 ns AndroidBenchmark.jackson_string_fromJson[minified=true]
    3,549,857 ns AndroidBenchmark.jackson_kotlin_string_fromJson[minified=true]
    3,471,514 ns AndroidBenchmark.jackson_buffer_toJson[minified=false]
    5,298,514 ns AndroidBenchmark.jackson_kotlin_buffer_toJson[minified=false]
    3,362,756 ns AndroidBenchmark.jackson_string_toJson[minified=false]
    2,116,143 ns AndroidBenchmark.jackson_buffer_fromJson[minified=false]
    5,317,808 ns AndroidBenchmark.jackson_kotlin_string_toJson[minified=false]
    4,407,135 ns AndroidBenchmark.jackson_kotlin_buffer_fromJson[minified=false]
    2,260,745 ns AndroidBenchmark.jackson_string_fromJson[minified=false]
    3,945,124 ns AndroidBenchmark.jackson_kotlin_string_fromJson[minified=false]
Full Result Set
    1,994,053 ns AndroidBenchmark.gson_reflective_string_fromJson[minified=true]
    1,535,701 ns AndroidBenchmark.gson_autovalue_string_fromJson[minified=true]
    2,106,392 ns AndroidBenchmark.moshi_autovalue_buffer_fromJson[minified=true]
    1,762,855 ns AndroidBenchmark.moshi_autovalue_string_toJson[minified=true]
    2,347,367 ns AndroidBenchmark.moshi_autovalue_string_fromJson[minified=true]
    3,780,714 ns AndroidBenchmark.jackson_buffer_toJson[minified=true]
   34,711,139 ns AndroidBenchmark.gson_autovalue_buffer_toJson[minified=true]
    2,104,227 ns AndroidBenchmark.moshi_kotlin_codegen_buffer_fromJson[minified=true]
    3,037,378 ns AndroidBenchmark.moshi_kotlin_reflective_buffer_fromJson[minified=true]
    1,263,595 ns AndroidBenchmark.moshi_kotlin_codegen_buffer_toJson[minified=true]
    2,335,807 ns AndroidBenchmark.moshi_kotlin_codegen_string_fromJson[minified=true]
    5,937,129 ns AndroidBenchmark.jackson_kotlin_buffer_toJson[minified=true]
    3,218,318 ns AndroidBenchmark.moshi_kotlin_reflective_string_fromJson[minified=true]
    2,216,778 ns AndroidBenchmark.moshi_kotlin_reflective_buffer_toJson[minified=true]
    2,164,819 ns AndroidBenchmark.kserializer_string_fromJson[minified=true]
    3,782,060 ns AndroidBenchmark.jackson_string_toJson[minified=true]
    3,080,469 ns AndroidBenchmark.gson_autovalue_string_toJson[minified=true]
    1,978,509 ns AndroidBenchmark.moshi_reflective_string_toJson[minified=true]
    1,744,364 ns AndroidBenchmark.moshi_kotlin_codegen_string_toJson[minified=true]
    2,099,764 ns AndroidBenchmark.kserializer_string_toJson[minified=true]
    3,788,587 ns AndroidBenchmark.gson_reflective_string_toJson[minified=true]
    1,221,013 ns AndroidBenchmark.moshi_autovalue_buffer_toJson[minified=true]
Timed out waiting for process (dev.zacsweers.jsonserialization.android.test) to appear on Thekla [emulator-5554].
    2,731,075 ns AndroidBenchmark.moshi_reflective_string_fromJson[minified=true]
    1,891,089 ns AndroidBenchmark.jackson_buffer_fromJson[minified=true]
    5,432,586 ns AndroidBenchmark.jackson_kotlin_string_toJson[minified=true]
    4,092,667 ns AndroidBenchmark.jackson_kotlin_buffer_fromJson[minified=true]
    1,702,849 ns AndroidBenchmark.jackson_string_fromJson[minified=true]
    2,717,578 ns AndroidBenchmark.moshi_kotlin_reflective_string_toJson[minified=true]
    3,549,857 ns AndroidBenchmark.jackson_kotlin_string_fromJson[minified=true]
    2,010,287 ns AndroidBenchmark.gson_autovalue_buffer_fromJson[minified=true]
    2,085,709 ns AndroidBenchmark.gson_reflective_string_fromJson[minified=false]
    1,643,141 ns AndroidBenchmark.gson_autovalue_string_fromJson[minified=false]
    2,684,480 ns AndroidBenchmark.moshi_autovalue_buffer_fromJson[minified=false]
    1,741,285 ns AndroidBenchmark.moshi_autovalue_string_toJson[minified=false]
    2,951,020 ns AndroidBenchmark.moshi_autovalue_string_fromJson[minified=false]
    3,471,514 ns AndroidBenchmark.jackson_buffer_toJson[minified=false]
   31,882,056 ns AndroidBenchmark.gson_autovalue_buffer_toJson[minified=false]
    2,735,238 ns AndroidBenchmark.moshi_kotlin_codegen_buffer_fromJson[minified=false]
    3,555,916 ns AndroidBenchmark.moshi_kotlin_reflective_buffer_fromJson[minified=false]
    1,184,090 ns AndroidBenchmark.moshi_kotlin_codegen_buffer_toJson[minified=false]
    3,021,006 ns AndroidBenchmark.moshi_kotlin_codegen_string_fromJson[minified=false]
    5,298,514 ns AndroidBenchmark.jackson_kotlin_buffer_toJson[minified=false]
    3,866,866 ns AndroidBenchmark.moshi_kotlin_reflective_string_fromJson[minified=false]
    2,150,292 ns AndroidBenchmark.moshi_kotlin_reflective_buffer_toJson[minified=false]
    2,143,342 ns AndroidBenchmark.kserializer_string_fromJson[minified=false]
    3,362,756 ns AndroidBenchmark.jackson_string_toJson[minified=false]
    3,029,687 ns AndroidBenchmark.gson_autovalue_string_toJson[minified=false]
    1,970,959 ns AndroidBenchmark.moshi_reflective_string_toJson[minified=false]
    1,751,465 ns AndroidBenchmark.moshi_kotlin_codegen_string_toJson[minified=false]
    2,187,586 ns AndroidBenchmark.kserializer_string_toJson[minified=false]
    3,750,312 ns AndroidBenchmark.gson_reflective_string_toJson[minified=false]
    1,198,145 ns AndroidBenchmark.moshi_autovalue_buffer_toJson[minified=false]
    4,890,404 ns AndroidBenchmark.moshi_reflective_string_fromJson[minified=false]
    2,116,143 ns AndroidBenchmark.jackson_buffer_fromJson[minified=false]
    5,317,808 ns AndroidBenchmark.jackson_kotlin_string_toJson[minified=false]
    4,407,135 ns AndroidBenchmark.jackson_kotlin_buffer_fromJson[minified=false]
    2,260,745 ns AndroidBenchmark.jackson_string_fromJson[minified=false]
    2,764,794 ns AndroidBenchmark.moshi_kotlin_reflective_string_toJson[minified=false]
    3,945,124 ns AndroidBenchmark.jackson_kotlin_string_fromJson[minified=false]
    2,285,186 ns AndroidBenchmark.gson_autovalue_buffer_fromJson[minified=false]

jzbrooks avatar Mar 09 '23 15:03 jzbrooks

Here are results on a non-root, charging Pixel 3 (Android-12).

The discrepancy between Jackson on a real device v emulator is interesting. The rest of the benchmarks didn't seem to be proportionally impacted as much.

Full Result Set
    5,140,105 ns AndroidBenchmark.gson_reflective_string_fromJson[minified=true]
    4,365,156 ns AndroidBenchmark.gson_autovalue_string_fromJson[minified=true]
    5,875,158 ns AndroidBenchmark.moshi_autovalue_buffer_fromJson[minified=true]
    5,476,719 ns AndroidBenchmark.moshi_autovalue_string_toJson[minified=true]
    6,808,386 ns AndroidBenchmark.moshi_autovalue_string_fromJson[minified=true]
   11,454,793 ns AndroidBenchmark.jackson_buffer_toJson[minified=true]
  135,394,754 ns AndroidBenchmark.gson_autovalue_buffer_toJson[minified=true]
    6,022,031 ns AndroidBenchmark.moshi_kotlin_codegen_buffer_fromJson[minified=true]
    7,483,907 ns AndroidBenchmark.moshi_kotlin_reflective_buffer_fromJson[minified=true]
    4,149,116 ns AndroidBenchmark.moshi_kotlin_codegen_buffer_toJson[minified=true]
    7,005,782 ns AndroidBenchmark.moshi_kotlin_codegen_string_fromJson[minified=true]
   17,243,439 ns AndroidBenchmark.jackson_kotlin_buffer_toJson[minified=true]
    8,432,917 ns AndroidBenchmark.moshi_kotlin_reflective_string_fromJson[minified=true]
    6,313,387 ns AndroidBenchmark.moshi_kotlin_reflective_buffer_toJson[minified=true]
    5,300,157 ns AndroidBenchmark.kserializer_string_fromJson[minified=true]
    9,869,115 ns AndroidBenchmark.jackson_string_toJson[minified=true]
    7,925,522 ns AndroidBenchmark.gson_autovalue_string_toJson[minified=true]
    5,814,479 ns AndroidBenchmark.moshi_reflective_string_toJson[minified=true]
    5,507,397 ns AndroidBenchmark.moshi_kotlin_codegen_string_toJson[minified=true]
    6,049,688 ns AndroidBenchmark.kserializer_string_toJson[minified=true]
    9,154,793 ns AndroidBenchmark.gson_reflective_string_toJson[minified=true]
    4,007,917 ns AndroidBenchmark.moshi_autovalue_buffer_toJson[minified=true]
    7,756,199 ns AndroidBenchmark.moshi_reflective_string_fromJson[minified=true]
Timed out waiting for process (dev.zacsweers.jsonserialization.android.test) to appear on google-pixel_3-89WX0J818.
    5,478,490 ns AndroidBenchmark.jackson_buffer_fromJson[minified=true]
   15,323,022 ns AndroidBenchmark.jackson_kotlin_string_toJson[minified=true]
    9,205,106 ns AndroidBenchmark.jackson_kotlin_buffer_fromJson[minified=true]
    4,249,636 ns AndroidBenchmark.jackson_string_fromJson[minified=true]
    7,741,354 ns AndroidBenchmark.moshi_kotlin_reflective_string_toJson[minified=true]
    7,978,177 ns AndroidBenchmark.jackson_kotlin_string_fromJson[minified=true]
    5,906,511 ns AndroidBenchmark.gson_autovalue_buffer_fromJson[minified=true]
    5,743,386 ns AndroidBenchmark.gson_reflective_string_fromJson[minified=false]
    4,818,647 ns AndroidBenchmark.gson_autovalue_string_fromJson[minified=false]
    7,954,168 ns AndroidBenchmark.moshi_autovalue_buffer_fromJson[minified=false]
    5,450,001 ns AndroidBenchmark.moshi_autovalue_string_toJson[minified=false]
    9,393,335 ns AndroidBenchmark.moshi_autovalue_string_fromJson[minified=false]
   10,073,544 ns AndroidBenchmark.jackson_buffer_toJson[minified=false]
  135,032,357 ns AndroidBenchmark.gson_autovalue_buffer_toJson[minified=false]
    8,091,615 ns AndroidBenchmark.moshi_kotlin_codegen_buffer_fromJson[minified=false]
    9,587,865 ns AndroidBenchmark.moshi_kotlin_reflective_buffer_fromJson[minified=false]
    4,024,012 ns AndroidBenchmark.moshi_kotlin_codegen_buffer_toJson[minified=false]
    9,467,136 ns AndroidBenchmark.moshi_kotlin_codegen_string_fromJson[minified=false]
   15,697,814 ns AndroidBenchmark.jackson_kotlin_buffer_toJson[minified=false]
   10,957,814 ns AndroidBenchmark.moshi_kotlin_reflective_string_fromJson[minified=false]
    6,399,532 ns AndroidBenchmark.moshi_kotlin_reflective_buffer_toJson[minified=false]
    6,012,397 ns AndroidBenchmark.kserializer_string_fromJson[minified=false]
    9,168,177 ns AndroidBenchmark.jackson_string_toJson[minified=false]
    7,953,074 ns AndroidBenchmark.gson_autovalue_string_toJson[minified=false]
    5,851,928 ns AndroidBenchmark.moshi_reflective_string_toJson[minified=false]
    5,428,802 ns AndroidBenchmark.moshi_kotlin_codegen_string_toJson[minified=false]
    6,080,574 ns AndroidBenchmark.kserializer_string_toJson[minified=false]
    9,179,793 ns AndroidBenchmark.gson_reflective_string_toJson[minified=false]
    3,945,521 ns AndroidBenchmark.moshi_autovalue_buffer_toJson[minified=false]
   10,199,011 ns AndroidBenchmark.moshi_reflective_string_fromJson[minified=false]
    6,353,700 ns AndroidBenchmark.jackson_buffer_fromJson[minified=false]
   14,057,918 ns AndroidBenchmark.jackson_kotlin_string_toJson[minified=false]
   10,350,626 ns AndroidBenchmark.jackson_kotlin_buffer_fromJson[minified=false]
    4,884,428 ns AndroidBenchmark.jackson_string_fromJson[minified=false]
    7,904,584 ns AndroidBenchmark.moshi_kotlin_reflective_string_toJson[minified=false]
    8,568,751 ns AndroidBenchmark.jackson_kotlin_string_fromJson[minified=false]
    6,683,281 ns AndroidBenchmark.gson_autovalue_buffer_fromJson[minified=false]

jzbrooks avatar Mar 09 '23 17:03 jzbrooks