allow toggling off system monitoring in settings to minimize (0.1%) CPU usage

This commit is contained in:
Egor 2025-09-25 13:54:01 -07:00
parent 4176140b57
commit eaf4a04ce1
3 changed files with 70 additions and 27 deletions

View file

@ -20,43 +20,52 @@ export const StatusBar = ({ maxDataPoints = 60 }: StatusBarProps) => {
null null
); );
const [gpuMetrics, setGpuMetrics] = useState<GpuMetrics | null>(null); const [gpuMetrics, setGpuMetrics] = useState<GpuMetrics | null>(null);
const { resolvedColorScheme: colorScheme } = usePreferencesStore(); const { resolvedColorScheme: colorScheme, systemMonitoringEnabled } =
usePreferencesStore();
const { isVisible, setVisible } = useNotepadStore(); const { isVisible, setVisible } = useNotepadStore();
useEffect(() => { useEffect(() => {
let isMounted = true; let isMounted = true;
let cleanupCpu: (() => void) | undefined;
let cleanupMemory: (() => void) | undefined;
let cleanupGpu: (() => void) | undefined;
let stopMonitoring: (() => void) | undefined;
const handleCpuMetrics = (metrics: CpuMetrics) => { if (systemMonitoringEnabled) {
if (!isMounted) return; const handleCpuMetrics = (metrics: CpuMetrics) => {
setCpuMetrics(metrics); if (!isMounted) return;
}; setCpuMetrics(metrics);
};
const handleMemoryMetrics = (metrics: MemoryMetrics) => { const handleMemoryMetrics = (metrics: MemoryMetrics) => {
if (!isMounted) return; if (!isMounted) return;
setMemoryMetrics(metrics); setMemoryMetrics(metrics);
}; };
const handleGpuMetrics = (metrics: GpuMetrics) => { const handleGpuMetrics = (metrics: GpuMetrics) => {
if (!isMounted) return; if (!isMounted) return;
setGpuMetrics(metrics); setGpuMetrics(metrics);
}; };
const cleanupCpu = cleanupCpu = window.electronAPI.monitoring.onCpuMetrics(handleCpuMetrics);
window.electronAPI.monitoring.onCpuMetrics(handleCpuMetrics); cleanupMemory =
const cleanupMemory = window.electronAPI.monitoring.onMemoryMetrics(handleMemoryMetrics);
window.electronAPI.monitoring.onMemoryMetrics(handleMemoryMetrics); cleanupGpu = window.electronAPI.monitoring.onGpuMetrics(handleGpuMetrics);
const cleanupGpu = stopMonitoring = window.electronAPI.monitoring.start();
window.electronAPI.monitoring.onGpuMetrics(handleGpuMetrics); } else {
const stopMonitoring = window.electronAPI.monitoring.start(); setCpuMetrics(null);
setMemoryMetrics(null);
setGpuMetrics(null);
}
return () => { return () => {
isMounted = false; isMounted = false;
cleanupCpu(); cleanupCpu?.();
cleanupMemory(); cleanupMemory?.();
cleanupGpu(); cleanupGpu?.();
stopMonitoring(); stopMonitoring?.();
}; };
}, [maxDataPoints]); }, [maxDataPoints, systemMonitoringEnabled]);
return ( return (
<AppShell.Footer <AppShell.Footer

View file

@ -8,6 +8,7 @@ import {
rem, rem,
Box, Box,
Anchor, Anchor,
Switch,
} from '@mantine/core'; } from '@mantine/core';
import { Folder, FolderOpen, Monitor, ExternalLink } from 'lucide-react'; import { Folder, FolderOpen, Monitor, ExternalLink } from 'lucide-react';
import type { FrontendPreference } from '@/types'; import type { FrontendPreference } from '@/types';
@ -37,7 +38,12 @@ export const GeneralTab = ({
isOnInterfaceScreen = false, isOnInterfaceScreen = false,
}: GeneralTabProps) => { }: GeneralTabProps) => {
const [installDir, setInstallDir] = useState(''); const [installDir, setInstallDir] = useState('');
const { frontendPreference, setFrontendPreference } = usePreferencesStore(); const {
frontendPreference,
setFrontendPreference,
systemMonitoringEnabled,
setSystemMonitoringEnabled,
} = usePreferencesStore();
const [frontendRequirements, setFrontendRequirements] = useState< const [frontendRequirements, setFrontendRequirements] = useState<
Map<string, boolean> Map<string, boolean>
>(new Map()); >(new Map());
@ -330,6 +336,22 @@ export const GeneralTab = ({
})()} })()}
</Box> </Box>
</div> </div>
<div>
<Text fw={500} mb="sm">
System Performance
</Text>
<Text size="sm" c="dimmed" mb="md">
Monitor CPU, memory, and GPU usage in the status bar
</Text>
<Switch
label="Show system metrics"
checked={systemMonitoringEnabled}
onChange={(event) =>
setSystemMonitoringEnabled(event.currentTarget.checked)
}
/>
</div>
</Stack> </Stack>
); );
}; };

View file

@ -8,9 +8,11 @@ interface PreferencesStore {
frontendPreference: FrontendPreference; frontendPreference: FrontendPreference;
rawColorScheme: MantineColorScheme; rawColorScheme: MantineColorScheme;
resolvedColorScheme: ResolvedColorScheme; resolvedColorScheme: ResolvedColorScheme;
systemMonitoringEnabled: boolean;
setFrontendPreference: (preference: FrontendPreference) => void; setFrontendPreference: (preference: FrontendPreference) => void;
setColorScheme: (scheme: MantineColorScheme) => Promise<void>; setColorScheme: (scheme: MantineColorScheme) => Promise<void>;
setSystemMonitoringEnabled: (enabled: boolean) => void;
loadPreferences: () => Promise<void>; loadPreferences: () => Promise<void>;
} }
@ -27,12 +29,18 @@ export const usePreferencesStore = create<PreferencesStore>((set) => ({
frontendPreference: 'koboldcpp', frontendPreference: 'koboldcpp',
rawColorScheme: 'auto', rawColorScheme: 'auto',
resolvedColorScheme: 'light', resolvedColorScheme: 'light',
systemMonitoringEnabled: true,
setFrontendPreference: (preference: FrontendPreference) => { setFrontendPreference: (preference: FrontendPreference) => {
set({ frontendPreference: preference }); set({ frontendPreference: preference });
window.electronAPI.config.set('frontendPreference', preference); window.electronAPI.config.set('frontendPreference', preference);
}, },
setSystemMonitoringEnabled: (enabled: boolean) => {
set({ systemMonitoringEnabled: enabled });
window.electronAPI.config.set('systemMonitoringEnabled', enabled);
},
setColorScheme: async (scheme: MantineColorScheme) => { setColorScheme: async (scheme: MantineColorScheme) => {
set({ set({
rawColorScheme: scheme, rawColorScheme: scheme,
@ -42,17 +50,21 @@ export const usePreferencesStore = create<PreferencesStore>((set) => ({
}, },
loadPreferences: async () => { loadPreferences: async () => {
const [frontendPref, colorScheme] = await Promise.all([ const [frontendPref, colorScheme, systemMonitoring] = await Promise.all([
window.electronAPI.config.get( window.electronAPI.config.get(
'frontendPreference' 'frontendPreference'
) as Promise<FrontendPreference>, ) as Promise<FrontendPreference>,
window.electronAPI.app.getColorScheme(), window.electronAPI.app.getColorScheme(),
window.electronAPI.config.get(
'systemMonitoringEnabled'
) as Promise<boolean>,
]); ]);
set({ set({
frontendPreference: frontendPref || 'koboldcpp', frontendPreference: frontendPref || 'koboldcpp',
rawColorScheme: colorScheme || 'auto', rawColorScheme: colorScheme || 'auto',
resolvedColorScheme: resolveColorScheme(colorScheme || 'auto'), resolvedColorScheme: resolveColorScheme(colorScheme || 'auto'),
systemMonitoringEnabled: systemMonitoring ?? true,
}); });
}, },
})); }));