bugfix: fix the malfunctioning monitoring switch

This commit is contained in:
Han Yin 2025-08-29 10:10:12 -07:00
parent ba6528e59e
commit 99d77b618a
4 changed files with 37 additions and 38 deletions

View File

@ -98,6 +98,7 @@ fun AppContent(
val engineState by mainViewModel.engineState.collectAsState()
// Metric states for scaffolds
val isMonitoringEnabled by settingsViewModel.isMonitoringEnabled.collectAsState()
val memoryUsage by settingsViewModel.memoryUsage.collectAsState()
val temperatureInfo by settingsViewModel.temperatureMetrics.collectAsState()
val useFahrenheit by settingsViewModel.useFahrenheitUnit.collectAsState()
@ -251,7 +252,7 @@ fun AppContent(
navigationIcon = NavigationIcon.Back {
modelLoadingViewModel.onBackPressed { navigationActions.navigateUp() }
},
memoryMetrics = memoryUsage,
memoryMetrics = if (isMonitoringEnabled) memoryUsage else null,
temperatureInfo = null
)
)
@ -268,8 +269,8 @@ fun AppContent(
navigationIcon = NavigationIcon.Back {
benchmarkViewModel.onBackPressed { navigationActions.navigateUp() }
},
memoryMetrics = memoryUsage,
temperatureInfo = Pair(temperatureInfo, useFahrenheit)
memoryMetrics = if (isMonitoringEnabled) memoryUsage else null,
temperatureInfo = if (isMonitoringEnabled) Pair(temperatureInfo, useFahrenheit) else null
),
bottomBarConfig = BottomBarConfig.Benchmark(
engineIdle = !engineState.isUninterruptible,
@ -314,8 +315,8 @@ fun AppContent(
navigationIcon = NavigationIcon.Back {
conversationViewModel.onBackPressed { navigationActions.navigateUp() }
},
memoryMetrics = memoryUsage,
temperatureInfo = Pair(temperatureInfo, useFahrenheit)
memoryMetrics = if (isMonitoringEnabled) memoryUsage else null,
temperatureInfo = if (isMonitoringEnabled) Pair(temperatureInfo, useFahrenheit) else null,
),
bottomBarConfig = BottomBarConfig.Conversation(
isEnabled = !modelThinkingOrSpeaking,
@ -402,7 +403,7 @@ fun AppContent(
topBarConfig = TopBarConfig.Storage(
title = "Models Management",
navigationIcon = NavigationIcon.Back { navigationActions.navigateUp() },
storageMetrics = storageMetrics
storageMetrics = if (isMonitoringEnabled) storageMetrics else null,
),
bottomBarConfig = bottomBarConfig
)

View File

@ -30,7 +30,7 @@ import java.util.Locale
@Composable
fun PerformanceTopBar(
title: String,
memoryMetrics: MemoryMetrics,
memoryMetrics: MemoryMetrics?,
temperatureDisplay: Pair<TemperatureMetrics, Boolean>?,
onNavigateBack: (() -> Unit)? = null,
onMenuOpen: (() -> Unit)? = null,
@ -70,7 +70,9 @@ fun PerformanceTopBar(
}
// Memory indicator
MemoryIndicator(memoryUsage = memoryMetrics)
memoryMetrics?.let {
MemoryIndicator(memoryUsage = it)
}
},
colors = TopAppBarDefaults.topAppBarColors(
containerColor = MaterialTheme.colorScheme.surface,

View File

@ -27,7 +27,7 @@ sealed class TopBarConfig {
data class Performance(
override val title: String,
override val navigationIcon: NavigationIcon,
val memoryMetrics: MemoryMetrics,
val memoryMetrics: MemoryMetrics?,
val temperatureInfo: Pair<TemperatureMetrics, Boolean>?,
) : TopBarConfig()

View File

@ -13,6 +13,7 @@ import com.example.llama.monitoring.StorageMetrics
import com.example.llama.monitoring.TemperatureMetrics
import com.example.llama.monitoring.TemperatureWarningLevel
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.Job
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow
@ -87,30 +88,34 @@ class SettingsViewModel @Inject constructor(
/**
* Starts monitoring device performance.
*/
private var monitoringJob: Job? = null
private fun startMonitoring() {
val interval = _monitoringInterval.value
monitoringJob?.cancel()
viewModelScope.launch {
modelRepository.getStorageMetrics().collect { metrics ->
_storageMetrics.value = metrics
launch {
modelRepository.getStorageMetrics().collect { metrics ->
_storageMetrics.value = metrics
}
}
}
viewModelScope.launch {
performanceMonitor.monitorMemoryUsage(interval).collect { metrics ->
_memoryUsage.value = metrics
launch {
performanceMonitor.monitorMemoryUsage(interval).collect { metrics ->
_memoryUsage.value = metrics
}
}
}
viewModelScope.launch {
performanceMonitor.monitorBattery(interval * 2).collect { metrics ->
_batteryInfo.value = metrics
launch {
performanceMonitor.monitorBattery(interval * 2).collect { metrics ->
_batteryInfo.value = metrics
}
}
}
viewModelScope.launch {
performanceMonitor.monitorTemperature(interval * 2).collect { metrics ->
_temperatureMetrics.value = metrics
launch {
performanceMonitor.monitorTemperature(interval * 2).collect { metrics ->
_temperatureMetrics.value = metrics
}
}
}
}
@ -120,12 +125,11 @@ class SettingsViewModel @Inject constructor(
*/
fun setMonitoringEnabled(enabled: Boolean) {
viewModelScope.launch {
userPreferences.setPerformanceMonitoringEnabled(enabled)
_isMonitoringEnabled.value = enabled
if (enabled && !isMonitoringActive()) {
if (enabled && !_isMonitoringEnabled.value) {
startMonitoring()
}
_isMonitoringEnabled.value = enabled
userPreferences.setPerformanceMonitoringEnabled(enabled)
}
}
@ -144,23 +148,15 @@ class SettingsViewModel @Inject constructor(
*/
fun setMonitoringInterval(intervalMs: Long) {
viewModelScope.launch {
userPreferences.setMonitoringInterval(intervalMs)
_monitoringInterval.value = intervalMs
// Restart monitoring with new interval if active
if (isMonitoringActive()) {
if (_isMonitoringEnabled.value) {
startMonitoring()
}
userPreferences.setMonitoringInterval(intervalMs)
_monitoringInterval.value = intervalMs
}
}
/**
* Checks if monitoring is currently active.
*/
private fun isMonitoringActive(): Boolean {
return _isMonitoringEnabled.value
}
/**
* Sets the theme mode.
*/