@@ -280,6 +280,17 @@ <h2>Comparing <span id="stat-header">{{stat}}</span> between <span id="before">{
280
280
</ li >
281
281
</ ul >
282
282
</ div >
283
+ < div class ="section ">
284
+ < div class ="section-heading "> < span > Show only significant changes</ span >
285
+ < span class ="tooltip "> ?
286
+ < span class ="tooltiptext ">
287
+ Whether to filter out all benchmarks that do not show significant changes. A significant
288
+ change is any change above 0.2% for non-noisy benchmarks and 1.0% for noisy ones.
289
+ </ span >
290
+ </ span >
291
+ </ div >
292
+ < input type ="checkbox " v-model ="filter.showOnlySignificant " style ="margin-left: 20px; " />
293
+ </ div >
283
294
</ div >
284
295
</ fieldset >
285
296
< div v-if ="data " id ="content " style ="margin-top: 15px ">
@@ -288,15 +299,15 @@ <h2>Comparing <span id="stat-header">{{stat}}</span> between <span id="before">{
288
299
< template v-for ="bench in benches ">
289
300
< tr data-field-start ="true ">
290
301
< th >
291
- < details class =" toggle-table " v-on:toggle =" benchGroupToggle " >
302
+ < details >
292
303
< summary > {{ trimBenchName(bench.name) }}</ summary >
293
304
</ details >
294
305
</ th >
295
- < td > avg: < span v-bind:class ="percentClass(bench.avgPct) "> {{bench.avgPct}}%</ span > </ td >
296
306
< td > min: < span v-bind:class ="percentClass(bench.minPct) "> {{bench.minPct}}%</ span > </ td >
297
307
< td > max: < span
298
308
v-bind:class ="percentClass(bench.maxPct) "> {{bench.maxPct}}%{{isDodgyBench(bench)
299
309
? "?" : ""}}</ span > </ td >
310
+ < td > </ td >
300
311
</ tr >
301
312
< template v-for ="run in bench.variants ">
302
313
< tr >
@@ -314,9 +325,9 @@ <h2>Comparing <span id="stat-header">{{stat}}</span> between <span id="before">{
314
325
< td >
315
326
< a
316
327
v-bind:href ="percentLink(data.b.commit, data.a.commit, bench.name, run.casename) ">
317
- < span v-bind:class ="percentClass(run.percent) "> {{ run.percent }}%{{run.isDodgy ?
318
- "?"
319
- : ""}} </ span >
328
+ < span v-bind:class ="percentClass(run.percent) ">
329
+ {{ run.percent }}%{{run.isDodgy ? "?" : ""}}
330
+ </ span >
320
331
</ a >
321
332
</ td >
322
333
</ tr >
@@ -373,6 +384,7 @@ <h2>Comparing <span id="stat-header">{{stat}}</span> between <span id="before">{
373
384
data : {
374
385
filter : {
375
386
name : null ,
387
+ showOnlySignificant : true ,
376
388
cache : {
377
389
full : true ,
378
390
incrFull : true ,
@@ -419,6 +431,10 @@ <h2>Comparing <span id="stat-header">{{stat}}</span> between <span id="before">{
419
431
const key = d [ 0 ] ;
420
432
const datumA = d [ 1 ] ;
421
433
const datumB = data . b . data [ name ] . find ( x => x [ 0 ] == key ) [ 1 ] ;
434
+ let percent = ( 100 * ( datumB - datumA ) / datumA ) . toFixed ( 1 ) ;
435
+ if ( percent === "-0.0" ) {
436
+ percent = "0.0" ;
437
+ }
422
438
423
439
let isDodgy = false ;
424
440
if ( data . variance ) {
@@ -430,7 +446,7 @@ <h2>Comparing <span id="stat-header">{{stat}}</span> between <span id="before">{
430
446
casename : key ,
431
447
datumA,
432
448
datumB,
433
- percent : ( 100 * ( datumB - datumA ) / datumA ) . toFixed ( 1 ) ,
449
+ percent,
434
450
isDodgy,
435
451
} ) ;
436
452
}
@@ -442,19 +458,23 @@ <h2>Comparing <span id="stat-header">{{stat}}</span> between <span id="before">{
442
458
let benches =
443
459
Object . keys ( data . a . data ) .
444
460
filter ( n => filter . name && filter . name . trim ( ) ? n . includes ( filter . name . trim ( ) ) : true ) .
445
- map ( name => { return { name, variants : toVariants ( name ) } } ) . filter ( b => b . variants . length > 0 ) ;
446
-
447
- for ( let bench of benches ) {
448
- let pcts = bench . variants . map ( field => parseFloat ( field . percent ) )
449
- . filter ( p => p != undefined && p != null ) ;
450
- bench . maxPct = Math . max ( ...pcts ) . toFixed ( 1 ) ;
451
- bench . minPct = Math . min ( ...pcts ) . toFixed ( 1 ) ;
452
- let sum = pcts . reduce ( ( a , b ) => a + b , 0 ) ;
453
- bench . avgPct = ( sum / pcts . length ) . toFixed ( 1 ) ;
454
- bench . maxCasenameLen = Math . max ( ...bench . variants . map ( f => f . casename . length ) ) ;
455
- }
456
- const largestChange = a => Math . max ( Math . abs ( a . minPct ) , Math . abs ( a . maxPct ) ) ;
461
+ map ( name => {
462
+ const variants = toVariants ( name ) . filter ( v => filter . showOnlySignificant ? isSignificant ( v ) : true ) ;
463
+ const pcts = variants . map ( field => parseFloat ( field . percent ) ) ;
464
+ const maxPct = Math . max ( ...pcts ) . toFixed ( 1 ) ;
465
+ const minPct = Math . min ( ...pcts ) . toFixed ( 1 ) ;
466
+ const maxCasenameLen = Math . max ( ...variants . map ( f => f . casename . length ) ) ;
467
+ return {
468
+ name,
469
+ variants,
470
+ maxPct,
471
+ minPct,
472
+ maxCasenameLen,
473
+ } ;
474
+ } ) .
475
+ filter ( b => b . variants . length > 0 ) ;
457
476
477
+ const largestChange = a => Math . max ( Math . abs ( a . minPct ) , Math . abs ( a . maxPct ) ) ;
458
478
benches . sort ( ( a , b ) => largestChange ( b ) - largestChange ( a ) ) ;
459
479
460
480
return benches ;
@@ -543,10 +563,6 @@ <h2>Comparing <span id="stat-header">{{stat}}</span> between <span id="before">{
543
563
commitLink ( commit ) {
544
564
return `https://github.com/rust-lang/rust/commit/${ commit } ` ;
545
565
} ,
546
- benchGroupToggle ( e ) {
547
- const element = e . target ;
548
- toggleBenchGroup ( element ) ;
549
- } ,
550
566
formatDate ( date ) {
551
567
date = new Date ( date ) ;
552
568
function padStr ( i ) {
@@ -563,34 +579,17 @@ <h2>Comparing <span id="stat-header">{{stat}}</span> between <span id="before">{
563
579
}
564
580
return result ;
565
581
} ,
566
- isDodgyBench ( bench ) {
567
- return bench . variants . some ( f => f . isDodgy ) ;
568
- } ,
569
582
} ,
570
- watch : {
571
- data ( newVal , oldVal ) {
572
- if ( newVal && ! oldVal ) {
573
- this . $nextTick ( ( ) => {
574
- for ( let element of document . querySelectorAll ( ".toggle-table" ) ) {
575
- toggleBenchGroup ( element ) ;
576
- }
577
- } ) ;
578
- }
579
- }
580
- }
581
583
} ) ;
582
584
583
- function toggleBenchGroup ( element ) {
584
- let next = element . parentElement . parentElement . nextElementSibling ;
585
- let inBody = [ ]
586
- while ( next && next . getAttribute ( "data-field-start" ) !== "true" ) {
587
- if ( element . open ) {
588
- next . style . display = "" ;
589
- } else {
590
- next . style . display = "none" ;
591
- }
592
- next = next . nextElementSibling ;
585
+ function isSignificant ( variant ) {
586
+ const percent = Math . abs ( variant . percent ) ;
587
+ if ( variant . isDodgy ) {
588
+ return percent > 1.0 ;
589
+ } else {
590
+ return percent > 0.2 ;
593
591
}
592
+
594
593
}
595
594
596
595
function toggleFilters ( id , toggle ) {
0 commit comments