提交 376c52b9 编写于 作者: I isidor

fixes #28198

上级 586d578d
......@@ -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);
}));
}
......
......@@ -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());
......@@ -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> {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册