This commit is contained in:
isidor 2017-06-08 00:28:24 +02:00
parent dca7ae6908
commit 9f0ba70700
2 changed files with 11 additions and 11 deletions

View file

@ -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);
}));
}

View file

@ -355,7 +355,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());
@ -365,25 +365,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> {