Merge pull request #6122 from xtermjs/fix_handleBufferLinesTrim

perf: optimize DecorationService._handleBufferLinesTrim
This commit is contained in:
jerch
2026-08-20 18:13:02 +02:00
committed by GitHub
2 changed files with 11 additions and 16 deletions
+10 -15
View File
@@ -27,11 +27,13 @@ export class Emitter<T> {
}
const entry = { fn: listener, thisArgs };
this._listeners = this._listeners.slice();
this._listeners.push(entry);
const result = toDisposable(() => {
const idx = this._listeners.indexOf(entry);
if (idx !== -1) {
this._listeners = this._listeners.slice();
this._listeners.splice(idx, 1);
}
});
@@ -50,23 +52,16 @@ export class Emitter<T> {
}
public fire(event: T): void {
if (this._disposed) {
if (this._disposed || !this._listeners.length) {
return;
}
switch (this._listeners.length) {
case 0: return;
case 1: {
const { fn, thisArgs } = this._listeners[0];
fn.call(thisArgs, event);
return;
}
default: {
// Snapshot listeners to allow modifications during iteration (2+ listeners)
const listeners = this._listeners.slice();
for (const { fn, thisArgs } of listeners) {
fn.call(thisArgs, event);
}
}
if (this._listeners.length === 1) {
this._listeners[0].fn.call(this._listeners[0].thisArgs, event);
return;
}
const listeners = this._listeners;
for (let i = 0, len = listeners.length; i < len; ++i) {
listeners[i].fn.call(listeners[i].thisArgs, event);
}
}
+1 -1
View File
@@ -214,7 +214,7 @@ export class DecorationLineCache extends Disposable {
}
private _handleBufferLinesTrim(amount: number): void {
if (amount <= 0) {
if (amount <= 0 || !this._decorationsByLine.size) {
return;
}
const newMap = new Map<number, IInternalDecoration[]>();