mirror of
https://github.com/Microsoft/vscode
synced 2024-10-12 22:37:41 +00:00
debounce onMarkerChanged-event for better perf, #11976
This commit is contained in:
parent
468ea77686
commit
13451fa68c
|
@ -9,7 +9,7 @@ import network = require('vs/base/common/network');
|
|||
import strings = require('vs/base/common/strings');
|
||||
import collections = require('vs/base/common/collections');
|
||||
import URI from 'vs/base/common/uri';
|
||||
import Event, {Emitter} from 'vs/base/common/event';
|
||||
import Event, {Emitter, debounceEvent} from 'vs/base/common/event';
|
||||
import Severity from 'vs/base/common/severity';
|
||||
import {IMarkerService, IMarkerData, IResourceMarker, IMarker, MarkerStatistics} from './markers';
|
||||
|
||||
|
@ -49,15 +49,21 @@ export interface MarkerData {
|
|||
|
||||
|
||||
export class MarkerService implements IMarkerService {
|
||||
|
||||
public _serviceBrand: any;
|
||||
|
||||
private _data: { [k: string]: IMarkerData[] };
|
||||
|
||||
private _stats: MarkerStatistics;
|
||||
private _onMarkerChanged: Emitter<URI[]>;
|
||||
|
||||
private _onMarkerChanged = new Emitter<URI[]>();
|
||||
|
||||
private _onMarkerChangedEvent: Event<URI[]> = debounceEvent(this._onMarkerChanged.event, MarkerService._debouncer, 0);
|
||||
|
||||
|
||||
constructor() {
|
||||
this._data = Object.create(null);
|
||||
this._stats = this._emptyStats();
|
||||
this._onMarkerChanged = new Emitter<URI[]>();
|
||||
}
|
||||
|
||||
public getStatistics(): MarkerStatistics {
|
||||
|
@ -67,7 +73,7 @@ export class MarkerService implements IMarkerService {
|
|||
// ---- IMarkerService ------------------------------------------
|
||||
|
||||
public get onMarkerChanged(): Event<URI[]> {
|
||||
return this._onMarkerChanged ? this._onMarkerChanged.event : null;
|
||||
return this._onMarkerChangedEvent;
|
||||
}
|
||||
|
||||
public changeOne(owner: string, resource: URI, markers: IMarkerData[]): void {
|
||||
|
@ -294,4 +300,22 @@ export class MarkerService implements IMarkerService {
|
|||
data.endColumn = data.endColumn > 0 ? data.endColumn : data.startColumn;
|
||||
return true;
|
||||
}
|
||||
|
||||
// --- event debounce logic
|
||||
|
||||
private static _dedupeMap: { [uri: string]: boolean };
|
||||
|
||||
private static _debouncer(last: URI[], event: URI[]): URI[] {
|
||||
if (!last) {
|
||||
MarkerService._dedupeMap = Object.create(null);
|
||||
last = [];
|
||||
}
|
||||
for (const uri of event) {
|
||||
if (MarkerService._dedupeMap[uri.toString()] === void 0) {
|
||||
MarkerService._dedupeMap[uri.toString()] = true;
|
||||
last.push(uri);
|
||||
}
|
||||
}
|
||||
return last;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue