未验证 提交 e5cf46d5 编写于 作者: A Andre Weinand 提交者: GitHub

Merge pull request #57491 from Microsoft/isidorn/loadedScriptSchedulers

loaded scripts view: use schedulers
...@@ -27,6 +27,8 @@ import { tildify } from 'vs/base/common/labels'; ...@@ -27,6 +27,8 @@ import { tildify } from 'vs/base/common/labels';
import { isWindows } from 'vs/base/common/platform'; import { isWindows } from 'vs/base/common/platform';
import URI from 'vs/base/common/uri'; import URI from 'vs/base/common/uri';
import { ltrim } from 'vs/base/common/strings'; import { ltrim } from 'vs/base/common/strings';
import { RunOnceScheduler } from 'vs/base/common/async';
import { memoize } from 'vs/base/common/decorators';
const SMART = true; const SMART = true;
...@@ -306,7 +308,7 @@ export class LoadedScriptsView extends TreeViewsViewletPanel { ...@@ -306,7 +308,7 @@ export class LoadedScriptsView extends TreeViewsViewletPanel {
private treeContainer: HTMLElement; private treeContainer: HTMLElement;
private loadedScriptsItemType: IContextKey<string>; private loadedScriptsItemType: IContextKey<string>;
private settings: any; private settings: any;
private shouldRefreshRecursive;
constructor( constructor(
options: IViewletViewOptions, options: IViewletViewOptions,
...@@ -325,6 +327,16 @@ export class LoadedScriptsView extends TreeViewsViewletPanel { ...@@ -325,6 +327,16 @@ export class LoadedScriptsView extends TreeViewsViewletPanel {
this.loadedScriptsItemType = CONTEXT_LOADED_SCRIPTS_ITEM_TYPE.bindTo(contextKeyService); this.loadedScriptsItemType = CONTEXT_LOADED_SCRIPTS_ITEM_TYPE.bindTo(contextKeyService);
} }
@memoize
private get treeRefreshScheduler(): RunOnceScheduler {
return new RunOnceScheduler(() => {
if (this.tree) {
this.tree.refresh(undefined, this.shouldRefreshRecursive);
this.shouldRefreshRecursive = false;
}
}, 300);
}
protected renderBody(container: HTMLElement): void { protected renderBody(container: HTMLElement): void {
dom.addClass(container, 'debug-loaded-scripts'); dom.addClass(container, 'debug-loaded-scripts');
...@@ -369,18 +381,12 @@ export class LoadedScriptsView extends TreeViewsViewletPanel { ...@@ -369,18 +381,12 @@ export class LoadedScriptsView extends TreeViewsViewletPanel {
const root = new RootTreeItem(this.debugService.getModel(), this.environmentService, this.contextService); const root = new RootTreeItem(this.debugService.getModel(), this.environmentService, this.contextService);
this.tree.setInput(root); this.tree.setInput(root);
let timeout: number;
const registerLoadedSourceListener = (session: ISession) => { const registerLoadedSourceListener = (session: ISession) => {
this.disposables.push(session.onDidLoadedSource(event => { this.disposables.push(session.onDidLoadedSource(event => {
const sessionRoot = root.add(session); const sessionRoot = root.add(session);
sessionRoot.addPath(event.source); sessionRoot.addPath(event.source);
this.shouldRefreshRecursive = true;
clearTimeout(timeout); this.treeRefreshScheduler.schedule();
timeout = setTimeout(() => {
if (this.tree) {
this.tree.refresh(root, true);
}
}, 300);
})); }));
}; };
...@@ -388,11 +394,8 @@ export class LoadedScriptsView extends TreeViewsViewletPanel { ...@@ -388,11 +394,8 @@ export class LoadedScriptsView extends TreeViewsViewletPanel {
this.debugService.getModel().getSessions().forEach(registerLoadedSourceListener); this.debugService.getModel().getSessions().forEach(registerLoadedSourceListener);
this.disposables.push(this.debugService.onDidEndSession(session => { this.disposables.push(this.debugService.onDidEndSession(session => {
clearTimeout(timeout);
root.remove(session.getId()); root.remove(session.getId());
if (this.tree) { this.treeRefreshScheduler.schedule();
this.tree.refresh(root, false);
}
})); }));
} }
...@@ -407,6 +410,11 @@ export class LoadedScriptsView extends TreeViewsViewletPanel { ...@@ -407,6 +410,11 @@ export class LoadedScriptsView extends TreeViewsViewletPanel {
this.settings[LoadedScriptsView.MEMENTO] = !this.isExpanded(); this.settings[LoadedScriptsView.MEMENTO] = !this.isExpanded();
super.shutdown(); super.shutdown();
} }
dispose(): void {
super.dispose();
this.tree = undefined;
}
} }
// A good example of data source, renderers, action providers and accessibilty providers can be found in the callStackView.ts // A good example of data source, renderers, action providers and accessibilty providers can be found in the callStackView.ts
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册