@@ -42,7 +42,6 @@ export class RealtimeSessionTracker {
42
42
private webviews = new Set < vscode . WebviewView > ( ) ;
43
43
private sessionData = new Map < vscode . DebugSession , ISessionData > ( ) ;
44
44
private displayedSession ?: vscode . DebugSession ;
45
- private hasVisibleSession = false ;
46
45
47
46
/**
48
47
* Returns any realtime metric webviews that are currently visible.
@@ -56,16 +55,18 @@ export class RealtimeSessionTracker {
56
55
*/
57
56
public trackWebview ( webview : vscode . WebviewView ) {
58
57
this . webviews . add ( webview ) ;
58
+
59
59
webview . onDidChangeVisibility ( ( ) => {
60
- this . recalcVisibility ( ) ;
60
+ if ( webview . visible ) {
61
+ this . hydrate ( webview . webview ) ;
62
+ }
61
63
} ) ;
62
64
63
65
webview . onDidDispose ( ( ) => {
64
66
this . webviews . delete ( webview ) ;
65
- this . recalcVisibility ( ) ;
66
67
} ) ;
67
68
68
- this . recalcVisibility ( ) ;
69
+ this . hydrate ( webview . webview ) ;
69
70
}
70
71
71
72
/**
@@ -98,7 +99,7 @@ export class RealtimeSessionTracker {
98
99
}
99
100
100
101
this . displayedSession = session ;
101
- this . postMessage ( { type : MessageType . ApplyData , data : data . metrics . map ( m => m . metrics ) } ) ;
102
+ this . broadcast ( { type : MessageType . ApplyData , data : data . metrics . map ( m => m . metrics ) } ) ;
102
103
}
103
104
104
105
/**
@@ -129,6 +130,8 @@ export class RealtimeSessionTracker {
129
130
metric . reset ( steps + 3 ) ; // no-ops if the steps are already the same
130
131
}
131
132
}
133
+
134
+ this . broadcast ( { type : MessageType . UpdateSettings , settings : this . settings } ) ;
132
135
}
133
136
134
137
private collectFromSession ( data : ISessionData ) {
@@ -163,26 +166,34 @@ export class RealtimeSessionTracker {
163
166
}
164
167
165
168
if ( session === this . displayedSession ) {
166
- this . postMessage ( { type : MessageType . AddData , data : v } ) ;
169
+ this . broadcast ( { type : MessageType . AddData , data : v } ) ;
167
170
}
168
171
}
169
172
170
- private postMessage ( message : ToWebViewMessage ) {
173
+ private broadcast ( message : ToWebViewMessage ) {
171
174
for ( const webview of this . visibleWebviews ) {
172
175
webview . webview . postMessage ( message ) ;
173
176
}
174
177
}
175
178
176
- private recalcVisibility ( ) {
177
- const wasVisible = this . hasVisibleSession ;
178
- const visible = [ ...this . webviews ] . some ( w => w . visible ) ;
179
- this . hasVisibleSession = visible ;
180
- if ( visible && ! wasVisible ) {
181
- this . onDidChangeActiveSession ( vscode . debug . activeDebugSession ) ;
182
- } else if ( ! visible ) {
183
- for ( const session of this . sessionData . keys ( ) ) {
184
- this . onSessionDidEnd ( session ) ;
185
- }
179
+ private hydrate ( webview : vscode . Webview ) {
180
+ webview . postMessage ( this . getSettingsUpdate ( ) ) ;
181
+
182
+ const data = this . displayedSession && this . sessionData . get ( this . displayedSession ) ;
183
+ if ( ! data ) {
184
+ return ;
186
185
}
186
+
187
+ const metrics : ToWebViewMessage = {
188
+ type : MessageType . ApplyData ,
189
+ data : data . metrics . map ( m => m . metrics ) ,
190
+ } ;
191
+ webview . postMessage ( metrics ) ;
192
+ }
193
+
194
+ private getSettingsUpdate ( ) {
195
+ const settings = readRealtimeSettings ( ) ;
196
+ const message : ToWebViewMessage = { type : MessageType . UpdateSettings , settings } ;
197
+ return message ;
187
198
}
188
199
}
0 commit comments