Batch messages on the exthost to not freeze ads (#8949)

* batch messages on the exthost to not freeze ads

* clear out messages on query complete
This commit is contained in:
Anthony Dresser
2020-02-20 14:50:13 -08:00
committed by GitHub
parent 8fe0a13b61
commit 4c54b5dbac
11 changed files with 103 additions and 41 deletions

View File

@@ -20,7 +20,7 @@ import { IThemeService, ITheme } from 'vs/platform/theme/common/themeService';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { OpenMode, ClickBehavior, ICancelableEvent, IControllerOptions } from 'vs/base/parts/tree/browser/treeDefaults';
import { WorkbenchTreeController } from 'vs/platform/list/browser/listService';
import { isArray } from 'vs/base/common/types';
import { isArray, isString } from 'vs/base/common/types';
import { Disposable, DisposableStore } from 'vs/base/common/lifecycle';
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
import { ScrollbarVisibility } from 'vs/base/common/scrollable';
@@ -30,8 +30,13 @@ import { ICodeEditor } from 'vs/editor/browser/editorBrowser';
import { resultsErrorColor } from 'sql/platform/theme/common/colors';
import { MessagePanelState } from 'sql/workbench/common/editor/query/messagePanelState';
export interface IResultMessageIntern extends IQueryMessage {
export interface IResultMessageIntern {
id?: string;
batchId?: number;
isError: boolean;
time?: string | Date;
message: string;
selection?: ISelectionData;
}
export interface IMessagePanelMessage {
@@ -190,7 +195,7 @@ export class MessagePanel extends Disposable {
let expandableTree: IExpandableTree = <IExpandableTree>this.tree;
if (this.state && this.state.scrollPosition) {
const previousScroll = this.state.scrollPosition;
this.tree.refresh(this.model).then(() => {
this.tree.refresh(this.model, false).then(() => {
// Restore the previous scroll position when switching between tabs
expandableTree.setScrollPosition(previousScroll);
});
@@ -290,13 +295,13 @@ class MessageDataSource implements IDataSource {
class MessageRenderer implements IRenderer {
getHeight(tree: ITree, element: IQueryMessage): number {
getHeight(tree: ITree, element: IResultMessageIntern): number {
const lineHeight = 22;
let lines = element.message.split('\n').length;
return lineHeight * lines;
}
getTemplateId(tree: ITree, element: IQueryMessage): string {
getTemplateId(tree: ITree, element: IResultMessageIntern): string {
if (element instanceof Model) {
return TemplateIds.MODEL;
} else if (element.selection) {
@@ -333,13 +338,16 @@ class MessageRenderer implements IRenderer {
}
}
renderElement(tree: ITree, element: IQueryMessage, templateId: string, templateData: IMessageTemplate | IBatchTemplate): void {
renderElement(tree: ITree, element: IResultMessageIntern, templateId: string, templateData: IMessageTemplate | IBatchTemplate): void {
if (templateId === TemplateIds.MESSAGE || templateId === TemplateIds.ERROR) {
let data: IMessageTemplate = templateData;
data.message.innerText = element.message;
} else if (templateId === TemplateIds.BATCH) {
let data = templateData as IBatchTemplate;
data.timeStamp.innerText = element.time;
if (isString(element.time)) {
element.time = new Date(element.time!);
}
data.timeStamp.innerText = (element.time as Date).toLocaleTimeString();
data.message.innerText = element.message;
}
}