Fix task flicker (#5694)

* adjust timer rendering

* give each element a unique id

* remove testing code

* remove unused imports

* change task timeout to 1000
This commit is contained in:
Anthony Dresser
2019-05-29 11:34:27 -07:00
committed by GitHub
parent 9cae7a0a49
commit ef2b6f91f1

View File

@@ -8,6 +8,8 @@ import { TaskNode, TaskStatus } from 'sql/platform/tasks/common/tasksNode';
import * as dom from 'vs/base/browser/dom'; import * as dom from 'vs/base/browser/dom';
import { localize } from 'vs/nls'; import { localize } from 'vs/nls';
import * as Utils from 'sql/platform/connection/common/utils'; import * as Utils from 'sql/platform/connection/common/utils';
import { IDisposable, dispose } from 'vs/base/common/lifecycle';
import { IntervalTimer } from 'vs/base/common/async';
const $ = dom.$; const $ = dom.$;
@@ -17,6 +19,7 @@ export interface ITaskHistoryTemplateData {
label: HTMLSpanElement; label: HTMLSpanElement;
description: HTMLSpanElement; description: HTMLSpanElement;
time: HTMLSpanElement; time: HTMLSpanElement;
disposables: Array<IDisposable>;
} }
/** /**
@@ -36,15 +39,15 @@ export class TaskHistoryRenderer implements IRenderer {
/** /**
* Returns the element's height in the tree, in pixels. * Returns the element's height in the tree, in pixels.
*/ */
public getHeight(tree: ITree, element: any): number { public getHeight(tree: ITree, element: TaskNode): number {
return TaskHistoryRenderer.TASKOBJECT_HEIGHT; return TaskHistoryRenderer.TASKOBJECT_HEIGHT;
} }
/** /**
* Returns a template ID for a given element. * Returns a template ID for a given element.
*/ */
public getTemplateId(tree: ITree, element: any): string { public getTemplateId(tree: ITree, element: TaskNode): string {
return TaskHistoryRenderer.TASKOBJECT_TEMPLATE_ID; return element.id;
} }
/** /**
@@ -57,6 +60,7 @@ export class TaskHistoryRenderer implements IRenderer {
taskTemplate.label = dom.append(taskTemplate.root, $('.label')); taskTemplate.label = dom.append(taskTemplate.root, $('.label'));
taskTemplate.description = dom.append(taskTemplate.root, $('.description')); taskTemplate.description = dom.append(taskTemplate.root, $('.description'));
taskTemplate.time = dom.append(taskTemplate.root, $('.time')); taskTemplate.time = dom.append(taskTemplate.root, $('.time'));
taskTemplate.disposables = [];
return taskTemplate; return taskTemplate;
} }
@@ -108,15 +112,15 @@ export class TaskHistoryRenderer implements IRenderer {
templateData.description.textContent = description; templateData.description.textContent = description;
templateData.description.title = templateData.description.textContent; templateData.description.title = templateData.description.textContent;
this.timer(element, templateData); this.timer(element, templateData.time);
let self = this;
setInterval(function () { const timer = new IntervalTimer();
self.timer(element, templateData); timer.cancelAndSet(() => this.timer(element, templateData.time), 1000);
}, 1000); templateData.disposables.push(timer);
} }
} }
public timer(taskNode: TaskNode, templateData: ITaskHistoryTemplateData) { private timer(taskNode: TaskNode, element: HTMLElement): void {
let timeLabel = ''; let timeLabel = '';
if (taskNode.status === TaskStatus.Failed) { if (taskNode.status === TaskStatus.Failed) {
timeLabel += taskNode.startTime + ' Error: ' + taskNode.message; timeLabel += taskNode.startTime + ' Error: ' + taskNode.message;
@@ -134,12 +138,11 @@ export class TaskHistoryRenderer implements IRenderer {
timeLabel += ' (' + Utils.parseNumAsTimeString(duration) + ')'; timeLabel += ' (' + Utils.parseNumAsTimeString(duration) + ')';
} }
} }
templateData.time.textContent = timeLabel; element.textContent = timeLabel;
templateData.time.title = timeLabel; element.title = timeLabel;
} }
public disposeTemplate(tree: ITree, templateId: string, templateData: any): void { public disposeTemplate(tree: ITree, templateId: string, templateData: ITaskHistoryTemplateData): void {
// no op dispose(templateData.disposables);
// InputBox disposed in wrapUp
} }
} }