1+
12var Comparison = ( function ( window ) {
23
34// Localize globals
@@ -17,7 +18,9 @@ var COLORS = [
1718function getColor ( i ) { return COLORS [ i % COLORS . length ] ; }
1819
1920function getExeLabel ( key ) {
20- return $ ( "label[for='exe_" + key . replace ( / : / g, '\\:' ) + "']" ) . text ( ) . trim ( ) ;
21+ return $ ( "input[name='executables']" )
22+ . filter ( function ( ) { return $ ( this ) . val ( ) === key ; } )
23+ . next ( 'label' ) . text ( ) . trim ( ) ;
2124}
2225
2326function getConfiguration ( ) {
@@ -34,76 +37,103 @@ function getConfiguration() {
3437function updateGraphTitle ( exes , enviros , bens , baseline , chart , chartTitles ) {
3538 var $title = $ ( "#graph-title" ) ;
3639
37- if ( enviros . length === 1 && exes . length === 2 && baseline !== "none" &&
38- chart !== "stacked bars" && compdata ) {
40+ var isPair = ( exes . length === 2 && enviros . length === 1 ) ||
41+ ( exes . length === 1 && enviros . length === 2 ) ;
42+ if ( isPair && chart !== "stacked bars" && compdata ) {
43+ // Resolve which (exe, env) pair is "other" vs "base"
44+ var otherExe , otherEnv , baselineExe , baselineEnv ;
3945
40- var baselineExe = baseline , baselineEnv = null ;
41- if ( baseline . indexOf ( '@' ) !== - 1 ) {
42- var bparts = baseline . split ( '@' ) ;
43- baselineExe = bparts [ 0 ] ;
44- baselineEnv = bparts [ 1 ] ;
46+ if ( exes . length === 1 && enviros . length === 2 ) {
47+ // Same exe, two environments — only show geomean when an explicit baseline env is set
48+ if ( baseline === "none" ) {
49+ $title . text ( chartTitles . join ( ' / ' ) ) ;
50+ return ;
51+ }
52+ otherExe = exes [ 0 ] ;
53+ baselineExe = exes [ 0 ] ;
54+ if ( baseline . indexOf ( '@' ) !== - 1 ) {
55+ var bparts = baseline . split ( '@' ) ;
56+ baselineEnv = bparts [ 1 ] ;
57+ otherEnv = enviros . filter ( function ( e ) { return e !== baselineEnv ; } ) [ 0 ] || enviros [ 1 ] ;
58+ } else {
59+ baselineEnv = enviros [ 0 ] ;
60+ otherEnv = enviros [ 1 ] ;
61+ }
62+ } else {
63+ // Two exes, one environment
64+ otherEnv = enviros [ 0 ] ;
65+ baselineEnv = null ;
66+ if ( baseline !== "none" && baseline . indexOf ( '@' ) !== - 1 ) {
67+ var bparts = baseline . split ( '@' ) ;
68+ baselineExe = bparts [ 0 ] ;
69+ baselineEnv = bparts [ 1 ] ;
70+ } else if ( baseline !== "none" ) {
71+ baselineExe = baseline ;
72+ } else {
73+ baselineExe = exes [ 0 ] ;
74+ }
75+ otherExe = exes . filter ( function ( e ) { return e !== baselineExe ; } ) [ 0 ] ;
76+ if ( ! otherExe ) { otherExe = exes [ 1 ] ; }
4577 }
4678
47- var otherExes = exes . filter ( function ( e ) { return e !== baselineExe ; } ) ;
48- if ( otherExes . length === 1 ) {
49- var otherExe = otherExes [ 0 ] ;
50- var envId = enviros [ 0 ] ;
51- var envForBase = baselineEnv !== null ? baselineEnv : envId ;
52-
53- var product = 1 , count = 0 ;
54- for ( var b = 0 ; b < bens . length ; b ++ ) {
55- var val = compdata [ otherExe ] && compdata [ otherExe ] [ envId ]
56- ? compdata [ otherExe ] [ envId ] [ bens [ b ] ]
57- : null ;
58- var baseval = compdata [ baselineExe ] && compdata [ baselineExe ] [ envForBase ]
59- ? compdata [ baselineExe ] [ envForBase ] [ bens [ b ] ]
60- : null ;
61- if ( val !== null && baseval !== null && baseval !== 0 && val > 0 ) {
62- product *= val / baseval ;
63- count ++ ;
64- }
79+ var envForBase = baselineEnv !== null ? baselineEnv : otherEnv ;
80+
81+ var product = 1 , count = 0 ;
82+ for ( var b = 0 ; b < bens . length ; b ++ ) {
83+ var val = compdata [ otherExe ] && compdata [ otherExe ] [ otherEnv ]
84+ ? compdata [ otherExe ] [ otherEnv ] [ bens [ b ] ]
85+ : null ;
86+ var baseval = compdata [ baselineExe ] && compdata [ baselineExe ] [ envForBase ]
87+ ? compdata [ baselineExe ] [ envForBase ] [ bens [ b ] ]
88+ : null ;
89+ if ( val !== null && baseval !== null && baseval !== 0 && val > 0 ) {
90+ product *= val / baseval ;
91+ count ++ ;
6592 }
93+ }
6694
67- if ( count > 0 ) {
68- var geomean = Math . pow ( product , 1 / count ) ;
69-
70- var lessCount = 0 , moreCount = 0 ;
71- var benSet = { } ;
72- for ( var b = 0 ; b < bens . length ; b ++ ) { benSet [ bens [ b ] ] = true ; }
73- for ( var u in bench_units ) {
74- var unitBens = bench_units [ u ] [ 0 ] ;
75- var unitLess = bench_units [ u ] [ 1 ] . indexOf ( "less" ) !== - 1 ;
76- for ( var ub = 0 ; ub < unitBens . length ; ub ++ ) {
77- if ( benSet [ unitBens [ ub ] ] ) {
78- if ( unitLess ) { lessCount ++ ; } else { moreCount ++ ; }
79- }
95+ if ( count > 0 ) {
96+ var geomean = Math . pow ( product , 1 / count ) ;
97+
98+ var lessCount = 0 , moreCount = 0 ;
99+ var benSet = { } ;
100+ for ( var b = 0 ; b < bens . length ; b ++ ) { benSet [ bens [ b ] ] = true ; }
101+ for ( var u in bench_units ) {
102+ var unitBens = bench_units [ u ] [ 0 ] ;
103+ var unitLess = bench_units [ u ] [ 1 ] . indexOf ( "less" ) !== - 1 ;
104+ for ( var ub = 0 ; ub < unitBens . length ; ub ++ ) {
105+ if ( benSet [ unitBens [ ub ] ] ) {
106+ if ( unitLess ) { lessCount ++ ; } else { moreCount ++ ; }
80107 }
81108 }
109+ }
82110
83- var otherLabel = getExeLabel ( otherExe ) ;
84- var baselineLabel = getExeLabel ( baselineExe ) ;
85- if ( baselineEnv !== null ) {
86- baselineLabel += ' @ ' + $ ( "label[for='env_" + baselineEnv + "']" ) . text ( ) . trim ( ) ;
87- }
88-
89- var suffix ;
90- if ( moreCount === 0 && lessCount > 0 ) {
91- suffix = geomean < 1
92- ? ' or <strong>' + ( 1 / geomean ) . toFixed ( 1 ) + '×</strong> faster'
93- : ' or <strong>' + geomean . toFixed ( 1 ) + '×</strong> slower' ;
94- } else if ( lessCount === 0 && moreCount > 0 ) {
95- suffix = geomean > 1
96- ? ' or <strong>' + geomean . toFixed ( 1 ) + '×</strong> faster'
97- : ' or <strong>' + ( 1 / geomean ) . toFixed ( 1 ) + '×</strong> slower' ;
98- } else {
99- suffix = ' relative to baseline' ;
100- }
111+ var otherLabel = getExeLabel ( otherExe ) ;
112+ var baselineLabel = getExeLabel ( baselineExe ) ;
113+ if ( exes . length === 1 ) {
114+ otherLabel += ' @ ' + $ ( "label[for='env_" + otherEnv + "']" ) . text ( ) . trim ( ) ;
115+ baselineLabel += ' @ ' + $ ( "label[for='env_" + envForBase + "']" ) . text ( ) . trim ( ) ;
116+ } else if ( baselineEnv !== null ) {
117+ baselineLabel += ' @ ' + $ ( "label[for='env_" + baselineEnv + "']" ) . text ( ) . trim ( ) ;
118+ }
101119
102- $title . html ( 'The geometric average of ' + count + ' benchmarks for <strong>' +
103- otherLabel + '</strong> is <strong>' + geomean . toFixed ( 2 ) + '</strong>' +
104- suffix + ' than the baseline <strong>' + baselineLabel + '</strong>' ) ;
105- return ;
120+ var suffix ;
121+ if ( moreCount === 0 && lessCount > 0 ) {
122+ suffix = geomean < 1
123+ ? ' or <strong>' + ( 1 / geomean ) . toFixed ( 1 ) + '×</strong> faster'
124+ : ' or <strong>' + geomean . toFixed ( 1 ) + '×</strong> slower' ;
125+ } else if ( lessCount === 0 && moreCount > 0 ) {
126+ suffix = geomean > 1
127+ ? ' or <strong>' + geomean . toFixed ( 1 ) + '×</strong> faster'
128+ : ' or <strong>' + ( 1 / geomean ) . toFixed ( 1 ) + '×</strong> slower' ;
129+ } else {
130+ suffix = ' relative to baseline' ;
106131 }
132+
133+ $title . html ( 'The geometric average of ' + count + ' benchmarks for <strong>' +
134+ otherLabel + '</strong> is <strong>' + geomean . toFixed ( 2 ) + '</strong>' +
135+ suffix + ' than the baseline <strong>' + baselineLabel + '</strong>' ) ;
136+ return ;
107137 }
108138 }
109139
@@ -171,7 +201,8 @@ function refreshContent() {
171201 var plotid = "plot" + plotcounter ;
172202 $ ( "#plotwrapper" ) . append ( '<div class="compplot-wrap"><canvas id="' + plotid + '"></canvas></div>' ) ;
173203 plotcounter ++ ;
174- chartTitles . push ( renderComparisonPlot ( plotid , unit , benchmarks , exes , enviros , conf . bas , conf . chart , conf . hor ) ) ;
204+ var t = renderComparisonPlot ( plotid , unit , benchmarks , exes , enviros , conf . bas , conf . chart , conf . hor ) ;
205+ chartTitles . push ( t ) ;
175206 }
176207 updateGraphTitle ( exes , enviros , bens , conf . bas , conf . chart , chartTitles ) ;
177208 } ) ;
@@ -207,7 +238,7 @@ function updateBaselineDropdown() {
207238 $baseline . append ( $ ( '<option>' ) . val ( key ) . text ( name ) ) ;
208239 }
209240 } ) ;
210- if ( $baseline . find ( "option[value='" + current + "']" ) . length ) {
241+ if ( $baseline . find ( "option" ) . filter ( function ( ) { return $ ( this ) . val ( ) === current ; } ) . length ) {
211242 $baseline . val ( current ) ;
212243 } else {
213244 $baseline . val ( 'none' ) ;
0 commit comments