From 29063595e72826909801fb2be04f599cee3a4d5b Mon Sep 17 00:00:00 2001 From: darken Date: Mon, 18 Dec 2023 18:21:21 +0100 Subject: [PATCH] UI: Log the dashboard loading behavior Helps to narrow down causes if the dashboard is not loading. --- .../main/ui/dashboard/DashboardViewModel.kt | 51 +++++++++++++------ 1 file changed, 35 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/eu/darken/sdmse/main/ui/dashboard/DashboardViewModel.kt b/app/src/main/java/eu/darken/sdmse/main/ui/dashboard/DashboardViewModel.kt index 50150ff9a..ce0c0af40 100644 --- a/app/src/main/java/eu/darken/sdmse/main/ui/dashboard/DashboardViewModel.kt +++ b/app/src/main/java/eu/darken/sdmse/main/ui/dashboard/DashboardViewModel.kt @@ -296,23 +296,42 @@ class DashboardViewModel @Inject constructor( ) } + private var dashloadingStart = -1L + private var dashloadingEmitters = mutableMapOf() + private fun Flow.logDashEmitters(tag: String) = this + .onStart { + if (dashloadingEmitters.isEmpty()) dashloadingStart = System.currentTimeMillis() + dashloadingEmitters[tag] = this@logDashEmitters + } + .onEach { + dashloadingEmitters.remove(tag) + if (dashloadingEmitters.isEmpty() && dashloadingStart != -1L) { + val time = (System.currentTimeMillis() - dashloadingStart) + dashloadingStart = -1L + log(TAG, VERBOSE) { "Finished loading dashboard in ${time}ms" } + } else { + val keyCopy = dashloadingEmitters.keys.toList() + log(TAG, VERBOSE) { "Waiting for $keyCopy" } + } + } + private val listItemsInternal: Flow> = eu.darken.sdmse.common.flow.combine( - recorderModule.state, - debugCardProvider.create(this), - titleCardItem, - upgradeInfo, - updateInfo, - setupManager.state, - dataAreaItem, - corpseFinderItem, - systemCleanerItem, - appCleanerItem, - deduplicatorItem, - appControlItem, - analyzerItem, - schedulerItem, - motdItem, - refreshTrigger, + recorderModule.state.logDashEmitters("recorder"), + debugCardProvider.create(this).logDashEmitters("debug"), + titleCardItem.logDashEmitters("title"), + upgradeInfo.logDashEmitters("upgrade info"), + updateInfo.logDashEmitters("update info"), + setupManager.state.logDashEmitters("setup"), + dataAreaItem.logDashEmitters("datarea warning"), + corpseFinderItem.logDashEmitters("corpsefinder"), + systemCleanerItem.logDashEmitters("systemcleaner"), + appCleanerItem.logDashEmitters("appcleaner"), + deduplicatorItem.logDashEmitters("deduplicator"), + appControlItem.logDashEmitters("appcontrol"), + analyzerItem.logDashEmitters("analyzer"), + schedulerItem.logDashEmitters("scheduler"), + motdItem.logDashEmitters("motd"), + refreshTrigger.logDashEmitters("refreshtrigger"), ) { recorderState: RecorderModule.State, debugItem: DebugCardVH.Item?, titleInfo: TitleCardVH.Item,