Try fixing performance metrics (#6046)
We've detected outliers in the `Up-to-date room list` and `Open a room` transactions in Sentry. This commit tries to make sure we're starting/stopping the long running transactions when needed.
This commit is contained in:
parent
047849496b
commit
f7bfcedd57
4 changed files with 20 additions and 6 deletions
|
|
@ -214,6 +214,10 @@ class RoomFlowNode(
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
is NavTarget.JoinRoom -> {
|
is NavTarget.JoinRoom -> {
|
||||||
|
// Clear analytics transactions for opening a joined room, since we're display a non-joined one
|
||||||
|
analyticsService.removeLongRunningTransaction(LoadJoinedRoomFlow)
|
||||||
|
analyticsService.removeLongRunningTransaction(OpenRoom)
|
||||||
|
|
||||||
val inputs = JoinRoomEntryPoint.Inputs(
|
val inputs = JoinRoomEntryPoint.Inputs(
|
||||||
roomId = navTarget.roomId,
|
roomId = navTarget.roomId,
|
||||||
roomIdOrAlias = inputs.roomIdOrAlias,
|
roomIdOrAlias = inputs.roomIdOrAlias,
|
||||||
|
|
|
||||||
|
|
@ -41,6 +41,10 @@ import io.element.android.libraries.matrix.api.core.ThreadId
|
||||||
import io.element.android.libraries.matrix.api.room.JoinedRoom
|
import io.element.android.libraries.matrix.api.room.JoinedRoom
|
||||||
import io.element.android.libraries.matrix.ui.room.LoadingRoomState
|
import io.element.android.libraries.matrix.ui.room.LoadingRoomState
|
||||||
import io.element.android.libraries.matrix.ui.room.LoadingRoomStateFlowFactory
|
import io.element.android.libraries.matrix.ui.room.LoadingRoomStateFlowFactory
|
||||||
|
import io.element.android.services.analytics.api.AnalyticsLongRunningTransaction.LoadJoinedRoomFlow
|
||||||
|
import io.element.android.services.analytics.api.AnalyticsLongRunningTransaction.NotificationToMessage
|
||||||
|
import io.element.android.services.analytics.api.AnalyticsLongRunningTransaction.OpenRoom
|
||||||
|
import io.element.android.services.analytics.api.AnalyticsService
|
||||||
import kotlinx.coroutines.flow.distinctUntilChanged
|
import kotlinx.coroutines.flow.distinctUntilChanged
|
||||||
import kotlinx.coroutines.flow.launchIn
|
import kotlinx.coroutines.flow.launchIn
|
||||||
import kotlinx.coroutines.flow.map
|
import kotlinx.coroutines.flow.map
|
||||||
|
|
@ -53,6 +57,7 @@ class JoinedRoomFlowNode(
|
||||||
@Assisted val buildContext: BuildContext,
|
@Assisted val buildContext: BuildContext,
|
||||||
@Assisted plugins: List<Plugin>,
|
@Assisted plugins: List<Plugin>,
|
||||||
loadingRoomStateFlowFactory: LoadingRoomStateFlowFactory,
|
loadingRoomStateFlowFactory: LoadingRoomStateFlowFactory,
|
||||||
|
private val analyticsService: AnalyticsService,
|
||||||
) :
|
) :
|
||||||
BaseFlowNode<JoinedRoomFlowNode.NavTarget>(
|
BaseFlowNode<JoinedRoomFlowNode.NavTarget>(
|
||||||
backstack = BackStack(
|
backstack = BackStack(
|
||||||
|
|
@ -81,6 +86,11 @@ class JoinedRoomFlowNode(
|
||||||
|
|
||||||
override fun onBuilt() {
|
override fun onBuilt() {
|
||||||
super.onBuilt()
|
super.onBuilt()
|
||||||
|
|
||||||
|
val parentTransaction = analyticsService.getLongRunningTransaction(NotificationToMessage)
|
||||||
|
val openRoomTransaction = analyticsService.startLongRunningTransaction(OpenRoom, parentTransaction)
|
||||||
|
analyticsService.startLongRunningTransaction(LoadJoinedRoomFlow, openRoomTransaction)
|
||||||
|
|
||||||
loadingRoomStateStateFlow
|
loadingRoomStateStateFlow
|
||||||
.map {
|
.map {
|
||||||
it is LoadingRoomState.Loaded
|
it is LoadingRoomState.Loaded
|
||||||
|
|
|
||||||
|
|
@ -48,8 +48,6 @@ import io.element.android.libraries.matrix.api.core.UserId
|
||||||
import io.element.android.libraries.matrix.api.permalink.PermalinkData
|
import io.element.android.libraries.matrix.api.permalink.PermalinkData
|
||||||
import io.element.android.libraries.matrix.api.room.JoinedRoom
|
import io.element.android.libraries.matrix.api.room.JoinedRoom
|
||||||
import io.element.android.services.analytics.api.AnalyticsLongRunningTransaction.LoadJoinedRoomFlow
|
import io.element.android.services.analytics.api.AnalyticsLongRunningTransaction.LoadJoinedRoomFlow
|
||||||
import io.element.android.services.analytics.api.AnalyticsLongRunningTransaction.LoadMessagesUi
|
|
||||||
import io.element.android.services.analytics.api.AnalyticsLongRunningTransaction.OpenRoom
|
|
||||||
import io.element.android.services.analytics.api.AnalyticsService
|
import io.element.android.services.analytics.api.AnalyticsService
|
||||||
import io.element.android.services.analytics.api.finishLongRunningTransaction
|
import io.element.android.services.analytics.api.finishLongRunningTransaction
|
||||||
import io.element.android.services.appnavstate.api.ActiveRoomsHolder
|
import io.element.android.services.appnavstate.api.ActiveRoomsHolder
|
||||||
|
|
@ -106,8 +104,6 @@ class JoinedRoomLoadedFlowNode(
|
||||||
init {
|
init {
|
||||||
lifecycle.subscribe(
|
lifecycle.subscribe(
|
||||||
onCreate = {
|
onCreate = {
|
||||||
val parent = analyticsService.getLongRunningTransaction(OpenRoom)
|
|
||||||
analyticsService.startLongRunningTransaction(LoadMessagesUi, parent)
|
|
||||||
Timber.v("OnCreate => ${inputs.room.roomId}")
|
Timber.v("OnCreate => ${inputs.room.roomId}")
|
||||||
appNavigationStateService.onNavigateToRoom(id, inputs.room.roomId)
|
appNavigationStateService.onNavigateToRoom(id, inputs.room.roomId)
|
||||||
activeRoomsHolder.addRoom(inputs.room)
|
activeRoomsHolder.addRoom(inputs.room)
|
||||||
|
|
|
||||||
|
|
@ -46,13 +46,17 @@ class DefaultAnalyticsRoomListStateWatcher(
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val longRunningTransaction = AnalyticsLongRunningTransaction.CatchUp
|
||||||
|
|
||||||
appNavigationStateService.appNavigationState
|
appNavigationStateService.appNavigationState
|
||||||
.map { it.isInForeground }
|
.map { it.isInForeground }
|
||||||
.distinctUntilChanged()
|
.distinctUntilChanged()
|
||||||
.withPreviousValue()
|
.withPreviousValue()
|
||||||
.onEach { (wasInForeground, isInForeground) ->
|
.onEach { (wasInForeground, isInForeground) ->
|
||||||
if (isInForeground && roomListService.state.value != RoomListService.State.Running) {
|
if (isInForeground && roomListService.state.value != RoomListService.State.Running) {
|
||||||
analyticsService.startLongRunningTransaction(AnalyticsLongRunningTransaction.CatchUp)
|
analyticsService.startLongRunningTransaction(longRunningTransaction)
|
||||||
|
} else if (!isInForeground) {
|
||||||
|
analyticsService.removeLongRunningTransaction(longRunningTransaction)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (wasInForeground == false && isInForeground) {
|
if (wasInForeground == false && isInForeground) {
|
||||||
|
|
@ -64,7 +68,7 @@ class DefaultAnalyticsRoomListStateWatcher(
|
||||||
roomListService.state
|
roomListService.state
|
||||||
.onEach { state ->
|
.onEach { state ->
|
||||||
if (state == RoomListService.State.Running && isWarmState.get()) {
|
if (state == RoomListService.State.Running && isWarmState.get()) {
|
||||||
analyticsService.finishLongRunningTransaction(AnalyticsLongRunningTransaction.CatchUp)
|
analyticsService.finishLongRunningTransaction(longRunningTransaction)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.launchIn(coroutineScope)
|
.launchIn(coroutineScope)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue