From 1aecd9cf454e4104bd58dc82ff289a3c77ece0c3 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Mon, 22 Apr 2024 11:16:17 -0400 Subject: [PATCH] Minimizes costs of keeping track of the number of events received per subscription --- .../amethyst/service/NostrDataSource.kt | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/NostrDataSource.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/NostrDataSource.kt index 186920d11..8e5314f85 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/NostrDataSource.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/NostrDataSource.kt @@ -43,9 +43,9 @@ abstract class NostrDataSource(val debugName: String) { private var subscriptions = mapOf() - data class Counter(var counter: Int) + data class Counter(val subscriptionId: String, val eventKind: Int, var counter: Int) - private var eventCounter = mapOf() + private var eventCounter = mapOf() var changingFilters = AtomicBoolean() private var active: Boolean = false @@ -54,11 +54,18 @@ abstract class NostrDataSource(val debugName: String) { eventCounter.forEach { Log.d( "STATE DUMP ${this.javaClass.simpleName}", - "Received Events ${it.key}: ${it.value.counter}", + "Received Events $debugName ${it.value.subscriptionId} ${it.value.eventKind}: ${it.value.counter}", ) } } + fun hashCodeFields( + str1: String, + str2: Int, + ): Int { + return 31 * str1.hashCode() + str2.hashCode() + } + private val clientListener = object : Client.Listener() { override fun onEvent( @@ -68,12 +75,12 @@ abstract class NostrDataSource(val debugName: String) { afterEOSE: Boolean, ) { if (subscriptions.containsKey(subscriptionId)) { - val key = "$debugName $subscriptionId ${event.kind}" - val keyValue = eventCounter.get(key) + val key = hashCodeFields(subscriptionId, event.kind) + val keyValue = eventCounter[key] if (keyValue != null) { keyValue.counter++ } else { - eventCounter = eventCounter + Pair(key, Counter(1)) + eventCounter = eventCounter + Pair(key, Counter(subscriptionId, event.kind, 1)) } // Log.d(this@NostrDataSource.javaClass.simpleName, "Relay ${relay.url}: ${event.kind}")