Skip to content

Commit

Permalink
fixes #28198
Browse files Browse the repository at this point in the history
  • Loading branch information
isidorn committed Jun 7, 2017
1 parent 586d578 commit 376c52b
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 11 deletions.
6 changes: 3 additions & 3 deletions src/vs/workbench/parts/debug/common/debugModel.ts
Original file line number Diff line number Diff line change
Expand Up @@ -435,17 +435,17 @@ export class Thread implements IThread {
* Only fetches the first stack frame for performance reasons. Calling this method consecutive times
* gets the remainder of the call stack.
*/
public fetchCallStack(): TPromise<void> {
public fetchCallStack(smartFetch = true): TPromise<void> {
if (!this.stopped) {
return TPromise.as(null);
}

if (!this.fetchPromise) {
if (!this.fetchPromise && smartFetch) {
this.fetchPromise = this.getCallStackImpl(0, 1).then(callStack => {
this.callStack = callStack || [];
});
} else {
this.fetchPromise = this.fetchPromise.then(() => this.getCallStackImpl(this.callStack.length, 20).then(callStackSecondPart => {
this.fetchPromise = (this.fetchPromise || TPromise.as(null)).then(() => this.getCallStackImpl(this.callStack.length, 20).then(callStackSecondPart => {
this.callStack = this.callStack.concat(callStackSecondPart);
}));
}
Expand Down
16 changes: 8 additions & 8 deletions src/vs/workbench/parts/debug/electron-browser/debugViewer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -354,7 +354,7 @@ export class CallStackDataSource implements IDataSource {

public getChildren(tree: ITree, element: any): TPromise<any> {
if (element instanceof Thread) {
return TPromise.as(this.getThreadChildren(element));
return this.getThreadChildren(element);
}
if (element instanceof Model) {
return TPromise.as(element.getProcesses());
Expand All @@ -364,25 +364,25 @@ export class CallStackDataSource implements IDataSource {
return TPromise.as(process.getAllThreads());
}

private getThreadChildren(thread: Thread): any[] {
private getThreadChildren(thread: Thread): TPromise<any> {
const callStack: any[] = thread.getCallStack();
if (!callStack) {
return [];
if (!callStack || !callStack.length) {
return thread.fetchCallStack(false).then(() => thread.getCallStack());
}
if (callStack.length === 1) {
// To reduce flashing of the call stack view simply append the stale call stack
// once we have the correct data the tree will refresh and we will no longer display it.
return callStack.concat(thread.getStaleCallStack().slice(1));
return TPromise.as(callStack.concat(thread.getStaleCallStack().slice(1)));
}

if (thread.stoppedDetails && thread.stoppedDetails.framesErrorMessage) {
return callStack.concat([thread.stoppedDetails.framesErrorMessage]);
return TPromise.as(callStack.concat([thread.stoppedDetails.framesErrorMessage]));
}
if (thread.stoppedDetails && thread.stoppedDetails.totalFrames > callStack.length && callStack.length > 1) {
return callStack.concat([new ThreadAndProcessIds(thread.process.getId(), thread.threadId)]);
return TPromise.as(callStack.concat([new ThreadAndProcessIds(thread.process.getId(), thread.threadId)]));
}

return callStack;
return TPromise.as(callStack);
}

public getParent(tree: ITree, element: any): TPromise<any> {
Expand Down

1 comment on commit 376c52b

@wangpung12
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good

Please sign in to comment.