@@ -32,6 +32,13 @@ const colors = { Red: 31, Green: 32, Yellow: 33, White: 37, BrightWhite: 90, Bri
3232const color = ( text , number ) => number ? `\x1b[${ number } m${ text } \x1b[0m` : text ;
3333const limit = ( val , precision = 3 ) => parseFloat ( val . toPrecision ( precision ) ) ;
3434const toPercent = val => ( 100 * val ) . toPrecision ( 3 ) ;
35+ const toPercentRound = val => Math . round ( 100 * val ) ;
36+
37+ const noiseThreshold = ( val , threshold ) => {
38+ const sign = val < 0 ? - 1 : 1 ;
39+ const magnitude = Math . abs ( val ) ;
40+ return sign * Math . max ( 0 , magnitude - threshold ) / ( 1 - threshold ) ;
41+ } ;
3542
3643const engineCapture = ( engine ) => ( {
3744 timestamp : limit ( engine . timing . timestamp ) ,
@@ -231,13 +238,19 @@ const comparisonReport = (capturesDev, capturesBuild, buildVersion, save) => {
231238 let totalTimeDev = 0 ;
232239 let totalOverlapBuild = 0 ;
233240 let totalOverlapDev = 0 ;
241+ let totalMemoryBuild = 0 ;
242+ let totalMemoryDev = 0 ;
234243
235244 const capturePerformance = Object . entries ( capturesDev ) . map ( ( [ name ] ) => {
236245 totalTimeBuild += capturesBuild [ name ] . duration ;
237246 totalTimeDev += capturesDev [ name ] . duration ;
247+
238248 totalOverlapBuild += capturesBuild [ name ] . overlap ;
239249 totalOverlapDev += capturesDev [ name ] . overlap ;
240250
251+ totalMemoryBuild += capturesBuild [ name ] . memory ;
252+ totalMemoryDev += capturesDev [ name ] . memory ;
253+
241254 const changedIntrinsics = ! equals ( capturesDev [ name ] . intrinsic , capturesBuild [ name ] . intrinsic ) ;
242255 if ( changedIntrinsics ) {
243256 capturesDev [ name ] . changedIntrinsics = true ;
@@ -254,10 +267,8 @@ const comparisonReport = (capturesDev, capturesBuild, buildVersion, save) => {
254267 capturePerformance . sort ( ( a , b ) => a . name . localeCompare ( b . name ) ) ;
255268 similarityEntries . sort ( ( a , b ) => a [ 1 ] - b [ 1 ] ) ;
256269
257- let perfChange = 1 - ( totalTimeDev / totalTimeBuild ) ;
258-
259- const perfChangeThreshold = 0.01 ;
260- perfChange = Math . abs ( perfChange ) > perfChangeThreshold ? perfChange : 0 ;
270+ let perfChange = noiseThreshold ( 1 - ( totalTimeDev / totalTimeBuild ) , 0.01 ) ;
271+ let memoryChange = noiseThreshold ( ( totalMemoryDev / totalMemoryBuild ) - 1 , 0.01 ) ;
261272
262273 let similarityAvg = 0 ;
263274 similarityEntries . forEach ( ( [ _ , similarity ] ) => {
@@ -275,9 +286,11 @@ const comparisonReport = (capturesDev, capturesBuild, buildVersion, save) => {
275286 `\n\n${ format ( 'Similarity' , colors . White ) } ` ,
276287 `${ format ( toPercent ( similarityAvg ) , similarityAvg === 1 ? colors . Green : colors . Yellow ) } %` ,
277288 `${ format ( 'Performance' , colors . White ) } ` ,
278- `${ format ( ( perfChange >= 0 ? '+' : '' ) + toPercent ( perfChange ) , perfChange >= 0 ? colors . Green : colors . Red ) } %` ,
289+ `${ format ( ( perfChange >= 0 ? '+' : '-' ) + toPercentRound ( Math . abs ( perfChange ) ) , perfChange >= 0 ? colors . Green : colors . Red ) } %` ,
290+ `${ format ( 'Memory' , colors . White ) } ` ,
291+ `${ format ( ( memoryChange >= 0 ? '+' : '-' ) + toPercentRound ( Math . abs ( memoryChange ) ) , memoryChange <= 0 ? colors . Green : colors . Red ) } %` ,
279292 `${ format ( 'Overlap' , colors . White ) } ` ,
280- `${ format ( ( overlapChange >= 0 ? '+' : '' ) + toPercent ( overlapChange ) , overlapChange > 0 ? colors . Red : colors . Green ) } %` ,
293+ `${ format ( ( overlapChange >= 0 ? '+' : '- ' ) + toPercent ( Math . abs ( overlapChange ) ) , overlapChange <= 0 ? colors . Green : colors . Red ) } %` ,
281294 capturePerformance . reduce ( ( output , p , i ) => {
282295 output += `${ p . name } ` ;
283296 output += `${ similarityRatings ( similaritys [ p . name ] ) } ` ;
0 commit comments