@@ -43,30 +43,111 @@ export interface IExtensionAPI {
4343 // _extensionAPIBrand: any;
4444}
4545
46- export class ActivatedExtension {
46+ export class ExtensionActivationTimes {
4747
48- activationFailed : boolean ;
49- module : IExtensionModule ;
50- exports : IExtensionAPI ;
51- subscriptions : IDisposable [ ] ;
48+ public static NONE = new ExtensionActivationTimes ( - 1 , - 1 , - 1 ) ;
49+
50+ public readonly codeLoadingTime : number ;
51+ public readonly activateCallTime : number ;
52+ public readonly activateResolvedTime : number ;
5253
53- constructor ( activationFailed : boolean , module : IExtensionModule , exports : IExtensionAPI , subscriptions : IDisposable [ ] ) {
54+ constructor ( codeLoadingTime : number , activateCallTime : number , activateResolvedTime : number ) {
55+ this . codeLoadingTime = codeLoadingTime ;
56+ this . activateCallTime = activateCallTime ;
57+ this . activateResolvedTime = activateResolvedTime ;
58+ }
59+ }
60+
61+ export class ExtensionActivationTimesBuilder {
62+
63+ private _codeLoadingStart : number ;
64+ private _codeLoadingStop : number ;
65+ private _activateCallStart : number ;
66+ private _activateCallStop : number ;
67+ private _activateResolveStart : number ;
68+ private _activateResolveStop : number ;
69+
70+ constructor ( ) {
71+ this . _codeLoadingStart = - 1 ;
72+ this . _codeLoadingStop = - 1 ;
73+ this . _activateCallStart = - 1 ;
74+ this . _activateCallStop = - 1 ;
75+ this . _activateResolveStart = - 1 ;
76+ this . _activateResolveStop = - 1 ;
77+ }
78+
79+ private _delta ( start : number , stop : number ) : number {
80+ if ( start === - 1 || stop === - 1 ) {
81+ return - 1 ;
82+ }
83+ return stop - start ;
84+ }
85+
86+ public build ( ) : ExtensionActivationTimes {
87+ return new ExtensionActivationTimes (
88+ this . _delta ( this . _codeLoadingStart , this . _codeLoadingStop ) ,
89+ this . _delta ( this . _activateCallStart , this . _activateCallStop ) ,
90+ this . _delta ( this . _activateResolveStart , this . _activateResolveStop )
91+ ) ;
92+ }
93+
94+ public codeLoadingStart ( ) : void {
95+ this . _codeLoadingStart = Date . now ( ) ;
96+ }
97+
98+ public codeLoadingStop ( ) : void {
99+ this . _codeLoadingStop = Date . now ( ) ;
100+ }
101+
102+ public activateCallStart ( ) : void {
103+ this . _activateCallStart = Date . now ( ) ;
104+ }
105+
106+ public activateCallStop ( ) : void {
107+ this . _activateCallStop = Date . now ( ) ;
108+ }
109+
110+ public activateResolveStart ( ) : void {
111+ this . _activateResolveStart = Date . now ( ) ;
112+ }
113+
114+ public activateResolveStop ( ) : void {
115+ this . _activateResolveStop = Date . now ( ) ;
116+ }
117+ }
118+
119+ export class ActivatedExtension {
120+
121+ public readonly activationFailed : boolean ;
122+ public readonly activationTimes : ExtensionActivationTimes ;
123+ public readonly module : IExtensionModule ;
124+ public readonly exports : IExtensionAPI ;
125+ public readonly subscriptions : IDisposable [ ] ;
126+
127+ constructor (
128+ activationFailed : boolean ,
129+ activationTimes : ExtensionActivationTimes ,
130+ module : IExtensionModule ,
131+ exports : IExtensionAPI ,
132+ subscriptions : IDisposable [ ]
133+ ) {
54134 this . activationFailed = activationFailed ;
135+ this . activationTimes = activationTimes ;
55136 this . module = module ;
56137 this . exports = exports ;
57138 this . subscriptions = subscriptions ;
58139 }
59140}
60141
61142export class EmptyExtension extends ActivatedExtension {
62- constructor ( ) {
63- super ( false , { activate : undefined , deactivate : undefined } , undefined , [ ] ) ;
143+ constructor ( activationTimes : ExtensionActivationTimes ) {
144+ super ( false , activationTimes , { activate : undefined , deactivate : undefined } , undefined , [ ] ) ;
64145 }
65146}
66147
67148export class FailedExtension extends ActivatedExtension {
68- constructor ( ) {
69- super ( true , { activate : undefined , deactivate : undefined } , undefined , [ ] ) ;
149+ constructor ( activationTimes : ExtensionActivationTimes ) {
150+ super ( true , activationTimes , { activate : undefined , deactivate : undefined } , undefined , [ ] ) ;
70151 }
71152}
72153
@@ -140,7 +221,7 @@ export class ExtensionsActivator {
140221 if ( ! depDesc ) {
141222 // Error condition 1: unknown dependency
142223 this . _host . showMessage ( Severity . Error , nls . localize ( 'unknownDep' , "Extension `{1}` failed to activate. Reason: unknown dependency `{0}`." , depId , currentExtension . id ) ) ;
143- this . _activatedExtensions [ currentExtension . id ] = new FailedExtension ( ) ;
224+ this . _activatedExtensions [ currentExtension . id ] = new FailedExtension ( ExtensionActivationTimes . NONE ) ;
144225 return ;
145226 }
146227
@@ -149,7 +230,7 @@ export class ExtensionsActivator {
149230 if ( dep . activationFailed ) {
150231 // Error condition 2: a dependency has already failed activation
151232 this . _host . showMessage ( Severity . Error , nls . localize ( 'failedDep1' , "Extension `{1}` failed to activate. Reason: dependency `{0}` failed to activate." , depId , currentExtension . id ) ) ;
152- this . _activatedExtensions [ currentExtension . id ] = new FailedExtension ( ) ;
233+ this . _activatedExtensions [ currentExtension . id ] = new FailedExtension ( ExtensionActivationTimes . NONE ) ;
153234 return ;
154235 }
155236 } else {
@@ -182,7 +263,7 @@ export class ExtensionsActivator {
182263 for ( let i = 0 , len = extensionDescriptions . length ; i < len ; i ++ ) {
183264 // Error condition 3: dependency loop
184265 this . _host . showMessage ( Severity . Error , nls . localize ( 'failedDep2' , "Extension `{0}` failed to activate. Reason: more than 10 levels of dependencies (most likely a dependency loop)." , extensionDescriptions [ i ] . id ) ) ;
185- this . _activatedExtensions [ extensionDescriptions [ i ] . id ] = new FailedExtension ( ) ;
266+ this . _activatedExtensions [ extensionDescriptions [ i ] . id ] = new FailedExtension ( ExtensionActivationTimes . NONE ) ;
186267 }
187268 return TPromise . as ( void 0 ) ;
188269 }
@@ -230,7 +311,7 @@ export class ExtensionsActivator {
230311 console . error ( 'Activating extension `' + extensionDescription . id + '` failed: ' , err . message ) ;
231312 console . log ( 'Here is the error stack: ' , err . stack ) ;
232313 // Treat the extension as being empty
233- return new FailedExtension ( ) ;
314+ return new FailedExtension ( ExtensionActivationTimes . NONE ) ;
234315 } ) . then ( ( x : ActivatedExtension ) => {
235316 this . _activatedExtensions [ extensionDescription . id ] = x ;
236317 delete this . _activatingExtensions [ extensionDescription . id ] ;
0 commit comments