@@ -33,6 +33,7 @@ import { IME } from '../../../../../base/common/ime.js';
3333import { OffsetRange } from '../../../../common/core/ranges/offsetRange.js' ;
3434import { ILogService , LogLevel } from '../../../../../platform/log/common/log.js' ;
3535import { generateUuid } from '../../../../../base/common/uuid.js' ;
36+ import { inputLatency } from '../../../../../base/browser/performance.js' ;
3637
3738// Corresponds to classes in nativeEditContext.css
3839enum 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