Merge from vscode a234f13c45b40a0929777cb440ee011b7549eed2 (#8911)

* Merge from vscode a234f13c45b40a0929777cb440ee011b7549eed2

* update distro

* fix layering

* update distro

* fix tests
This commit is contained in:
Anthony Dresser
2020-01-22 13:42:37 -08:00
committed by GitHub
parent 977111eb21
commit bd7aac8ee0
895 changed files with 24651 additions and 14520 deletions

View File

@@ -14,13 +14,16 @@ interface TerminalDataBuffer extends IDisposable {
export class TerminalDataBufferer implements IDisposable {
private readonly _terminalBufferMap = new Map<number, TerminalDataBuffer>();
constructor(private readonly _callback: (id: number, data: string) => void) {
}
dispose() {
for (const buffer of this._terminalBufferMap.values()) {
buffer.dispose();
}
}
startBuffering(id: number, event: Event<string>, callback: (id: number, data: string) => void, throttleBy: number = 5): IDisposable {
startBuffering(id: number, event: Event<string>, throttleBy: number = 5): IDisposable {
let disposable: IDisposable;
disposable = event((e: string) => {
let buffer = this._terminalBufferMap.get(id);
@@ -30,16 +33,13 @@ export class TerminalDataBufferer implements IDisposable {
return;
}
const timeoutId = setTimeout(() => {
this._terminalBufferMap.delete(id);
callback(id, buffer!.data.join(''));
}, throttleBy);
const timeoutId = setTimeout(() => this._flushBuffer(id), throttleBy);
buffer = {
data: [e],
timeoutId: timeoutId,
dispose: () => {
clearTimeout(timeoutId);
this._terminalBufferMap.delete(id);
this._flushBuffer(id);
disposable.dispose();
}
};
@@ -54,4 +54,12 @@ export class TerminalDataBufferer implements IDisposable {
buffer.dispose();
}
}
private _flushBuffer(id: number): void {
const buffer = this._terminalBufferMap.get(id);
if (buffer) {
this._terminalBufferMap.delete(id);
this._callback(id, buffer.data.join(''));
}
}
}