@@ -552,6 +552,7 @@ export async function activate(context: ExtensionContext): Promise<PythonEnviron
552552 */
553553 setImmediate ( async ( ) => {
554554 let failureStage = 'nativeFinder' ;
555+ const stageWatch = new StopWatch ( ) ;
555556 // Watchdog: fires if setup hasn't completed within 120s, indicating a likely hang
556557 const SETUP_HANG_TIMEOUT_MS = 120_000 ;
557558 let hangWatchdogActive = true ;
@@ -568,7 +569,11 @@ export async function activate(context: ExtensionContext): Promise<PythonEnviron
568569 }
569570 hangWatchdogActive = false ;
570571 traceError ( `Setup appears hung during stage: ${ failureStage } ` ) ;
571- sendTelemetryEvent ( EventNames . SETUP_HANG_DETECTED , start . elapsedTime , { failureStage } ) ;
572+ sendTelemetryEvent (
573+ EventNames . SETUP_HANG_DETECTED ,
574+ { duration : start . elapsedTime , stageDuration : stageWatch . elapsedTime } ,
575+ { failureStage } ,
576+ ) ;
572577 } , SETUP_HANG_TIMEOUT_MS ) ;
573578 context . subscriptions . push ( { dispose : clearHangWatchdog } ) ;
574579 try {
@@ -592,6 +597,7 @@ export async function activate(context: ExtensionContext): Promise<PythonEnviron
592597 sysPythonManager . resolve ( sysMgr ) ;
593598 // Each manager registers independently — one failure must not block the others.
594599 failureStage = 'managerRegistration' ;
600+ stageWatch . reset ( ) ;
595601 await Promise . all ( [
596602 safeRegister (
597603 'system' ,
@@ -611,14 +617,17 @@ export async function activate(context: ExtensionContext): Promise<PythonEnviron
611617 ] ) ;
612618
613619 failureStage = 'envSelection' ;
620+ stageWatch . reset ( ) ;
614621 await applyInitialEnvironmentSelection ( envManagers , projectManager , nativeFinder , api , start . elapsedTime ) ;
615622
616623 // Register manager-agnostic terminal watcher for package-modifying commands
617624 failureStage = 'terminalWatcher' ;
625+ stageWatch . reset ( ) ;
618626 registerTerminalPackageWatcher ( api , terminalActivation , outputChannel , context . subscriptions ) ;
619627
620628 // Register listener for interpreter settings changes for interpreter re-selection
621629 failureStage = 'settingsListener' ;
630+ stageWatch . reset ( ) ;
622631 context . subscriptions . push (
623632 registerInterpreterSettingsChangeListener ( envManagers , projectManager , nativeFinder , api ) ,
624633 ) ;
0 commit comments