未验证 提交 326914ae 编写于 作者: A Alex Dima

Avoid object churn

上级 efd7f099
......@@ -94,6 +94,8 @@ export class CharacterHardWrappingLineMapperFactory implements ILineMapperFactor
}
}
let arrPool1: number[] = [];
let arrPool2: number[] = [];
function createLineMappingFromPreviousLineMapping(classifier: WrappingCharacterClassifier, previousBreakingData: LineBreakingData, lineText: string, tabSize: number, firstLineBreakingColumn: number, columnsForFullWidthChar: number, hardWrappingIndent: WrappingIndent): LineBreakingData | null {
if (firstLineBreakingColumn === -1) {
return null;
......@@ -110,8 +112,8 @@ function createLineMappingFromPreviousLineMapping(classifier: WrappingCharacterC
const wrappedTextIndentLength = computeWrappedTextIndentLength(lineText, tabSize, firstLineBreakingColumn, columnsForFullWidthChar, hardWrappingIndent);
const wrappedLineBreakingColumn = firstLineBreakingColumn - wrappedTextIndentLength;
let breakingOffsets: number[] = [];
let breakingOffsetsVisibleColumn: number[] = [];
let breakingOffsets: number[] = arrPool1;
let breakingOffsetsVisibleColumn: number[] = arrPool2;
let breakingOffsetsCount: number = 0;
let breakingColumn = firstLineBreakingColumn;
......@@ -307,7 +309,19 @@ function createLineMappingFromPreviousLineMapping(classifier: WrappingCharacterC
return null;
}
return new LineBreakingData(firstLineBreakingColumn, breakingOffsets, breakingOffsetsVisibleColumn, wrappedTextIndentLength);
// Doing here some object reuse which ends up helping a huge deal with GC pauses!
breakingOffsets.length = breakingOffsetsCount;
breakingOffsetsVisibleColumn.length = breakingOffsetsCount;
arrPool1 = previousBreakingData.breakOffsets;
arrPool2 = previousBreakingData.breakingOffsetsVisibleColumn;
previousBreakingData.breakingColumn = firstLineBreakingColumn;
previousBreakingData.breakOffsets = breakingOffsets;
previousBreakingData.breakingOffsetsVisibleColumn = breakingOffsetsVisibleColumn;
previousBreakingData.wrappedTextIndentLength = wrappedTextIndentLength;
return previousBreakingData;
// return new LineBreakingData(firstLineBreakingColumn, breakingOffsets, breakingOffsetsVisibleColumn, wrappedTextIndentLength);
// const expected = createLineMapping(classifier, lineText, tabSize, firstLineBreakingColumn, columnsForFullWidthChar, hardWrappingIndent);
// const actual = new LineBreakingData(firstLineBreakingColumn, breakingOffsets, breakingOffsetsVisibleColumn, wrappedTextIndentLength);
// try {
......
......@@ -28,10 +28,10 @@ export class OutputPosition {
export class LineBreakingData {
constructor(
public readonly breakingColumn: number,
public readonly breakOffsets: number[],
public readonly breakingOffsetsVisibleColumn: number[],
public readonly wrappedTextIndentLength: number
public breakingColumn: number,
public breakOffsets: number[],
public breakingOffsetsVisibleColumn: number[],
public wrappedTextIndentLength: number
) { }
assertEqual(other: LineBreakingData | null): void {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册