From 80603446a363c3d7e00332877a092c1a9756e770 Mon Sep 17 00:00:00 2001 From: PJ Date: Thu, 11 Jun 2026 09:33:15 +0530 Subject: [PATCH] perf(sidecar): reuse a single Jackson ObjectMapper structuralHash, countRouteScreens, and hierarchy each built a fresh ObjectMapper per call inside the stability poll; the instance is thread-safe and meant to be reused. Hoist one shared val. --- .../kotlin/dev/sanderling/sidecar/DriverBackend.kt | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/sidecar/src/main/kotlin/dev/sanderling/sidecar/DriverBackend.kt b/sidecar/src/main/kotlin/dev/sanderling/sidecar/DriverBackend.kt index 583c200..ba1fa0e 100644 --- a/sidecar/src/main/kotlin/dev/sanderling/sidecar/DriverBackend.kt +++ b/sidecar/src/main/kotlin/dev/sanderling/sidecar/DriverBackend.kt @@ -117,11 +117,12 @@ private val ROUTE_TAG_KEYS = setOf( "accessibilityIdentifier", ) +private val jsonMapper = com.fasterxml.jackson.module.kotlin.jacksonObjectMapper() + internal fun countRouteScreens(treeJson: String): Int { if (treeJson.isBlank()) return 0 return try { - val mapper = com.fasterxml.jackson.module.kotlin.jacksonObjectMapper() - val root = mapper.readTree(treeJson) + val root = jsonMapper.readTree(treeJson) countRouteScreens(root) } catch (_: Exception) { 0 @@ -158,8 +159,7 @@ private fun countRouteScreens( internal fun structuralHash(treeJson: String): String { if (treeJson.isBlank()) return "" return try { - val mapper = com.fasterxml.jackson.module.kotlin.jacksonObjectMapper() - val root = mapper.readTree(treeJson) + val root = jsonMapper.readTree(treeJson) val builder = StringBuilder() walkForStructuralHash(root, builder) builder.toString() @@ -873,9 +873,7 @@ class MaestroDriverBackend(private val serial: String?) : DriverBackend { } override fun hierarchy(): String = - com.fasterxml.jackson.module.kotlin.jacksonObjectMapper().writeValueAsString( - driver.contentDescriptor(false), - ) + jsonMapper.writeValueAsString(driver.contentDescriptor(false)) override fun recentLogs(sinceUnixMillis: Long, minLevel: String) = readLogcat(serial, sinceUnixMillis, minLevel)