@@ -1106,10 +1106,10 @@ function reportMacCrashes(): void {
11061106 fs . readFile ( path . resolve ( crashFolder , filename ) , 'utf8' , ( err , data ) => {
11071107 if ( err ) {
11081108 // Try again?
1109- fs . readFile ( path . resolve ( crashFolder , filename ) , 'utf8' , handleCrashFileRead ) ;
1109+ fs . readFile ( path . resolve ( crashFolder , filename ) , 'utf8' , handleMacCrashFileRead ) ;
11101110 return ;
11111111 }
1112- handleCrashFileRead ( err , data ) ;
1112+ handleMacCrashFileRead ( err , data ) ;
11131113 } ) ;
11141114 } , 5000 ) ;
11151115 } ) ;
@@ -1120,15 +1120,22 @@ function reportMacCrashes(): void {
11201120 }
11211121}
11221122
1123- function logCrashTelemetry ( data : string ) : void {
1123+ let previousMacCrashData : string ;
1124+ let previousMacCrashCount : number = 0 ;
1125+
1126+ function logMacCrashTelemetry ( data : string ) : void {
11241127 const crashObject : { [ key : string ] : string } = { } ;
1128+ const crashCountObject : { [ key : string ] : number } = { } ;
11251129 crashObject [ "CrashingThreadCallStack" ] = data ;
1126- telemetry . logLanguageServerEvent ( "MacCrash" , crashObject , undefined ) ;
1130+ previousMacCrashCount = data === previousMacCrashData ? previousMacCrashCount + 1 : 0 ;
1131+ previousMacCrashData = data ;
1132+ crashCountObject [ "CrashCount" ] = previousMacCrashCount ;
1133+ telemetry . logLanguageServerEvent ( "MacCrash" , crashObject , crashCountObject ) ;
11271134}
11281135
1129- function handleCrashFileRead ( err : NodeJS . ErrnoException | undefined | null , data : string ) : void {
1136+ function handleMacCrashFileRead ( err : NodeJS . ErrnoException | undefined | null , data : string ) : void {
11301137 if ( err ) {
1131- return logCrashTelemetry ( "readFile: " + err . code ) ;
1138+ return logMacCrashTelemetry ( "readFile: " + err . code ) ;
11321139 }
11331140
11341141 // Extract the crashing process version, because the version might not match
@@ -1145,15 +1152,15 @@ function handleCrashFileRead(err: NodeJS.ErrnoException | undefined | null, data
11451152 const crashStart : string = " Crashed:" ;
11461153 let startCrash : number = data . indexOf ( crashStart ) ;
11471154 if ( startCrash < 0 ) {
1148- return logCrashTelemetry ( "No crash start" ) ;
1155+ return logMacCrashTelemetry ( "No crash start" ) ;
11491156 }
11501157 startCrash += crashStart . length + 1 ; // Skip past crashStart.
11511158 let endCrash : number = data . indexOf ( "Thread " , startCrash ) ;
11521159 if ( endCrash < 0 ) {
11531160 endCrash = data . length - 1 ; // Not expected, but just in case.
11541161 }
11551162 if ( endCrash <= startCrash ) {
1156- return logCrashTelemetry ( "No crash end" ) ;
1163+ return logMacCrashTelemetry ( "No crash end" ) ;
11571164 }
11581165 data = data . substr ( startCrash , endCrash - startCrash ) ;
11591166
@@ -1191,7 +1198,7 @@ function handleCrashFileRead(err: NodeJS.ErrnoException | undefined | null, data
11911198 data = data . substr ( 0 , 8189 ) + "..." ;
11921199 }
11931200
1194- logCrashTelemetry ( data ) ;
1201+ logMacCrashTelemetry ( data ) ;
11951202}
11961203
11971204export function deactivate ( ) : Thenable < void > {
0 commit comments