Skip to content

Commit

Permalink
Merge pull request #1812 from jerch/default_buffer_to_typedarray
Browse files Browse the repository at this point in the history
Deprecate JS array based terminal buffer
  • Loading branch information
jerch committed Dec 4, 2018
2 parents 6e45d02 + 6f4a6ef commit b5f1c33
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 22 deletions.
8 changes: 4 additions & 4 deletions src/Buffer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import { CircularList } from './common/CircularList';
import { CharData, ITerminal, IBuffer, IBufferLine, BufferIndex, IBufferStringIterator, IBufferStringIteratorResult, IBufferLineConstructor } from './Types';
import { EventEmitter } from './common/EventEmitter';
import { IMarker } from 'xterm';
import { BufferLine, BufferLineTypedArray } from './BufferLine';
import { BufferLine, BufferLineJSArray } from './BufferLine';
import { DEFAULT_COLOR } from './renderer/atlas/Types';

export const DEFAULT_ATTR = (0 << 18) | (DEFAULT_COLOR << 9) | (256 << 0);
Expand Down Expand Up @@ -57,9 +57,9 @@ export class Buffer implements IBuffer {
}

public setBufferLineFactory(type: string): void {
if (type === 'TypedArray') {
if (this._bufferLineConstructor !== BufferLineTypedArray) {
this._bufferLineConstructor = BufferLineTypedArray;
if (type === 'JsArray') {
if (this._bufferLineConstructor !== BufferLineJSArray) {
this._bufferLineConstructor = BufferLineJSArray;
this._recreateLines();
}
} else {
Expand Down
23 changes: 8 additions & 15 deletions src/BufferLine.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,10 @@ import { NULL_CELL_CODE, NULL_CELL_WIDTH, NULL_CELL_CHAR } from './Buffer';

/**
* Class representing a terminal line.
*
* @deprecated to be removed with one of the next releases
*/
export class BufferLine implements IBufferLine {
export class BufferLineJSArray implements IBufferLine {
protected _data: CharData[];
public isWrapped = false;
public length: number;
Expand Down Expand Up @@ -94,14 +96,14 @@ export class BufferLine implements IBufferLine {
}
}

public copyFrom(line: BufferLine): void {
public copyFrom(line: BufferLineJSArray): void {
this._data = line._data.slice(0);
this.length = line.length;
this.isWrapped = line.isWrapped;
}

public clone(): IBufferLine {
const newLine = new BufferLine(0);
const newLine = new BufferLineJSArray(0);
newLine.copyFrom(this);
return newLine;
}
Expand All @@ -119,17 +121,8 @@ const enum Cell {

/**
* Typed array based bufferline implementation.
* Note: Unlike the JS variant the access to the data
* via set/get is always a copy action.
* Sloppy ref style coding will not work anymore:
* line = new BufferLine(10);
* char = line.get(0); // char is a copy
* char[some_index] = 123; // will not update the line
* line.set(0, ch); // do this to update line data
* TODO:
* - provide getData/setData to directly access the data
*/
export class BufferLineTypedArray implements IBufferLine {
export class BufferLine implements IBufferLine {
protected _data: Uint32Array | null = null;
protected _combined: {[index: number]: string} = {};
public length: number;
Expand Down Expand Up @@ -248,7 +241,7 @@ export class BufferLineTypedArray implements IBufferLine {
}

/** alter to a full copy of line */
public copyFrom(line: BufferLineTypedArray): void {
public copyFrom(line: BufferLine): void {
if (this.length !== line.length) {
this._data = new Uint32Array(line._data);
} else {
Expand All @@ -265,7 +258,7 @@ export class BufferLineTypedArray implements IBufferLine {

/** create a new clone */
public clone(): IBufferLine {
const newLine = new BufferLineTypedArray(0);
const newLine = new BufferLine(0);
// creation of new typed array from another is actually pretty slow :(
// still faster than copying values one by one
newLine._data = new Uint32Array(this._data);
Expand Down
4 changes: 2 additions & 2 deletions src/Terminal.ts
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ const DEFAULT_OPTIONS: ITerminalOptions = {
theme: null,
rightClickSelectsWord: Browser.isMac,
rendererType: 'canvas',
experimentalBufferLineImpl: 'JsArray'
experimentalBufferLineImpl: 'TypedArray'
};

export class Terminal extends EventEmitter implements ITerminal, IDisposable, IInputHandlingTerminal {
Expand Down Expand Up @@ -1179,7 +1179,7 @@ export class Terminal extends EventEmitter implements ITerminal, IDisposable, II
*/
public scroll(isWrapped: boolean = false): void {
let newLine: IBufferLine;
const useRecycling = this.options.experimentalBufferLineImpl === 'TypedArray';
const useRecycling = this.options.experimentalBufferLineImpl !== 'JsArray';
if (useRecycling) {
newLine = this._blankLine;
if (!newLine || newLine.length !== this.cols || newLine.get(0)[CHAR_DATA_ATTR_INDEX] !== this.eraseAttr()) {
Expand Down
2 changes: 1 addition & 1 deletion typings/xterm.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ declare module 'xterm' {
* - 'TypedArray': The new experimental implementation based on TypedArrays that is expected to
* significantly boost performance and memory consumption. Use at your own risk.
*
* This option will be removed in the future.
* @deprecated This option will be removed in the future.
*/
experimentalBufferLineImpl?: 'JsArray' | 'TypedArray';

Expand Down

0 comments on commit b5f1c33

Please sign in to comment.