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