@@ -32,6 +32,13 @@ const colors = { Red: 31, Green: 32, Yellow: 33, White: 37, BrightWhite: 90, Bri
32
32
const color = ( text , number ) => number ? `\x1b[${ number } m${ text } \x1b[0m` : text ;
33
33
const limit = ( val , precision = 3 ) => parseFloat ( val . toPrecision ( precision ) ) ;
34
34
const 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
+ } ;
35
42
36
43
const engineCapture = ( engine ) => ( {
37
44
timestamp : limit ( engine . timing . timestamp ) ,
@@ -231,13 +238,19 @@ const comparisonReport = (capturesDev, capturesBuild, buildVersion, save) => {
231
238
let totalTimeDev = 0 ;
232
239
let totalOverlapBuild = 0 ;
233
240
let totalOverlapDev = 0 ;
241
+ let totalMemoryBuild = 0 ;
242
+ let totalMemoryDev = 0 ;
234
243
235
244
const capturePerformance = Object . entries ( capturesDev ) . map ( ( [ name ] ) => {
236
245
totalTimeBuild += capturesBuild [ name ] . duration ;
237
246
totalTimeDev += capturesDev [ name ] . duration ;
247
+
238
248
totalOverlapBuild += capturesBuild [ name ] . overlap ;
239
249
totalOverlapDev += capturesDev [ name ] . overlap ;
240
250
251
+ totalMemoryBuild += capturesBuild [ name ] . memory ;
252
+ totalMemoryDev += capturesDev [ name ] . memory ;
253
+
241
254
const changedIntrinsics = ! equals ( capturesDev [ name ] . intrinsic , capturesBuild [ name ] . intrinsic ) ;
242
255
if ( changedIntrinsics ) {
243
256
capturesDev [ name ] . changedIntrinsics = true ;
@@ -254,10 +267,8 @@ const comparisonReport = (capturesDev, capturesBuild, buildVersion, save) => {
254
267
capturePerformance . sort ( ( a , b ) => a . name . localeCompare ( b . name ) ) ;
255
268
similarityEntries . sort ( ( a , b ) => a [ 1 ] - b [ 1 ] ) ;
256
269
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 ) ;
261
272
262
273
let similarityAvg = 0 ;
263
274
similarityEntries . forEach ( ( [ _ , similarity ] ) => {
@@ -275,9 +286,11 @@ const comparisonReport = (capturesDev, capturesBuild, buildVersion, save) => {
275
286
`\n\n${ format ( 'Similarity' , colors . White ) } ` ,
276
287
`${ format ( toPercent ( similarityAvg ) , similarityAvg === 1 ? colors . Green : colors . Yellow ) } %` ,
277
288
`${ 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 ) } %` ,
279
292
`${ 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 ) } %` ,
281
294
capturePerformance . reduce ( ( output , p , i ) => {
282
295
output += `${ p . name } ` ;
283
296
output += `${ similarityRatings ( similaritys [ p . name ] ) } ` ;
0 commit comments