1646
1647
refreshTopOfCallstack(thread: Thread, fetchFullStack = true): { topCallStack: Promise<void>; wholeCallStack: Promise<void> } {
1648
>
if (thread.session.capabilities.supportsDelayedStackTraceLoading) {
debugModel.ts
1649
>
// For improved performance load the first stack frame and then load the rest async.
1650
>
let topCallStack = Promise.resolve();
1651
>
const wholeCallStack = new Promise<void>((c, e) => {
1652
>
topCallStack = thread.fetchCallStack(1).then(() => {
1653
>
if (!fetchFullStack) {
1654
c();
1655
this._onDidChangeCallStack.fire();
1656
return;
1657
}
1659
>
if (!this.schedulers.has(thread.getId())) {
1660
>
const deferred = new DeferredPromise<void>();
1661
>
this.schedulers.set(thread.getId(), {
1662
>
completeDeferred: deferred,
1663
>
scheduler: new RunOnceScheduler(() => {
1664
>
thread.fetchCallStack(19).then(() => {
1665
>
const stale = thread.getStaleCallStack();
1666
>
const current = thread.getCallStack();
1667
>
let bottomOfCallStackChanged = stale.length !== current.length;
1668
>
for (let i = 1; i < stale.length && !bottomOfCallStackChanged; i++) {
1669
bottomOfCallStackChanged = !stale[i].equals(current[i]);
1670
}
1672
>
if (bottomOfCallStackChanged) {
1673
this._onDidChangeCallStack.fire();
1674
}
1676
>
deferred.complete();
1677
>
this.schedulers.delete(thread.getId());
1678
>
});
1679
>
}, 420)
1680
>
});
1681
>
}
1682
>
1683
>
const entry = this.schedulers.get(thread.getId())!;
1684
>
entry.scheduler.schedule();
1685
>
entry.completeDeferred.p.then(c, e);
1686
>
this._onDidChangeCallStack.fire();
1687
>
});
1688
>
});
1689
>
1690
>
return { topCallStack, wholeCallStack };
1691
>
}
1692
1693
const wholeCallStack = thread.fetchCallStack();
1694
return { wholeCallStack, topCallStack: wholeCallStack };
1696
1697
getBreakpoints(filter?: { uri?: uri; originalUri?: uri; lineNumber?: number; column?: number; enabledOnly?: boolean; triggeredOnly?: boolean }): IBreakpoint[] {