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

Avoid object churn

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