@@ -33,120 +33,141 @@ function createRow(table, cellName, items) {
33
33
return res ;
34
34
}
35
35
36
- function showProfile ( path , cutoff = 0.05 ) {
37
- requestGet ( path , { } , function ( data ) {
38
- var table = document . createElement ( ' table') ;
39
- table . className = 'popup-table' ;
40
-
41
- data . records [ 'total' ] = data . total ;
42
- var keys = Object . keys ( data . records ) . sort ( function ( a , b ) {
43
- return data . records [ b ] - data . records [ a ] ;
36
+ function createVisualizationTable ( data , cutoff = 0 , sort = "" ) {
37
+ var table = document . createElement ( 'table' ) ;
38
+ table . className = 'popup- table';
39
+
40
+ var keys = Object . keys ( data ) ;
41
+ if ( sort === "number" ) {
42
+ keys = keys . sort ( function ( a , b ) {
43
+ return data [ b ] - data [ a ] ;
44
44
} ) ;
45
- var items = keys . map ( function ( x ) {
46
- return { key : x , parts : x . split ( '/' ) , time : data . records [ x ] } ;
45
+ } else {
46
+ keys = keys . sort ( ) ;
47
+ }
48
+ var items = keys . map ( function ( x ) {
49
+ return { key : x , parts : x . split ( '/' ) , value : data [ x ] } ;
50
+ } ) ;
51
+ var maxLength = items . reduce ( function ( a , b ) {
52
+ return Math . max ( a , b . parts . length ) ;
53
+ } , 0 ) ;
54
+
55
+ var cols = createRow (
56
+ table ,
57
+ 'th' ,
58
+ [
59
+ cutoff === 0 ? 'key' : 'record' ,
60
+ cutoff === 0 ? 'value' : 'seconds'
61
+ ]
62
+ ) ;
63
+ cols [ 0 ] . colSpan = maxLength ;
64
+
65
+ function arraysEqual ( a , b ) {
66
+ return ! ( a < b || b < a ) ;
67
+ }
68
+
69
+ var addLevel = function ( level , parent , hide ) {
70
+ var matching = items . filter ( function ( x ) {
71
+ return x . parts [ level ] && ! x . parts [ level + 1 ] && arraysEqual ( x . parts . slice ( 0 , level ) , parent ) ;
47
72
} ) ;
48
- var maxLength = items . reduce ( function ( a , b ) {
49
- return Math . max ( a , b . parts . length ) ;
50
- } , 0 ) ;
51
-
52
- var cols = createRow ( table , 'th' , [ 'record' , 'seconds' ] ) ;
53
- cols [ 0 ] . colSpan = maxLength ;
54
-
55
- function arraysEqual ( a , b ) {
56
- return ! ( a < b || b < a ) ;
73
+ if ( sort === "number" ) {
74
+ matching = matching . sort ( function ( a , b ) {
75
+ return b . value - a . value ;
76
+ } ) ;
77
+ } else {
78
+ matching = matching . sort ( ) ;
57
79
}
80
+ var othersTime = 0 ;
81
+ var othersList = [ ] ;
82
+ var othersRows = [ ] ;
83
+ var childrenRows = [ ] ;
84
+ matching . forEach ( function ( x ) {
85
+ var visible = ( cutoff === 0 && ! hide ) || ( x . value >= cutoff && ! hide ) ;
86
+
87
+ var cells = [ ] ;
88
+ for ( var i = 0 ; i < maxLength ; i ++ ) {
89
+ cells . push ( x . parts [ i ] ) ;
90
+ }
91
+ cells . push ( cutoff === 0 ? x . value : x . value . toFixed ( 3 ) ) ;
92
+ var cols = createRow ( table , 'td' , cells ) ;
93
+ for ( i = 0 ; i < level ; i ++ ) {
94
+ cols [ i ] . className = 'muted' ;
95
+ }
58
96
59
- var addLevel = function ( level , parent , hide ) {
60
- var matching = items . filter ( function ( x ) {
61
- return x . parts [ level ] && ! x . parts [ level + 1 ] && arraysEqual ( x . parts . slice ( 0 , level ) , parent ) ;
62
- } ) ;
63
- var sorted = matching . sort ( function ( a , b ) {
64
- return b . time - a . time ;
65
- } ) ;
66
- var othersTime = 0 ;
67
- var othersList = [ ] ;
68
- var othersRows = [ ] ;
69
- var childrenRows = [ ] ;
70
- sorted . forEach ( function ( x ) {
71
- var visible = x . time >= cutoff && ! hide ;
72
-
73
- var cells = [ ] ;
74
- for ( var i = 0 ; i < maxLength ; i ++ ) {
75
- cells . push ( x . parts [ i ] ) ;
76
- }
77
- cells . push ( x . time . toFixed ( 3 ) ) ;
78
- var cols = createRow ( table , 'td' , cells ) ;
79
- for ( i = 0 ; i < level ; i ++ ) {
80
- cols [ i ] . className = 'muted' ;
81
- }
82
-
83
- var tr = cols [ 0 ] . parentNode ;
84
- if ( ! visible ) {
85
- tr . classList . add ( "hidden" ) ;
86
- }
87
-
88
- if ( x . time >= cutoff ) {
89
- childrenRows . push ( tr ) ;
90
- } else {
91
- othersTime += x . time ;
92
- othersList . push ( x . parts [ level ] ) ;
93
- othersRows . push ( tr ) ;
94
- }
95
-
96
- var children = addLevel ( level + 1 , parent . concat ( [ x . parts [ level ] ] ) , true ) ;
97
- if ( children . length > 0 ) {
98
- var cell = cols [ level ] ;
99
- var onclick = function ( ) {
100
- cell . classList . remove ( "link" ) ;
101
- cell . removeEventListener ( "click" , onclick ) ;
102
- children . forEach ( function ( x ) {
103
- x . classList . remove ( "hidden" ) ;
104
- } ) ;
105
- } ;
106
- cell . classList . add ( "link" ) ;
107
- cell . addEventListener ( "click" , onclick ) ;
108
- }
109
- } ) ;
97
+ var tr = cols [ 0 ] . parentNode ;
98
+ if ( ! visible ) {
99
+ tr . classList . add ( "hidden" ) ;
100
+ }
110
101
111
- if ( othersTime > 0 ) {
112
- var cells = [ ] ;
113
- for ( var i = 0 ; i < maxLength ; i ++ ) {
114
- cells . push ( parent [ i ] ) ;
115
- }
116
- cells . push ( othersTime . toFixed ( 3 ) ) ;
117
- cells [ level ] = 'others' ;
118
- var cols = createRow ( table , 'td' , cells ) ;
119
- for ( i = 0 ; i < level ; i ++ ) {
120
- cols [ i ] . className = 'muted' ;
121
- }
102
+ if ( cutoff === 0 || x . value >= cutoff ) {
103
+ childrenRows . push ( tr ) ;
104
+ } else {
105
+ othersTime += x . value ;
106
+ othersList . push ( x . parts [ level ] ) ;
107
+ othersRows . push ( tr ) ;
108
+ }
122
109
110
+ var children = addLevel ( level + 1 , parent . concat ( [ x . parts [ level ] ] ) , true ) ;
111
+ if ( children . length > 0 ) {
123
112
var cell = cols [ level ] ;
124
- var tr = cell . parentNode ;
125
113
var onclick = function ( ) {
126
- tr . classList . add ( "hidden" ) ;
127
114
cell . classList . remove ( "link" ) ;
128
115
cell . removeEventListener ( "click" , onclick ) ;
129
- othersRows . forEach ( function ( x ) {
116
+ children . forEach ( function ( x ) {
130
117
x . classList . remove ( "hidden" ) ;
131
118
} ) ;
132
119
} ;
133
-
134
- cell . title = othersList . join ( ", " ) ;
135
120
cell . classList . add ( "link" ) ;
136
121
cell . addEventListener ( "click" , onclick ) ;
122
+ }
123
+ } ) ;
137
124
138
- if ( hide ) {
139
- tr . classList . add ( "hidden" ) ;
140
- }
125
+ if ( othersTime > 0 ) {
126
+ var cells = [ ] ;
127
+ for ( var i = 0 ; i < maxLength ; i ++ ) {
128
+ cells . push ( parent [ i ] ) ;
129
+ }
130
+ cells . push ( othersTime . toFixed ( 3 ) ) ;
131
+ cells [ level ] = 'others' ;
132
+ var cols = createRow ( table , 'td' , cells ) ;
133
+ for ( i = 0 ; i < level ; i ++ ) {
134
+ cols [ i ] . className = 'muted' ;
135
+ }
141
136
142
- childrenRows . push ( tr ) ;
137
+ var cell = cols [ level ] ;
138
+ var tr = cell . parentNode ;
139
+ var onclick = function ( ) {
140
+ tr . classList . add ( "hidden" ) ;
141
+ cell . classList . remove ( "link" ) ;
142
+ cell . removeEventListener ( "click" , onclick ) ;
143
+ othersRows . forEach ( function ( x ) {
144
+ x . classList . remove ( "hidden" ) ;
145
+ } ) ;
146
+ } ;
147
+
148
+ cell . title = othersList . join ( ", " ) ;
149
+ cell . classList . add ( "link" ) ;
150
+ cell . addEventListener ( "click" , onclick ) ;
151
+
152
+ if ( hide ) {
153
+ tr . classList . add ( "hidden" ) ;
143
154
}
144
155
145
- return childrenRows ;
146
- } ;
156
+ childrenRows . push ( tr ) ;
157
+ }
158
+
159
+ return childrenRows ;
160
+ } ;
147
161
148
- addLevel ( 0 , [ ] ) ;
162
+ addLevel ( 0 , [ ] ) ;
163
+
164
+ return table ;
165
+ }
149
166
167
+ function showProfile ( path , cutoff = 0.05 ) {
168
+ requestGet ( path , { } , function ( data ) {
169
+ data . records [ 'total' ] = data . total ;
170
+ const table = createVisualizationTable ( data . records , cutoff , "number" ) ;
150
171
popup ( table ) ;
151
172
} ) ;
152
173
}
0 commit comments