@@ -25,6 +25,7 @@ export class SystemMonitor {
2525 private static lastUpdateTime = 0 ;
2626 private static isUpdating = false ;
2727 private static lastSystemData : any = null ;
28+ private readonly statusBarInstances : StatusBarItems [ ] = [ ] ;
2829
2930 constructor (
3031 private readonly statusBarManager : StatusBarManager ,
@@ -33,39 +34,53 @@ export class SystemMonitor {
3334 SystemMonitor . activeMonitors . add ( this ) ;
3435 }
3536
37+ public addStatusBarInstance ( statusBarItems : StatusBarItems ) : void {
38+ if ( ! this . statusBarInstances . includes ( statusBarItems ) ) {
39+ this . statusBarInstances . push ( statusBarItems ) ;
40+ }
41+ }
42+
43+ public removeStatusBarInstance ( statusBarItems : StatusBarItems ) : void {
44+ const index = this . statusBarInstances . indexOf ( statusBarItems ) ;
45+ if ( index > - 1 ) {
46+ this . statusBarInstances . splice ( index , 1 ) ;
47+ }
48+ }
49+
3650 public startSystemMonitoring ( statusBarItems : StatusBarItems ) : void {
51+ this . addStatusBarInstance ( statusBarItems ) ;
52+
3753 if ( this . updateInterval ) {
3854 clearInterval ( this . updateInterval ) ;
3955 this . updateInterval = undefined ;
4056 }
4157
4258 const config = vscode . workspace . getConfiguration ( "systemGraph" ) ;
43- const updateIntervalMs = config . get ( "updateInterval" , 2000 ) ;
59+ const updateIntervalMs = config . get ( "updateInterval" , 4000 ) ;
4460
4561 if ( ! this . isPaused && this . monitoringEnabled ) {
46- SystemMonitor . globalInterval ??= setInterval ( async ( ) => {
47- if ( SystemMonitor . isUpdating ) {
48- return ;
49- }
62+ if ( SystemMonitor . globalInterval ) {
63+ clearInterval ( SystemMonitor . globalInterval ) ;
64+ SystemMonitor . globalInterval = undefined ;
65+ }
5066
51- const now = Date . now ( ) ;
52- if ( now - SystemMonitor . lastUpdateTime < updateIntervalMs - 200 ) {
67+ SystemMonitor . globalInterval = setInterval ( async ( ) => {
68+ if ( SystemMonitor . isUpdating ) {
5369 return ;
5470 }
5571
5672 SystemMonitor . isUpdating = true ;
57- SystemMonitor . lastUpdateTime = now ;
73+ SystemMonitor . lastUpdateTime = Date . now ( ) ;
5874
5975 try {
6076 const systemData = await SystemMonitor . collectSystemData ( ) ;
6177 SystemMonitor . lastSystemData = systemData ;
6278
6379 SystemMonitor . activeMonitors . forEach ( ( monitor ) => {
6480 if ( monitor . monitoringEnabled && ! monitor . isPaused ) {
65- const items = monitor . statusBarManager . getStatusBarItems ( ) ;
66- if ( items ) {
81+ monitor . statusBarInstances . forEach ( ( items ) => {
6782 monitor . updateWithSystemData ( items , systemData ) ;
68- }
83+ } ) ;
6984 }
7085 } ) ;
7186 } catch ( error ) {
@@ -117,7 +132,7 @@ export class SystemMonitor {
117132 }
118133 }
119134
120- public toggleMonitoring ( statusBarItems : StatusBarItems ) : void {
135+ public toggleMonitoring ( _statusBarItems : StatusBarItems ) : void {
121136 this . isPaused = ! this . isPaused ;
122137 const config = vscode . workspace . getConfiguration ( "systemGraph" ) ;
123138 config . update (
@@ -138,7 +153,10 @@ export class SystemMonitor {
138153 vscode . window . showInformationMessage ( "System monitoring paused" ) ;
139154
140155 this . monitoringEnabled = false ;
141- this . statusBarManager . hideAllStatusBarItems ( statusBarItems ) ;
156+
157+ this . statusBarInstances . forEach ( ( items ) => {
158+ this . statusBarManager . hideAllStatusBarItems ( items ) ;
159+ } ) ;
142160
143161 const anyActiveMonitor = Array . from ( SystemMonitor . activeMonitors ) . some (
144162 ( monitor ) => monitor . monitoringEnabled && ! monitor . isPaused
@@ -154,8 +172,14 @@ export class SystemMonitor {
154172 vscode . window . showInformationMessage ( "System monitoring resumed" ) ;
155173
156174 this . monitoringEnabled = true ;
157- this . startSystemMonitoring ( statusBarItems ) ;
158- this . statusBarManager . updateStatusBarVisibility ( statusBarItems ) ;
175+
176+ if ( this . statusBarInstances . length > 0 ) {
177+ this . startSystemMonitoring ( this . statusBarInstances [ 0 ] ) ;
178+ }
179+
180+ this . statusBarInstances . forEach ( ( items ) => {
181+ this . statusBarManager . updateStatusBarVisibility ( items ) ;
182+ } ) ;
159183 }
160184 }
161185
@@ -202,13 +226,11 @@ export class SystemMonitor {
202226
203227 const cpuPercent = Math . round ( cpu . currentLoad ) ;
204228
205- // Calculate total CPU usage of all processes
206229 const totalProcessCpu = processes . list . reduce (
207230 ( sum , p ) => sum + ( p . cpu || 0 ) ,
208231 0
209232 ) ;
210233
211- // Calculate VS Code CPU as percentage of all process CPU usage
212234 const vscodeCpuRelative =
213235 totalProcessCpu > 0
214236 ? Math . round ( ( vscodeCpu / totalProcessCpu ) * 100 )
@@ -347,7 +369,7 @@ export class SystemMonitor {
347369 data . vscodeMemoryMBRounded
348370 } MB\n${ generateMiniGraph (
349371 this . historyData . vscodeMemory ,
350- 2000
372+ 4000
351373 ) } \nClick to focus System Resources view`;
352374 statusBarItems . vscodeMemory . color = undefined ;
353375
0 commit comments