Skip to content

Commit

Permalink
Don't clobber other view events with final one
Browse files Browse the repository at this point in the history
  • Loading branch information
Tyriar authored and mengjiechen committed Nov 26, 2024
1 parent 2bc79aa commit 11c4f40
Showing 1 changed file with 29 additions and 12 deletions.
41 changes: 29 additions & 12 deletions src/vs/editor/browser/gpu/fullFileRenderStrategy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import { EditorOption } from '../../common/config/editorOptions.js';
import { CursorColumns } from '../../common/core/cursorColumns.js';
import type { IViewLineTokens } from '../../common/tokens/lineTokens.js';
import { ViewEventHandler } from '../../common/viewEventHandler.js';
import { ViewEventType, type ViewConfigurationChangedEvent, type ViewDecorationsChangedEvent, type ViewLinesChangedEvent, type ViewLinesDeletedEvent, type ViewLinesInsertedEvent, type ViewScrollChangedEvent, type ViewTokensChangedEvent, type ViewZonesChangedEvent } from '../../common/viewEvents.js';
import { ViewEventType, type ViewConfigurationChangedEvent, type ViewDecorationsChangedEvent, type ViewLinesChangedEvent, type ViewLinesDeletedEvent, type ViewLinesInsertedEvent, type ViewScrollChangedEvent, type ViewThemeChangedEvent, type ViewTokensChangedEvent, type ViewZonesChangedEvent } from '../../common/viewEvents.js';
import type { ViewportData } from '../../common/viewLayout/viewLinesViewportData.js';
import type { InlineDecoration, ViewLineRenderingData } from '../../common/viewModel.js';
import type { ViewContext } from '../../common/viewModel/viewContext.js';
Expand Down Expand Up @@ -41,6 +41,7 @@ const enum CellBufferInfo {

type QueuedBufferEvent = (
ViewConfigurationChangedEvent |
ViewDecorationsChangedEvent |
ViewLinesDeletedEvent |
ViewZonesChangedEvent
);
Expand Down Expand Up @@ -138,19 +139,18 @@ export class FullFileRenderStrategy extends ViewEventHandler implements IGpuRend
}

public override onDecorationsChanged(e: ViewDecorationsChangedEvent): boolean {
// console.log('FullFileRenderStrategy.onDecorationsChanged');
// TODO: Don't clear all cells if we can avoid it
this._invalidateAllLines();
this._queueBufferUpdate(e);
return true;
}

public override onTokensChanged(e: ViewTokensChangedEvent): boolean {
// TODO: This currently fires for the entire viewport whenever scrolling stops
// https://github.com/microsoft/vscode/issues/233942
for (const range of e.ranges) {
for (let i = range.fromLineNumber; i <= range.toLineNumber; i++) {
this._upToDateLines[0].delete(i);
this._upToDateLines[1].delete(i);
}
this._invalidateLineRange(range.fromLineNumber, range.toLineNumber);
}
return true;
}
Expand All @@ -177,10 +177,7 @@ export class FullFileRenderStrategy extends ViewEventHandler implements IGpuRend
}

public override onLinesChanged(e: ViewLinesChangedEvent): boolean {
for (let i = e.fromLineNumber; i < e.fromLineNumber + e.count; i++) {
this._upToDateLines[0].delete(i);
this._upToDateLines[1].delete(i);
}
this._invalidateLineRange(e.fromLineNumber, e.fromLineNumber + e.count);
return true;
}

Expand All @@ -192,6 +189,11 @@ export class FullFileRenderStrategy extends ViewEventHandler implements IGpuRend
return true;
}

public override onThemeChanged(e: ViewThemeChangedEvent): boolean {
this._invalidateAllLines();
return true;
}

public override onZonesChanged(e: ViewZonesChangedEvent): boolean {
this._invalidateAllLines();

Expand Down Expand Up @@ -221,6 +223,13 @@ export class FullFileRenderStrategy extends ViewEventHandler implements IGpuRend
}
}

private _invalidateLineRange(fromLineNumber: number, toLineNumber: number): void {
for (let i = fromLineNumber; i <= toLineNumber; i++) {
this._upToDateLines[0].delete(i);
this._upToDateLines[1].delete(i);
}
}

reset() {
this._invalidateAllLines();
for (const bufferIndex of [0, 1]) {
Expand Down Expand Up @@ -286,7 +295,15 @@ export class FullFileRenderStrategy extends ViewEventHandler implements IGpuRend
cellBuffer.fill(0);

dirtyLineStart = 1;
dirtyLineEnd = this._finalRenderedLine;
dirtyLineEnd = Math.max(dirtyLineEnd, this._finalRenderedLine);
this._finalRenderedLine = 0;
break;
}
case ViewEventType.ViewDecorationsChanged: {
cellBuffer.fill(0);

dirtyLineStart = 1;
dirtyLineEnd = Math.max(dirtyLineEnd, this._finalRenderedLine);
this._finalRenderedLine = 0;
break;
}
Expand All @@ -302,7 +319,7 @@ export class FullFileRenderStrategy extends ViewEventHandler implements IGpuRend

// Update dirty lines and final rendered line
dirtyLineStart = Math.min(dirtyLineStart, e.fromLineNumber);
dirtyLineEnd = this._finalRenderedLine;
dirtyLineEnd = Math.max(dirtyLineEnd, this._finalRenderedLine);
this._finalRenderedLine -= e.toLineNumber - e.fromLineNumber + 1;
break;
}
Expand All @@ -312,7 +329,7 @@ export class FullFileRenderStrategy extends ViewEventHandler implements IGpuRend
cellBuffer.fill(0);

dirtyLineStart = 1;
dirtyLineEnd = this._finalRenderedLine;
dirtyLineEnd = Math.max(dirtyLineEnd, this._finalRenderedLine);
this._finalRenderedLine = 0;
break;
}
Expand Down

0 comments on commit 11c4f40

Please sign in to comment.