Remove need for acquiring dimensions for terminal from main thread

This commit is contained in:
Gabriel DeBacker
2019-03-06 11:47:57 -08:00
parent 99cf5e4881
commit d5e4009ae9
5 changed files with 40 additions and 26 deletions

View File

@@ -387,7 +387,6 @@ export interface MainThreadTerminalServiceShape extends IDisposable {
// Renderer
$terminalRendererSetName(terminalId: number, name: string): void;
$terminalRendererSetDimensions(terminalId: number, dimensions: ITerminalDimensions): void;
$terminalGetDimensions(terminalId: number): Promise<ITerminalDimensions>;
$terminalRendererWrite(terminalId: number, text: string): void;
$terminalRendererRegisterOnInputListener(terminalId: number): void;
}
@@ -974,7 +973,7 @@ export interface ShellLaunchConfigDto {
export interface ExtHostTerminalServiceShape {
$acceptTerminalClosed(id: number): void;
$acceptTerminalOpened(id: number, name: string, isRendererOnly: boolean, cols: number, rows: number): void;
$acceptTerminalOpened(id: number, name: string): void;
$acceptActiveTerminalChanged(id: number | null): void;
$acceptTerminalProcessId(id: number, processId: number): void;
$acceptTerminalProcessData(id: number, data: string): void;

View File

@@ -336,6 +336,7 @@ interface HandlerData {
}
class CustomExecutionData implements IDisposable {
private static waitForDimensionsTimeoutInMs: number = 5000;
private _cancellationSource?: CancellationTokenSource;
private readonly _onTaskExecutionComplete: Emitter<CustomExecutionData> = new Emitter<CustomExecutionData>();
private readonly _disposables: IDisposable[] = [];
@@ -397,6 +398,25 @@ class CustomExecutionData implements IDisposable {
this.terminal = callbackTerminals[0];
const terminalRenderer: vscode.TerminalRenderer = await this.terminalService.resolveTerminalRenderer(terminalId);
const dimensionTimeout: Promise<void> = new Promise((resolve) => {
setTimeout(() => {
resolve();
}, CustomExecutionData.waitForDimensionsTimeoutInMs);
});
let dimensionsRegistration: IDisposable | undefined;
const dimensionsPromise: Promise<void> = new Promise((resolve) => {
dimensionsRegistration = terminalRenderer.onDidChangeMaximumDimensions((newDimensions) => {
resolve();
});
});
await Promise.race([dimensionTimeout, dimensionsPromise]);
if (dimensionsRegistration) {
dimensionsRegistration.dispose();
}
this._cancellationSource = new CancellationTokenSource();
this._disposables.push(this._cancellationSource);

View File

@@ -234,20 +234,10 @@ export class ExtHostTerminalRenderer extends BaseExtHostTerminal implements vsco
proxy: MainThreadTerminalServiceShape,
private _name: string,
private _terminal: ExtHostTerminal,
id?: number,
cols?: number,
rows?: number
id?: number
) {
super(proxy, id);
// TODO: Should we set maximum dimensions to these as well?
if (cols !== null && rows !== null) {
this._dimensions = {
columns: cols,
rows: rows
};
}
if (!id) {
this._proxy.$createTerminalRenderer(this._name).then(id => {
this._runQueuedRequests(id);
@@ -335,9 +325,8 @@ export class ExtHostTerminalService implements ExtHostTerminalServiceShape {
}
}
const dimensions = await this._proxy.$terminalGetDimensions(id);
const terminal = this._getTerminalById(id);
const renderer = new ExtHostTerminalRenderer(this._proxy, terminal.name, terminal, terminal._id, dimensions.cols, dimensions.rows);
const renderer = new ExtHostTerminalRenderer(this._proxy, terminal.name, terminal, terminal._id);
this._terminalRenderers.push(renderer);
return renderer;