Skip to content

Commit 431ce3a

Browse files
authored
Merge pull request #278209 from microsoft/Tyriar-patch-1
Add input latency tracking to nativeEditContext
2 parents 5dbc14f + ba2d872 commit 431ce3a

File tree

1 file changed

+8
-0
lines changed

1 file changed

+8
-0
lines changed

src/vs/editor/browser/controller/editContext/native/nativeEditContext.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import { IME } from '../../../../../base/common/ime.js';
3333
import { OffsetRange } from '../../../../common/core/ranges/offsetRange.js';
3434
import { ILogService, LogLevel } from '../../../../../platform/log/common/log.js';
3535
import { generateUuid } from '../../../../../base/common/uuid.js';
36+
import { inputLatency } from '../../../../../base/browser/performance.js';
3637

3738
// Corresponds to classes in nativeEditContext.css
3839
enum CompositionClassName {
@@ -125,12 +126,16 @@ export class NativeEditContext extends AbstractEditContext {
125126
this.logService.trace('NativeEditContext#cut (before viewController.cut)');
126127
this._viewController.cut();
127128
}));
129+
this._register(addDisposableListener(this.domNode.domNode, 'selectionchange', () => {
130+
inputLatency.onSelectionChange();
131+
}));
128132

129133
this._register(addDisposableListener(this.domNode.domNode, 'keyup', (e) => this._onKeyUp(e)));
130134
this._register(addDisposableListener(this.domNode.domNode, 'keydown', async (e) => this._onKeyDown(e)));
131135
this._register(addDisposableListener(this._imeTextArea.domNode, 'keyup', (e) => this._onKeyUp(e)));
132136
this._register(addDisposableListener(this._imeTextArea.domNode, 'keydown', async (e) => this._onKeyDown(e)));
133137
this._register(addDisposableListener(this.domNode.domNode, 'beforeinput', async (e) => {
138+
inputLatency.onBeforeInput();
134139
if (e.inputType === 'insertParagraph' || e.inputType === 'insertLineBreak') {
135140
this._onType(this._viewController, { text: '\n', replacePrevCharCnt: 0, replaceNextCharCnt: 0, positionDelta: 0 });
136141
}
@@ -166,6 +171,7 @@ export class NativeEditContext extends AbstractEditContext {
166171
this._register(editContextAddDisposableListener(this._editContext, 'characterboundsupdate', (e) => this._updateCharacterBounds(e)));
167172
let highSurrogateCharacter: string | undefined;
168173
this._register(editContextAddDisposableListener(this._editContext, 'textupdate', (e) => {
174+
inputLatency.onInput();
169175
const text = e.text;
170176
if (text.length === 1) {
171177
const charCode = text.charCodeAt(0);
@@ -355,10 +361,12 @@ export class NativeEditContext extends AbstractEditContext {
355361
// --- Private methods ---
356362

357363
private _onKeyUp(e: KeyboardEvent) {
364+
inputLatency.onKeyUp();
358365
this._viewController.emitKeyUp(new StandardKeyboardEvent(e));
359366
}
360367

361368
private _onKeyDown(e: KeyboardEvent) {
369+
inputLatency.onKeyDown();
362370
const standardKeyboardEvent = new StandardKeyboardEvent(e);
363371
// When the IME is visible, the keys, like arrow-left and arrow-right, should be used to navigate in the IME, and should not be propagated further
364372
if (standardKeyboardEvent.keyCode === KeyCode.KEY_IN_COMPOSITION) {

0 commit comments

Comments
 (0)