Skip to content

Commit d9d32c0

Browse files
authored
Merge pull request microsoft#187567 from microsoft/aiday/stickyScrollSmallOptimization
Sticky Scroll setState optimization
2 parents a044e57 + f0d0d1f commit d9d32c0

File tree

1 file changed

+10
-0
lines changed

1 file changed

+10
-0
lines changed

src/vs/editor/contrib/stickyScroll/browser/stickyScrollWidget.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import * as dom from 'vs/base/browser/dom';
77
import { StandardMouseEvent } from 'vs/base/browser/mouseEvent';
88
import { createTrustedTypesPolicy } from 'vs/base/browser/trustedTypes';
9+
import { equals } from 'vs/base/common/arrays';
910
import { Disposable, DisposableStore } from 'vs/base/common/lifecycle';
1011
import 'vs/css!./stickyScroll';
1112
import { ICodeEditor, IOverlayWidget, IOverlayWidgetPosition } from 'vs/editor/browser/editorBrowser';
@@ -21,6 +22,10 @@ export class StickyScrollWidgetState {
2122
readonly lineNumbers: number[],
2223
readonly lastLineRelativePosition: number
2324
) { }
25+
26+
public equals(other: StickyScrollWidgetState | undefined): boolean {
27+
return !!other && this.lastLineRelativePosition === other.lastLineRelativePosition && equals(this.lineNumbers, other.lineNumbers);
28+
}
2429
}
2530

2631
const _ttPolicy = createTrustedTypesPolicy('stickyScrollViewLayer', { createHTML: value => value });
@@ -35,6 +40,7 @@ export class StickyScrollWidget extends Disposable implements IOverlayWidget {
3540
private _lastLineRelativePosition: number = 0;
3641
private _hoverOnLine: number = -1;
3742
private _hoverOnColumn: number = -1;
43+
private _state: StickyScrollWidgetState | undefined;
3844

3945
constructor(
4046
private readonly _editor: ICodeEditor
@@ -68,6 +74,10 @@ export class StickyScrollWidget extends Disposable implements IOverlayWidget {
6874
}
6975

7076
setState(state: StickyScrollWidgetState): void {
77+
if (state.equals(this._state)) {
78+
return;
79+
}
80+
this._state = state;
7181
dom.clearNode(this._rootDomNode);
7282
this._disposableStore.clear();
7383
this._lineNumbers.length = 0;

0 commit comments

Comments
 (0)