Have long running analytic transactions return actual transactions.

Also add `AnalyticsService.getLongRunningTransaction` and change `AnalyticsService.stopLongRunningTransaction` to `removeLongRunningTransaction`.
This commit is contained in:
Jorge Martín
2025-11-19 17:24:35 +01:00
committed by Jorge Martin Espinosa
parent d6adf93906
commit 766c23721e
5 changed files with 40 additions and 11 deletions

View File

@@ -73,7 +73,7 @@ internal class RoomListFactory(
initialFilterKind = RoomListEntriesDynamicFilterKind.All(ROOM_LIST_RUST_FILTERS), initialFilterKind = RoomListEntriesDynamicFilterKind.All(ROOM_LIST_RUST_FILTERS),
).onEach { update -> ).onEach { update ->
if (!firstRoomsTransaction.isFinished()) { if (!firstRoomsTransaction.isFinished()) {
analyticsService.stopLongRunningTransaction(AnalyticsLongRunningTransaction.FirstRoomsDisplayed) analyticsService.removeLongRunningTransaction(AnalyticsLongRunningTransaction.FirstRoomsDisplayed)?.finish()
firstRoomsTransaction.finish() firstRoomsTransaction.finish()
} }
processor.postUpdate(update) processor.postUpdate(update)

View File

@@ -55,9 +55,20 @@ interface AnalyticsService : AnalyticsTracker, ErrorTracker {
*/ */
fun startTransaction(name: String, operation: String? = null): AnalyticsTransaction fun startTransaction(name: String, operation: String? = null): AnalyticsTransaction
fun startLongRunningTransaction(longRunningTransaction: AnalyticsLongRunningTransaction) /**
* Starts an [AnalyticsLongRunningTransaction], that can be shared with other components.
*/
fun startLongRunningTransaction(longRunningTransaction: AnalyticsLongRunningTransaction): AnalyticsTransaction
fun stopLongRunningTransaction(longRunningTransaction: AnalyticsLongRunningTransaction) /**
* Gets an ongoing [AnalyticsLongRunningTransaction], if it exists.
*/
fun getLongRunningTransaction(longRunningTransaction: AnalyticsLongRunningTransaction): AnalyticsTransaction?
/**
* Removes an ongoing [AnalyticsLongRunningTransaction] so it's no longer shared.
*/
fun removeLongRunningTransaction(longRunningTransaction: AnalyticsLongRunningTransaction): AnalyticsTransaction?
} }
inline fun <T> AnalyticsService.recordTransaction(name: String, operation: String, block: (AnalyticsTransaction) -> T): T { inline fun <T> AnalyticsService.recordTransaction(name: String, operation: String, block: (AnalyticsTransaction) -> T): T {

View File

@@ -153,11 +153,17 @@ class DefaultAnalyticsService(
} ?: NoopAnalyticsTransaction } ?: NoopAnalyticsTransaction
} }
override fun startLongRunningTransaction(longRunningTransaction: AnalyticsLongRunningTransaction) { override fun startLongRunningTransaction(longRunningTransaction: AnalyticsLongRunningTransaction): AnalyticsTransaction {
pendingLongRunningTransactions[longRunningTransaction] = startTransaction(longRunningTransaction.name, longRunningTransaction.operation) val transaction = startTransaction(longRunningTransaction.name, longRunningTransaction.operation)
pendingLongRunningTransactions[longRunningTransaction] = transaction
return transaction
} }
override fun stopLongRunningTransaction(longRunningTransaction: AnalyticsLongRunningTransaction) { override fun getLongRunningTransaction(longRunningTransaction: AnalyticsLongRunningTransaction): AnalyticsTransaction? {
pendingLongRunningTransactions.remove(longRunningTransaction)?.finish() return pendingLongRunningTransactions[longRunningTransaction]
}
override fun removeLongRunningTransaction(longRunningTransaction: AnalyticsLongRunningTransaction): AnalyticsTransaction? {
return pendingLongRunningTransactions.remove(longRunningTransaction)
} }
} }

View File

@@ -39,6 +39,7 @@ class NoopAnalyticsService : AnalyticsService {
override fun trackError(throwable: Throwable) = Unit override fun trackError(throwable: Throwable) = Unit
override fun updateSuperProperties(updatedProperties: SuperProperties) = Unit override fun updateSuperProperties(updatedProperties: SuperProperties) = Unit
override fun startTransaction(name: String, operation: String?): AnalyticsTransaction = NoopAnalyticsTransaction override fun startTransaction(name: String, operation: String?): AnalyticsTransaction = NoopAnalyticsTransaction
override fun startLongRunningTransaction(longRunningTransaction: AnalyticsLongRunningTransaction) {} override fun startLongRunningTransaction(longRunningTransaction: AnalyticsLongRunningTransaction): AnalyticsTransaction = NoopAnalyticsTransaction
override fun stopLongRunningTransaction(longRunningTransaction: AnalyticsLongRunningTransaction) {} override fun getLongRunningTransaction(longRunningTransaction: AnalyticsLongRunningTransaction): AnalyticsTransaction? = null
override fun removeLongRunningTransaction(longRunningTransaction: AnalyticsLongRunningTransaction) = NoopAnalyticsTransaction
} }

View File

@@ -31,6 +31,7 @@ class FakeAnalyticsService(
val screenEvents = mutableListOf<VectorAnalyticsScreen>() val screenEvents = mutableListOf<VectorAnalyticsScreen>()
val trackedErrors = mutableListOf<Throwable>() val trackedErrors = mutableListOf<Throwable>()
val capturedUserProperties = mutableListOf<UserProperties>() val capturedUserProperties = mutableListOf<UserProperties>()
val longRunningTransactions = mutableMapOf<AnalyticsLongRunningTransaction, AnalyticsTransaction>()
override fun getAvailableAnalyticsProviders(): Set<AnalyticsProvider> = emptySet() override fun getAvailableAnalyticsProviders(): Set<AnalyticsProvider> = emptySet()
@@ -70,6 +71,16 @@ class FakeAnalyticsService(
} }
override fun startTransaction(name: String, operation: String?): AnalyticsTransaction = NoopAnalyticsTransaction override fun startTransaction(name: String, operation: String?): AnalyticsTransaction = NoopAnalyticsTransaction
override fun startLongRunningTransaction(longRunningTransaction: AnalyticsLongRunningTransaction) {} override fun startLongRunningTransaction(longRunningTransaction: AnalyticsLongRunningTransaction): AnalyticsTransaction {
override fun stopLongRunningTransaction(longRunningTransaction: AnalyticsLongRunningTransaction) {} longRunningTransactions[longRunningTransaction] = NoopAnalyticsTransaction
return NoopAnalyticsTransaction
}
override fun getLongRunningTransaction(longRunningTransaction: AnalyticsLongRunningTransaction): AnalyticsTransaction? {
return longRunningTransactions[longRunningTransaction]
}
override fun removeLongRunningTransaction(longRunningTransaction: AnalyticsLongRunningTransaction): AnalyticsTransaction? {
return longRunningTransactions.remove(longRunningTransaction)
}
} }