Skip to content

Instantly share code, notes, and snippets.

@damien5314
Created September 18, 2017 19:23
Show Gist options
  • Save damien5314/4cf3c4f87ecc6fd56b1a3235e3f658c4 to your computer and use it in GitHub Desktop.
Save damien5314/4cf3c4f87ecc6fd56b1a3235e3f658c4 to your computer and use it in GitHub Desktop.
Jackson performance testing
package com.quizlet.perf
import com.fasterxml.jackson.databind.ObjectMapper
import com.quizlet.android.logging.ConsoleLogger
import com.quizlet.android.logging.ConsoleLoggingTree
import org.junit.After
import org.junit.Before
import org.junit.Test
import timber.log.Timber
class JacksonTests {
@Before
fun setUp() {
Timber.plant(ConsoleLoggingTree(ConsoleLogger()))
}
@After
fun tearDown() {
Timber.uprootAll()
}
@Test
fun objectMapper_create() {
val tracker = PerfTracker().get("objectMapper")
val iterations = 100000
for (i in 1..iterations) {
tracker.measure {
// Just creating an object
val mapper = ObjectMapper()
}
}
Timber.d("iterations: $iterations")
Timber.d("total (ns): ${tracker.totalTimeNs}")
Timber.d("ns/iterations: ${tracker.timePerIterationNs}")
}
@Test
fun objectReader_create_noCache() {
val tracker = PerfTracker().get("objectReader")
val iterations = 20
for (i in 1..iterations) {
val mapper = ObjectMapper()
tracker.measure {
val start = System.nanoTime()
val reader = mapper.readerFor(RandomData::class.java)
val duration = System.nanoTime() - start
Timber.d("iteration took $duration ns")
}
}
Timber.d("iterations: $iterations")
Timber.d("total (ns): ${tracker.totalTimeNs}")
Timber.d("ns/iterations: ${tracker.timePerIterationNs}")
}
@Test
fun objectReader_create_cache() {
val tracker = PerfTracker().get("objectReader")
val iterations = 20
val mapper = ObjectMapper()
for (i in 1..iterations) {
tracker.measure {
val start = System.nanoTime()
val reader = mapper.readerFor(RandomData::class.java)
val duration = System.nanoTime() - start
Timber.d("iteration took $duration ns")
}
}
Timber.d("iterations: $iterations")
Timber.d("total (ns): ${tracker.totalTimeNs}")
Timber.d("ns/iterations: ${tracker.timePerIterationNs}")
}
@Test
fun objectWriter_create_noCache() {
val tracker = PerfTracker().get("objectWriter")
val iterations = 20
for (i in 1..iterations) {
val mapper = ObjectMapper()
tracker.measure {
val start = System.nanoTime()
val writer = mapper.writerFor(RandomData::class.java)
val duration = System.nanoTime() - start
Timber.d("iteration took $duration ns")
}
}
Timber.d("iterations: $iterations")
Timber.d("total (ns): ${tracker.totalTimeNs}")
Timber.d("ns/iterations: ${tracker.timePerIterationNs}")
}
@Test
fun objectWriter_create_cache() {
val tracker = PerfTracker().get("objectWriter")
val iterations = 20
val mapper = ObjectMapper()
for (i in 1..iterations) {
tracker.measure {
val start = System.nanoTime()
val writer = mapper.writerFor(RandomData::class.java)
val duration = System.nanoTime() - start
Timber.d("iteration took $duration ns")
}
}
Timber.d("iterations: $iterations")
Timber.d("total (ns): ${tracker.totalTimeNs}")
Timber.d("ns/iterations: ${tracker.timePerIterationNs}")
}
private data class RandomData(
val num: Int,
val string: String,
val bool: Boolean
)
}
package com.quizlet.perf
class PerfTracker {
private val trackers = HashMap<String, PerfData>()
fun get(key: String) = trackers.getOrDefault(key, PerfData())
class PerfData {
private var iterations: Int = 0
private var timeTakenNs: Long = 0L
val totalTimeNs: Long
get() = timeTakenNs
val timePerIterationNs: Long
get() = totalTimeNs / iterations
fun measure(f: () -> Unit) {
val _startTimeNs = System.nanoTime()
f()
val durationNs = System.nanoTime() - _startTimeNs
timeTakenNs += durationNs
iterations++
}
}
}
@damien5314
Copy link
Author

com.quizlet.perf.JacksonTests#objectMapper_create

JacksonTests: iterations: 100000
JacksonTests: total (ns): 461418647
JacksonTests: ns/iterations: 4 614

com.quizlet.perf.JacksonTests#objectReader_create_cache

JacksonTests$objectReader_create_cache: iteration took 443426 ns
JacksonTests$objectReader_create_cache: iteration took 5429 ns
JacksonTests$objectReader_create_cache: iteration took 4429 ns
JacksonTests$objectReader_create_cache: iteration took 2494 ns
JacksonTests$objectReader_create_cache: iteration took 2291 ns
JacksonTests$objectReader_create_cache: iteration took 2871 ns
JacksonTests$objectReader_create_cache: iteration took 2759 ns
JacksonTests$objectReader_create_cache: iteration took 30883 ns
JacksonTests$objectReader_create_cache: iteration took 2620 ns
JacksonTests$objectReader_create_cache: iteration took 2413 ns
JacksonTests$objectReader_create_cache: iteration took 2339 ns
JacksonTests$objectReader_create_cache: iteration took 3021 ns
JacksonTests$objectReader_create_cache: iteration took 5627 ns
JacksonTests$objectReader_create_cache: iteration took 4797 ns
JacksonTests$objectReader_create_cache: iteration took 3574 ns
JacksonTests$objectReader_create_cache: iteration took 2618 ns
JacksonTests$objectReader_create_cache: iteration took 2552 ns
JacksonTests$objectReader_create_cache: iteration took 2673 ns
JacksonTests$objectReader_create_cache: iteration took 5940 ns
JacksonTests$objectReader_create_cache: iteration took 6515 ns
JacksonTests: iterations: 20
JacksonTests: total (ns): 2479643
JacksonTests: ns/iterations: 123 982

JacksonTests.objectReader_create_noCache

JacksonTests$objectReader_create_noCache: iteration took 28112173 ns
JacksonTests$objectReader_create_noCache: iteration took 472485 ns
JacksonTests$objectReader_create_noCache: iteration took 345464 ns
JacksonTests$objectReader_create_noCache: iteration took 397289 ns
JacksonTests$objectReader_create_noCache: iteration took 347333 ns
JacksonTests$objectReader_create_noCache: iteration took 361518 ns
JacksonTests$objectReader_create_noCache: iteration took 346521 ns
JacksonTests$objectReader_create_noCache: iteration took 338282 ns
JacksonTests$objectReader_create_noCache: iteration took 337279 ns
JacksonTests$objectReader_create_noCache: iteration took 542459 ns
JacksonTests$objectReader_create_noCache: iteration took 562810 ns
JacksonTests$objectReader_create_noCache: iteration took 456051 ns
JacksonTests$objectReader_create_noCache: iteration took 307892 ns
JacksonTests$objectReader_create_noCache: iteration took 318126 ns
JacksonTests$objectReader_create_noCache: iteration took 299101 ns
JacksonTests$objectReader_create_noCache: iteration took 308309 ns
JacksonTests$objectReader_create_noCache: iteration took 465028 ns
JacksonTests$objectReader_create_noCache: iteration took 448919 ns
JacksonTests$objectReader_create_noCache: iteration took 516202 ns
JacksonTests$objectReader_create_noCache: iteration took 534797 ns
JacksonTests: iterations: 20
JacksonTests: total (ns): 37727817
JacksonTests: ns/iterations: 1 886 390

JacksonTests.objectWriter_create_cache

JacksonTests$objectWriter_create_cache: iteration took 457013 ns
JacksonTests$objectWriter_create_cache: iteration took 104618 ns
JacksonTests$objectWriter_create_cache: iteration took 7962 ns
JacksonTests$objectWriter_create_cache: iteration took 7091 ns
JacksonTests$objectWriter_create_cache: iteration took 6721 ns
JacksonTests$objectWriter_create_cache: iteration took 6622 ns
JacksonTests$objectWriter_create_cache: iteration took 6850 ns
JacksonTests$objectWriter_create_cache: iteration took 12385 ns
JacksonTests$objectWriter_create_cache: iteration took 23029 ns
JacksonTests$objectWriter_create_cache: iteration took 6946 ns
JacksonTests$objectWriter_create_cache: iteration took 6294 ns
JacksonTests$objectWriter_create_cache: iteration took 6129 ns
JacksonTests$objectWriter_create_cache: iteration took 6138 ns
JacksonTests$objectWriter_create_cache: iteration took 12246 ns
JacksonTests$objectWriter_create_cache: iteration took 6676 ns
JacksonTests$objectWriter_create_cache: iteration took 6604 ns
JacksonTests$objectWriter_create_cache: iteration took 16788 ns
JacksonTests$objectWriter_create_cache: iteration took 7206 ns
JacksonTests$objectWriter_create_cache: iteration took 6809 ns
JacksonTests$objectWriter_create_cache: iteration took 10566 ns
JacksonTests: iterations: 20
JacksonTests: total (ns): 2564218
JacksonTests: ns/iterations: 128 210

JacksonTests.objectWriter_create_noCache

JacksonTests$objectWriter_create_noCache: iteration took 36200220 ns
JacksonTests$objectWriter_create_noCache: iteration took 525725 ns
JacksonTests$objectWriter_create_noCache: iteration took 381641 ns
JacksonTests$objectWriter_create_noCache: iteration took 434146 ns
JacksonTests$objectWriter_create_noCache: iteration took 464153 ns
JacksonTests$objectWriter_create_noCache: iteration took 369288 ns
JacksonTests$objectWriter_create_noCache: iteration took 436079 ns
JacksonTests$objectWriter_create_noCache: iteration took 602989 ns
JacksonTests$objectWriter_create_noCache: iteration took 520930 ns
JacksonTests$objectWriter_create_noCache: iteration took 421863 ns
JacksonTests$objectWriter_create_noCache: iteration took 430349 ns
JacksonTests$objectWriter_create_noCache: iteration took 424734 ns
JacksonTests$objectWriter_create_noCache: iteration took 371795 ns
JacksonTests$objectWriter_create_noCache: iteration took 300489 ns
JacksonTests$objectWriter_create_noCache: iteration took 345355 ns
JacksonTests$objectWriter_create_noCache: iteration took 333032 ns
JacksonTests$objectWriter_create_noCache: iteration took 390103 ns
JacksonTests$objectWriter_create_noCache: iteration took 378130 ns
JacksonTests$objectWriter_create_noCache: iteration took 965698 ns
JacksonTests$objectWriter_create_noCache: iteration took 1247353 ns
JacksonTests: iterations: 20
JacksonTests: total (ns): 48213739
JacksonTests: ns/iterations: 2 410 686

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment