@@ -131,6 +131,7 @@ export class ExtensionTipsService extends Disposable implements IExtensionTipsSe
131131 this . fetchCachedDynamicWorkspaceRecommendations ( ) ;
132132 this . fetchFileBasedRecommendations ( ) ;
133133 this . fetchExperimentalRecommendations ( ) ;
134+ this . fetchImportantExeBasedRecommendation ( ) ;
134135 if ( ! this . configurationService . getValue < boolean > ( ShowRecommendationsOnlyOnDemandKey ) ) {
135136 this . fetchProactiveRecommendations ( true ) ;
136137 }
@@ -505,6 +506,14 @@ export class ExtensionTipsService extends Disposable implements IExtensionTipsSe
505506
506507 //#region important exe based extension
507508
509+ private async fetchImportantExeBasedRecommendation ( ) : Promise < void > {
510+ // Executable based recommendations carry out a lot of file stats, delay the resolution so that the startup is not affected
511+ // 3 secs for important
512+ await timeout ( 3000 ) ;
513+ await this . fetchExecutableRecommendations ( true ) ;
514+ await this . promptForImportantExeBasedExtension ( ) ;
515+ }
516+
508517 private async promptForImportantExeBasedExtension ( ) : Promise < boolean > {
509518
510519 let recommendationsToSuggest = Object . keys ( this . _importantExeBasedRecommendations ) ;
@@ -527,6 +536,19 @@ export class ExtensionTipsService extends Disposable implements IExtensionTipsSe
527536 return false ;
528537 }
529538
539+ for ( const extensionId of recommendationsToSuggest ) {
540+ const tip = this . _importantExeBasedRecommendations [ extensionId ] ;
541+
542+ /* __GDPR__
543+ "exeExtensionRecommendations:notInstalled" : {
544+ "extensionId": { "classification": "PublicNonPersonalData", "purpose": "FeatureInsight" },
545+ "exeName": { "classification": "PublicNonPersonalData", "purpose": "FeatureInsight" }
546+ }
547+ */
548+ this . telemetryService . publicLog ( 'exeExtensionRecommendations:notInstalled' , { extensionId, exeName : basename ( tip . windowsPath ! ) } ) ;
549+ }
550+
551+
530552 const storageKey = 'extensionsAssistant/workspaceRecommendationsIgnore' ;
531553 const config = this . configurationService . getValue < IExtensionsConfiguration > ( ConfigurationKey ) ;
532554
@@ -1008,9 +1030,6 @@ export class ExtensionTipsService extends Disposable implements IExtensionTipsSe
10081030 // 10 sec for regular extensions
10091031 // 3 secs for important
10101032
1011- const importantExeBasedRecommendations = timeout ( calledDuringStartup ? 3000 : 0 ) . then ( _ => this . fetchExecutableRecommendations ( true ) ) ;
1012- importantExeBasedRecommendations . then ( _ => this . promptForImportantExeBasedExtension ( ) ) ;
1013-
10141033 fetchPromise = timeout ( calledDuringStartup ? 10000 : 0 ) . then ( _ => Promise . all ( [ this . fetchDynamicWorkspaceRecommendations ( ) , this . fetchExecutableRecommendations ( false ) , importantExeBasedRecommendations ] ) ) ;
10151034
10161035 }
0 commit comments