ruby-prof 0.15.7 → 0.15.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES +5 -0
  3. data/doc/created.rid +4 -4
  4. data/doc/js/search_index.js.gz +0 -0
  5. data/examples/graph.dot +53 -75
  6. data/examples/multi.flat.txt +21 -21
  7. data/examples/multi.graph.html +693 -839
  8. data/examples/multi.grind.dat +93 -173
  9. data/examples/multi.stack.html +411 -437
  10. data/examples/stack.html +411 -437
  11. data/lib/ruby-prof/assets/call_stack_printer.css.html +117 -0
  12. data/lib/ruby-prof/assets/call_stack_printer.js.html +385 -0
  13. data/lib/ruby-prof/assets/call_stack_printer.png +0 -0
  14. data/lib/ruby-prof/printers/flat_printer.rb +1 -1
  15. data/lib/ruby-prof/printers/graph_html_printer.rb +43 -48
  16. data/lib/ruby-prof/version.rb +1 -1
  17. data/ruby-prof.gemspec +1 -1
  18. data/test/measure_memory_test.rb +5 -3
  19. data/test/printers_test.rb +1 -1
  20. metadata +5 -58
  21. data/doc/LICENSE.html +0 -114
  22. data/doc/README_rdoc.html +0 -592
  23. data/doc/Rack.html +0 -95
  24. data/doc/Rack/RubyProf.html +0 -264
  25. data/doc/RubyProf.html +0 -961
  26. data/doc/RubyProf/AbstractPrinter.html +0 -546
  27. data/doc/RubyProf/AggregateCallInfo.html +0 -537
  28. data/doc/RubyProf/CallInfo.html +0 -716
  29. data/doc/RubyProf/CallInfoPrinter.html +0 -120
  30. data/doc/RubyProf/CallInfoVisitor.html +0 -198
  31. data/doc/RubyProf/CallStackPrinter.html +0 -1121
  32. data/doc/RubyProf/CallTreePrinter.html +0 -359
  33. data/doc/RubyProf/Cmd.html +0 -631
  34. data/doc/RubyProf/DotPrinter.html +0 -257
  35. data/doc/RubyProf/FlatPrinter.html +0 -163
  36. data/doc/RubyProf/FlatPrinterWithLineNumbers.html +0 -208
  37. data/doc/RubyProf/GraphHtmlPrinter.html +0 -579
  38. data/doc/RubyProf/GraphPrinter.html +0 -139
  39. data/doc/RubyProf/MethodInfo.html +0 -885
  40. data/doc/RubyProf/MultiPrinter.html +0 -358
  41. data/doc/RubyProf/Profile.html +0 -713
  42. data/doc/RubyProf/ProfileTask.html +0 -490
  43. data/doc/RubyProf/Thread.html +0 -303
  44. data/doc/examples/flat_txt.html +0 -149
  45. data/doc/examples/graph_html.html +0 -850
  46. data/doc/examples/graph_txt.html +0 -274
  47. data/doc/images/add.png +0 -0
  48. data/doc/images/arrow_up.png +0 -0
  49. data/doc/images/brick.png +0 -0
  50. data/doc/images/brick_link.png +0 -0
  51. data/doc/images/bug.png +0 -0
  52. data/doc/images/bullet_black.png +0 -0
  53. data/doc/images/bullet_toggle_minus.png +0 -0
  54. data/doc/images/bullet_toggle_plus.png +0 -0
  55. data/doc/images/date.png +0 -0
  56. data/doc/images/delete.png +0 -0
  57. data/doc/images/find.png +0 -0
  58. data/doc/images/macFFBgHack.png +0 -0
  59. data/doc/images/package.png +0 -0
  60. data/doc/images/page_green.png +0 -0
  61. data/doc/images/page_white_text.png +0 -0
  62. data/doc/images/page_white_width.png +0 -0
  63. data/doc/images/plugin.png +0 -0
  64. data/doc/images/ruby.png +0 -0
  65. data/doc/images/tag_blue.png +0 -0
  66. data/doc/images/tag_green.png +0 -0
  67. data/doc/images/transparent.png +0 -0
  68. data/doc/images/wrench.png +0 -0
  69. data/doc/images/wrench_orange.png +0 -0
  70. data/doc/images/zoom.png +0 -0
  71. data/doc/index.html +0 -618
  72. data/doc/table_of_contents.html +0 -934
  73. data/examples/empty.png +0 -0
  74. data/examples/graph.png +0 -0
  75. data/examples/minus.png +0 -0
  76. data/examples/plus.png +0 -0
data/examples/stack.html CHANGED
@@ -3,30 +3,30 @@
3
3
  <title>ruby-prof call tree</title>
4
4
  <style type="text/css">
5
5
  <!--
6
- body {
6
+ body {
7
7
  font-size:70%;
8
- padding:0px;
8
+ padding:0;
9
9
  margin:5px;
10
10
  margin-right:0px;
11
11
  margin-left:0px;
12
12
  background: #ffffff;
13
- }
14
- ul {
13
+ }
14
+ ul {
15
15
  margin-left:0px;
16
16
  margin-top:0px;
17
17
  margin-bottom:0px;
18
18
  padding-left:0px;
19
19
  list-style-type:none;
20
- }
21
- li {
20
+ }
21
+ li {
22
22
  margin-left:11px;
23
23
  padding:0px;
24
24
  white-space:nowrap;
25
25
  border-top:1px solid #cccccc;
26
26
  border-left:1px solid #cccccc;
27
27
  border-bottom:none;
28
- }
29
- .thread {
28
+ }
29
+ .thread {
30
30
  margin-left:11px;
31
31
  background:#708090;
32
32
  padding-top:3px;
@@ -35,28 +35,28 @@ li {
35
35
  border-left:1px solid #CCCCCC;
36
36
  border-top:1px solid #CCCCCC;
37
37
  font-weight:bold;
38
- }
39
- .hidden {
38
+ }
39
+ .hidden {
40
40
  display:none;
41
41
  width:0px;
42
42
  height:0px;
43
43
  margin:0px;
44
44
  padding:0px;
45
45
  border-style:none;
46
- }
47
- .color01 { background:#adbdeb }
48
- .color05 { background:#9daddb }
49
- .color0 { background:#8d9dcb }
50
- .color1 { background:#89bccb }
51
- .color2 { background:#56e3e7 }
52
- .color3 { background:#32cd70 }
53
- .color4 { background:#a3d53c }
54
- .color5 { background:#c4cb34 }
55
- .color6 { background:#dcb66d }
56
- .color7 { background:#cda59e }
57
- .color8 { background:#be9d9c }
58
- .color9 { background:#cf947a }
59
- #commands {
46
+ }
47
+ .color01 { background:#adbdeb }
48
+ .color05 { background:#9daddb }
49
+ .color0 { background:#8d9dcb }
50
+ .color1 { background:#89bccb }
51
+ .color2 { background:#56e3e7 }
52
+ .color3 { background:#32cd70 }
53
+ .color4 { background:#a3d53c }
54
+ .color5 { background:#c4cb34 }
55
+ .color6 { background:#dcb66d }
56
+ .color7 { background:#cda59e }
57
+ .color8 { background:#be9d9c }
58
+ .color9 { background:#cf947a }
59
+ #commands {
60
60
  font-size:10pt;
61
61
  padding:10px;
62
62
  margin-left:11px;
@@ -66,8 +66,8 @@ li {
66
66
  border-top:1px solid #cccccc;
67
67
  border-left:1px solid #cccccc;
68
68
  border-bottom:none;
69
- }
70
- #titlebar {
69
+ }
70
+ #titlebar {
71
71
  font-size:10pt;
72
72
  padding:10px;
73
73
  margin-left:11px;
@@ -77,8 +77,8 @@ li {
77
77
  border-top:1px solid #cccccc;
78
78
  border-left:1px solid #cccccc;
79
79
  border-bottom:none;
80
- }
81
- #help {
80
+ }
81
+ #help {
82
82
  font-size:10pt;
83
83
  padding:10px;
84
84
  margin-left:11px;
@@ -89,433 +89,424 @@ li {
89
89
  border-top:1px solid #cccccc;
90
90
  border-left:1px solid #cccccc;
91
91
  border-bottom:none;
92
- }
93
- #sentinel {
92
+ }
93
+ #sentinel {
94
94
  height: 400px;
95
95
  margin-left:11px;
96
96
  background:#8090a0;
97
97
  border-top:1px solid #cccccc;
98
98
  border-left:1px solid #cccccc;
99
99
  border-bottom:none;
100
- }
101
- input { margin-left:10px; }
100
+ }
101
+ input { margin-left:10px; }
102
+
103
+ .toggle {
104
+ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABsAAAAJCAMAAAD0FKf3AAAAA3NCSVQICAjb4U/gAAAAb1BMVEX///98jcR8jMV4jMB7jcR7jcR8jcT////7/f/3/P/0+vzx+v7s9vzq9Pzm8Prk7vzi7fnj5/Pc5vTb5vbg5PHW4fHV3/XS3fLM1+3K1e/G0e3EzuzCzey8x+m8xuystuSqtt98jsR8jcR7jcQAAADWswcWAAAAJXRSTlMAVVVV3e7u////////////////////////////////////////Vv4VOQAAAAlwSFlzAAALEgAACxIB0t1+/AAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAACVSURBVAiZPc/hDoIwDATgobCWgZsWgSGidOz9n9F1CPfrki+5tIqPXHSQVMVZFH8/sx/Is16X9zR2vtQPAMC6LxVnco5Dpvtt40QRGrspnueBqDUcdmrEMILtknkiQkQOU5RAsn9RPGRKNkLOxiibIEauNSYZy2CNyerGRngtsilkiLXP9Cx1bzuAZU13Himq/a3rWX4VVRPEuDWiLQAAAABJRU5ErkJggg==) no-repeat left center;
105
+ float:left;
106
+ width:9px;
107
+ height:9px;
108
+ margin:2px 1px 1px 1px;
109
+ }
110
+
111
+ .toggle.minus {
112
+ background-position: -9px 0;
113
+ }
114
+
115
+ .toggle.plus {
116
+ background-position: -18px 0;
117
+ }
118
+
102
119
  -->
103
120
  </style>
104
121
  <script type="text/javascript">
105
- /*
122
+ /*
106
123
  Copyright (C) 2005,2009 Stefan Kaes
107
124
  skaes@railsexpress.de
108
- */
125
+ */
109
126
 
110
- function rootNode() {
111
- return currentThread;
112
- }
127
+ function rootNode() {
128
+ return currentThread;
129
+ }
113
130
 
114
- function hideUL(node) {
115
- var lis = node.childNodes
116
- var l = lis.length;
117
- for (var i=0; i < l ; i++ ) {
118
- hideLI(lis[i]);
131
+ function showUL(node, show) {
132
+ var lis = node.childNodes;
133
+ var l = lis.length;
134
+ for (var i=0; i < l ; i++ ) {
135
+ toggle(lis[i], show);
136
+ }
119
137
  }
120
- }
121
138
 
122
- function showUL(node) {
123
- var lis = node.childNodes;
124
- var l = lis.length;
125
- for (var i=0; i < l ; i++ ) {
126
- showLI(lis[i]);
139
+ function findUlChild(li){
140
+ var ul = li.childNodes[2];
141
+ while (ul && ul.nodeName != "UL") {
142
+ ul = ul.nextSibling;
143
+ }
144
+ return ul;
127
145
  }
128
- }
129
146
 
130
- function findUlChild(li){
131
- var ul = li.childNodes[2];
132
- while (ul && ul.nodeName != "UL") {
133
- ul = ul.nextSibling;
147
+ function isLeafNode(li) {
148
+ var img = li.firstChild;
149
+ return (img.className.indexOf('empty') > -1);
134
150
  }
135
- return ul;
136
- }
137
151
 
138
- function isLeafNode(li) {
139
- var img = li.firstChild;
140
- return (img.src.indexOf('empty.png') > -1);
141
- }
152
+ function toggle(li, show) {
153
+ if (isLeafNode(li))
154
+ return;
142
155
 
143
- function hideLI(li) {
144
- if (isLeafNode(li))
145
- return;
156
+ var img = li.firstChild;
157
+ img.className = 'toggle ';
158
+ img.className += show ? 'minus' : 'plus';
146
159
 
147
- var img = li.firstChild;
148
- img.src = 'plus.png';
160
+ var ul = findUlChild(li);
161
+ if (ul) {
162
+ ul.style.display = show ? 'block' : 'none';
163
+ showUL(ul, true);
164
+ }
165
+ }
166
+
167
+ function toggleLI(li) {
168
+ var img = li.firstChild;
169
+ if (img.className.indexOf("minus")>-1)
170
+ toggle(li, false);
171
+ else {
172
+ if (img.className.indexOf("plus")>-1)
173
+ toggle(li, true);
174
+ }
175
+ }
149
176
 
150
- var ul = findUlChild(li);
151
- if (ul) {
152
- ul.style.display = 'none';
153
- hideUL(ul);
177
+ function aboveThreshold(text, threshold) {
178
+ var match = text.match(/\d+[.,]\d+/);
179
+ return (match && parseFloat(match[0].replace(/,/, '.'))>=threshold);
154
180
  }
155
- }
156
181
 
157
- function showLI(li) {
158
- if (isLeafNode(li))
159
- return;
182
+ function setThresholdLI(li, threshold) {
183
+ var img = li.firstChild;
184
+ var text = img.nextSibling;
185
+ var ul = findUlChild(li);
160
186
 
161
- var img = li.firstChild;
162
- img.src = 'minus.png';
187
+ var visible = aboveThreshold(text.nodeValue, threshold) ? 1 : 0;
163
188
 
164
- var ul = findUlChild(li);
165
- if (ul) {
166
- ul.style.display = 'block';
167
- showUL(ul);
189
+ var count = 0;
190
+ if (ul) {
191
+ count = setThresholdUL(ul, threshold);
192
+ }
193
+ if (count>0) {
194
+ img.className = 'toggle minus';
195
+ }
196
+ else {
197
+ img.className = 'toggle empty';
198
+ }
199
+ if (visible) {
200
+ li.style.display = 'block'
201
+ }
202
+ else {
203
+ li.style.display = 'none'
204
+ }
205
+ return visible;
168
206
  }
169
- }
170
207
 
171
- function toggleLI(li) {
172
- var img = li.firstChild;
173
- if (img.src.indexOf("minus.png")>-1)
174
- hideLI(li);
175
- else {
176
- if (img.src.indexOf("plus.png")>-1)
177
- showLI(li);
208
+ function setThresholdUL(node, threshold) {
209
+ var lis = node.childNodes;
210
+ var l = lis.length;
211
+
212
+ var count = 0;
213
+ for ( var i = 0; i < l ; i++ ) {
214
+ count = count + setThresholdLI(lis[i], threshold);
215
+ }
216
+
217
+ var visible = (count > 0) ? 1 : 0;
218
+ if (visible) {
219
+ node.style.display = 'block';
220
+ }
221
+ else {
222
+ node.style.display = 'none';
223
+ }
224
+ return visible;
178
225
  }
179
- }
180
226
 
181
- function aboveThreshold(text, threshold) {
182
- var match = text.match(/\d+[.,]\d+/);
183
- return (match && parseFloat(match[0].replace(/,/, '.'))>=threshold);
184
- }
227
+ function toggleChildren(img, event) {
228
+ event.cancelBubble=true;
229
+ if (img.className.indexOf('empty') > -1)
230
+ return;
185
231
 
186
- function setThresholdLI(li, threshold) {
187
- var img = li.firstChild;
188
- var text = img.nextSibling;
189
- var ul = findUlChild(li);
232
+ var minus = (img.className.indexOf('minus') > -1);
190
233
 
191
- var visible = aboveThreshold(text.nodeValue, threshold) ? 1 : 0;
234
+ if (minus) {
235
+ img.className = 'toggle plus';
236
+ }
237
+ else
238
+ img.className = 'toggle minus';
192
239
 
193
- var count = 0;
194
- if (ul) {
195
- count = setThresholdUL(ul, threshold);
240
+ var li = img.parentNode;
241
+ var ul = findUlChild(li);
242
+ if (ul) {
243
+ if (minus)
244
+ ul.style.display = 'none';
245
+ else
246
+ ul.style.display = 'block';
247
+ }
248
+ if (minus)
249
+ moveSelectionIfNecessary(li);
250
+ }
251
+
252
+ function showChildren(li) {
253
+ var img = li.firstChild;
254
+ if (img.className.indexOf('empty') > -1)
255
+ return;
256
+ img.className = 'toggle minus';
257
+
258
+ var ul = findUlChild(li);
259
+ if (ul) {
260
+ ul.style.display = 'block';
261
+ }
262
+ }
263
+
264
+ function setThreshold() {
265
+ var tv = document.getElementById("threshold").value;
266
+ if (tv.match(/[0-9]+([.,][0-9]+)?/)) {
267
+ var f = parseFloat(tv.replace(/,/, '.'));
268
+ var threads = document.getElementsByName("thread");
269
+ var l = threads.length;
270
+ for ( var i = 0; i < l ; i++ ) {
271
+ setThresholdUL(threads[i], f);
272
+ }
273
+ var p = selectedNode;
274
+ while (p && p.style.display=='none')
275
+ p=p.parentNode.parentNode;
276
+ if (p && p.nodeName=="LI")
277
+ selectNode(p);
278
+ }
279
+ else {
280
+ alert("Please specify a decimal number as threshold value!");
281
+ }
196
282
  }
197
- if (count>0) {
198
- img.src = 'minus.png';
283
+
284
+ function expandAll(event) {
285
+ toggleAll(event, true);
199
286
  }
200
- else {
201
- img.src = 'empty.png';
287
+
288
+ function collapseAll(event) {
289
+ toggleAll(event, false);
290
+ selectNode(rootNode(), null);
202
291
  }
203
- if (visible) {
204
- li.style.display = 'block'
292
+
293
+ function toggleAll(event, show) {
294
+ event.cancelBubble=true;
295
+ var threads = document.getElementsByName("thread");
296
+ var l = threads.length;
297
+ for ( var i = 0; i < l ; i++ ) {
298
+ showUL(threads[i], show);
299
+ }
205
300
  }
206
- else {
207
- li.style.display = 'none'
301
+
302
+ function toggleHelp(node) {
303
+ var help = document.getElementById("help");
304
+ if (node.value == "Show Help") {
305
+ node.value = "Hide Help";
306
+ help.style.display = 'block';
307
+ }
308
+ else {
309
+ node.value = "Show Help";
310
+ help.style.display = 'none';
311
+ }
208
312
  }
209
- return visible;
210
- }
211
313
 
212
- function setThresholdUL(node, threshold) {
213
- var lis = node.childNodes;
214
- var l = lis.length;
314
+ var selectedNode = null;
315
+ var selectedColor = null;
316
+ var selectedThread = null;
215
317
 
216
- var count = 0;
217
- for ( var i = 0; i < l ; i++ ) {
218
- count = count + setThresholdLI(lis[i], threshold);
318
+ function descendentOf(a,b){
319
+ while (a!=b && b!=null)
320
+ b=b.parentNode;
321
+ return (a==b);
219
322
  }
220
323
 
221
- var visible = (count > 0) ? 1 : 0;
222
- if (visible) {
223
- node.style.display = 'block';
324
+ function moveSelectionIfNecessary(node){
325
+ if (descendentOf(node, selectedNode))
326
+ selectNode(node, null);
224
327
  }
225
- else {
226
- node.style.display = 'none';
328
+
329
+ function selectNode(node, event) {
330
+ if (event) {
331
+ event.cancelBubble = true;
332
+ thread = findThread(node);
333
+ selectThread(thread);
334
+ }
335
+ if (selectedNode) {
336
+ selectedNode.style.background = selectedColor;
337
+ }
338
+ selectedNode = node;
339
+ selectedColor = node.style.background;
340
+ selectedNode.style.background = "red";
341
+ selectedNode.scrollIntoView();
342
+ window.scrollBy(0,-400);
227
343
  }
228
- return visible;
229
- }
230
344
 
231
- function toggleChildren(img, event) {
232
- event.cancelBubble=true;
345
+ function moveUp(){
346
+ move(selectedNode.previousSibling);
347
+ }
233
348
 
234
- if (img.src.indexOf('empty.png') > -1)
235
- return;
349
+ function moveDown(){
350
+ move(selectedNode.nextSibling);
351
+ }
236
352
 
237
- var minus = (img.src.indexOf('minus.png') > -1);
353
+ function move(p) {
354
+ while (p && p.style.display == 'none')
355
+ p = p.nextSibling;
356
+ if (p && p.nodeName == "LI") {
357
+ selectNode(p, null);
358
+ }
359
+ }
238
360
 
239
- if (minus) {
240
- img.src = 'plus.png';
361
+ function moveLeft(){
362
+ var p = selectedNode.parentNode.parentNode;
363
+ if (p && p.nodeName=="LI") {
364
+ selectNode(p, null);
365
+ }
241
366
  }
242
- else
243
- img.src = 'minus.png';
244
367
 
245
- var li = img.parentNode;
246
- var ul = findUlChild(li);
247
- if (ul) {
248
- if (minus)
249
- ul.style.display = 'none';
250
- else
251
- ul.style.display = 'block';
368
+ function moveRight(){
369
+ if (!isLeafNode(selectedNode)) {
370
+ showChildren(selectedNode);
371
+ var ul = findUlChild(selectedNode);
372
+ if (ul) {
373
+ selectNode(ul.firstChild, null);
374
+ }
375
+ }
252
376
  }
253
- if (minus)
254
- moveSelectionIfNecessary(li);
255
- }
256
-
257
- function showChildren(li) {
258
- var img = li.firstChild;
259
- if (img.src.indexOf('empty.png') > -1)
260
- return;
261
- img.src = 'minus.png';
262
-
263
- var ul = findUlChild(li);
264
- if (ul) {
265
- ul.style.display = 'block';
266
- }
267
- }
268
-
269
- function setThreshold() {
270
- var tv = document.getElementById("threshold").value;
271
- if (tv.match(/[0-9]+([.,][0-9]+)?/)) {
272
- var f = parseFloat(tv.replace(/,/, '.'));
273
- var threads = document.getElementsByName("thread");
274
- var l = threads.length;
275
- for ( var i = 0; i < l ; i++ ) {
276
- setThresholdUL(threads[i], f);
277
- }
278
- var p = selectedNode;
279
- while (p && p.style.display=='none')
280
- p=p.parentNode.parentNode;
281
- if (p && p.nodeName=="LI")
282
- selectNode(p);
283
- }
284
- else {
285
- alert("Please specify a decimal number as threshold value!");
286
- }
287
- }
288
-
289
- function collapseAll(event) {
290
- event.cancelBubble=true;
291
- var threads = document.getElementsByName("thread");
292
- var l = threads.length;
293
- for ( var i = 0; i < l ; i++ ) {
294
- hideUL(threads[i]);
295
- }
296
- selectNode(rootNode(), null);
297
- }
298
-
299
- function expandAll(event) {
300
- event.cancelBubble=true;
301
- var threads = document.getElementsByName("thread");
302
- var l = threads.length;
303
- for ( var i = 0; i < l ; i++ ) {
304
- showUL(threads[i]);
305
- }
306
- }
307
-
308
- function toggleHelp(node) {
309
- var help = document.getElementById("help");
310
- if (node.value == "Show Help") {
311
- node.value = "Hide Help";
312
- help.style.display = 'block';
313
- }
314
- else {
315
- node.value = "Show Help";
316
- help.style.display = 'none';
317
- }
318
- }
319
-
320
- var selectedNode = null;
321
- var selectedColor = null;
322
- var selectedThread = null;
323
-
324
- function descendentOf(a,b){
325
- while (a!=b && b!=null)
326
- b=b.parentNode;
327
- return (a==b);
328
- }
329
-
330
- function moveSelectionIfNecessary(node){
331
- if (descendentOf(node, selectedNode))
332
- selectNode(node, null);
333
- }
334
-
335
- function selectNode(node, event) {
336
- if (event) {
337
- event.cancelBubble = true;
338
- thread = findThread(node);
339
- selectThread(thread);
340
- }
341
- if (selectedNode) {
342
- selectedNode.style.background = selectedColor;
343
- }
344
- selectedNode = node;
345
- selectedColor = node.style.background;
346
- selectedNode.style.background = "red";
347
- selectedNode.scrollIntoView();
348
- window.scrollBy(0,-400);
349
- }
350
-
351
- function moveUp(){
352
- var p = selectedNode.previousSibling;
353
- while (p && p.style.display == 'none')
354
- p = p.previousSibling;
355
- if (p && p.nodeName == "LI") {
356
- selectNode(p, null);
357
- }
358
- }
359
-
360
- function moveDown(){
361
- var p = selectedNode.nextSibling;
362
- while (p && p.style.display == 'none')
363
- p = p.nextSibling;
364
- if (p && p.nodeName == "LI") {
365
- selectNode(p, null);
366
- }
367
- }
368
-
369
- function moveLeft(){
370
- var p = selectedNode.parentNode.parentNode;
371
- if (p && p.nodeName=="LI") {
372
- selectNode(p, null);
373
- }
374
- }
375
-
376
- function moveRight(){
377
- if (!isLeafNode(selectedNode)) {
378
- showChildren(selectedNode);
379
- var ul = findUlChild(selectedNode);
380
- if (ul) {
381
- selectNode(ul.firstChild, null);
377
+
378
+ function moveForward(){
379
+ if (isLeafNode(selectedNode)) {
380
+ var p = selectedNode;
381
+ while ((p.nextSibling == null || p.nextSibling.style.display=='none') && p.nodeName=="LI") {
382
+ p = p.parentNode.parentNode;
383
+ }
384
+ if (p.nodeName=="LI")
385
+ selectNode(p.nextSibling, null);
382
386
  }
387
+ else {
388
+ moveRight();
389
+ }
390
+ }
391
+
392
+ function isExpandedNode(li){
393
+ var img = li.firstChild;
394
+ return(img.className.indexOf('minus')>-1);
383
395
  }
384
- }
385
396
 
386
- function moveForward(){
387
- if (isLeafNode(selectedNode)) {
397
+ function moveBackward(){
388
398
  var p = selectedNode;
389
- while ((p.nextSibling == null || p.nextSibling.style.display=='none') && p.nodeName=="LI") {
399
+ var q = p.previousSibling;
400
+ while (q != null && q.style.display=='none')
401
+ q = q.previousSibling;
402
+ if (q == null) {
390
403
  p = p.parentNode.parentNode;
404
+ } else {
405
+ while (!isLeafNode(q) && isExpandedNode(q)) {
406
+ q = findUlChild(q).lastChild;
407
+ while (q.style.display=='none')
408
+ q = q.previousSibling;
409
+ }
410
+ p = q;
391
411
  }
392
412
  if (p.nodeName=="LI")
393
- selectNode(p.nextSibling, null);
394
- }
395
- else {
396
- moveRight();
397
- }
398
- }
399
-
400
- function isExpandedNode(li){
401
- var img = li.firstChild;
402
- return(img.src.indexOf('minus.png')>-1);
403
- }
404
-
405
- function moveBackward(){
406
- var p = selectedNode;
407
- var q = p.previousSibling;
408
- while (q != null && q.style.display=='none')
409
- q = q.previousSibling;
410
- if (q == null) {
411
- p = p.parentNode.parentNode;
412
- } else {
413
- while (!isLeafNode(q) && isExpandedNode(q)) {
414
- q = findUlChild(q).lastChild;
415
- while (q.style.display=='none')
416
- q = q.previousSibling;
417
- }
418
- p = q;
419
- }
420
- if (p.nodeName=="LI")
421
- selectNode(p, null);
422
- }
423
-
424
- function moveHome() {
425
- selectNode(currentThread);
426
- }
427
-
428
- var currentThreadIndex = null;
429
-
430
- function findThread(node){
431
- while (node && node.parentNode.nodeName!="BODY") {
432
- node = node.parentNode;
433
- }
434
- return node.firstChild;
435
- }
436
-
437
- function selectThread(node){
438
- var threads = document.getElementsByName("thread");
439
- currentThread = node;
440
- for (var i=0; i<threads.length; i++) {
441
- if (threads[i]==currentThread.parentNode)
442
- currentThreadIndex = i;
443
- }
444
- }
445
-
446
- function nextThread(){
447
- var threads = document.getElementsByName("thread");
448
- if (currentThreadIndex==threads.length-1)
413
+ selectNode(p, null);
414
+ }
415
+
416
+ function moveHome() {
417
+ selectNode(currentThread);
418
+ }
419
+
420
+ var currentThreadIndex = null;
421
+
422
+ function findThread(node){
423
+ while (node && !node.parentNode.nodeName.match(/BODY|DIV/g)) {
424
+ node = node.parentNode;
425
+ }
426
+ return node.firstChild;
427
+ }
428
+
429
+ function selectThread(node){
430
+ var threads = document.getElementsByName("thread");
431
+ currentThread = node;
432
+ for (var i=0; i<threads.length; i++) {
433
+ if (threads[i]==currentThread.parentNode)
434
+ currentThreadIndex = i;
435
+ }
436
+ }
437
+
438
+ function nextThread(){
439
+ var threads = document.getElementsByName("thread");
440
+ if (currentThreadIndex==threads.length-1)
441
+ currentThreadIndex = 0;
442
+ else
443
+ currentThreadIndex += 1
444
+ currentThread = threads[currentThreadIndex].firstChild;
445
+ selectNode(currentThread, null);
446
+ }
447
+
448
+ function previousThread(){
449
+ var threads = document.getElementsByName("thread");
450
+ if (currentThreadIndex==0)
451
+ currentThreadIndex = threads.length-1;
452
+ else
453
+ currentThreadIndex -= 1
454
+ currentThread = threads[currentThreadIndex].firstChild;
455
+ selectNode(currentThread, null);
456
+ }
457
+
458
+ function switchThread(node, event){
459
+ event.cancelBubble = true;
460
+ selectThread(node.nextSibling.firstChild);
461
+ selectNode(currentThread, null);
462
+ }
463
+
464
+ function handleKeyEvent(event){
465
+ var code = event.charCode ? event.charCode : event.keyCode;
466
+ var str = String.fromCharCode(code);
467
+ switch (str) {
468
+ case "a": moveLeft(); break;
469
+ case "s": moveDown(); break;
470
+ case "d": moveRight(); break;
471
+ case "w": moveUp(); break;
472
+ case "f": moveForward(); break;
473
+ case "b": moveBackward(); break;
474
+ case "x": toggleChildren(selectedNode.firstChild, event); break;
475
+ case "*": toggleLI(selectedNode); break;
476
+ case "n": nextThread(); break;
477
+ case "h": moveHome(); break;
478
+ case "p": previousThread(); break;
479
+ }
480
+ }
481
+ document.onkeypress=function(event){ handleKeyEvent(event) };
482
+
483
+ window.onload=function(){
484
+ var images = document.querySelectorAll(".toggle");
485
+ for (var i=0; i<images.length; i++) {
486
+ var img = images[i];
487
+ img.onclick = function(event){ toggleChildren(this, event); return false; };
488
+ }
489
+ var divs = document.getElementsByTagName("div");
490
+ for (i=0; i<divs.length; i++) {
491
+ var div = divs[i];
492
+ if (div.className == "thread")
493
+ div.onclick = function(event){ switchThread(this, event) };
494
+ }
495
+ var lis = document.getElementsByTagName("li");
496
+ for (var i=0; i<lis.length; i++) {
497
+ lis[i].onclick = function(event){ selectNode(this, event); };
498
+ }
499
+ var threads = document.getElementsByName("thread");;
449
500
  currentThreadIndex = 0;
450
- else
451
- currentThreadIndex += 1
452
- currentThread = threads[currentThreadIndex].firstChild;
453
- selectNode(currentThread, null);
454
- }
455
-
456
- function previousThread(){
457
- var threads = document.getElementsByName("thread");
458
- if (currentThreadIndex==0)
459
- currentThreadIndex = threads.length-1;
460
- else
461
- currentThreadIndex -= 1
462
- currentThread = threads[currentThreadIndex].firstChild;
463
- selectNode(currentThread, null);
464
- }
465
-
466
- function switchThread(node, event){
467
- event.cancelBubble = true;
468
- selectThread(node.nextSibling.firstChild);
469
- selectNode(currentThread, null);
470
- }
471
-
472
- function handleKeyEvent(event){
473
- var code = event.charCode ? event.charCode : event.keyCode;
474
- var str = String.fromCharCode(code);
475
- switch (str) {
476
- case "a": moveLeft(); break;
477
- case "s": moveDown(); break;
478
- case "d": moveRight(); break;
479
- case "w": moveUp(); break;
480
- case "f": moveForward(); break;
481
- case "b": moveBackward(); break;
482
- case "x": toggleChildren(selectedNode.firstChild, event); break;
483
- case "*": toggleLI(selectedNode); break;
484
- case "n": nextThread(); break;
485
- case "h": moveHome(); break;
486
- case "p": previousThread(); break;
487
- }
488
- }
489
- document.onkeypress=function(event){ handleKeyEvent(event) };
490
-
491
- window.onload=function(){
492
- var images = document.getElementsByTagName("img");
493
- for (var i=0; i<images.length; i++) {
494
- var img = images[i];
495
- if (img.className == "toggle") {
496
- img.onclick = function(event){ toggleChildren(this, event); };
497
- }
498
- }
499
- var divs = document.getElementsByTagName("div");
500
- for (i=0; i<divs.length; i++) {
501
- var div = divs[i];
502
- if (div.className == "thread")
503
- div.onclick = function(event){ switchThread(this, event) };
504
- }
505
- var lis = document.getElementsByTagName("li");
506
- for (var i=0; i<lis.length; i++) {
507
- lis[i].onclick = function(event){ selectNode(this, event); };
508
- }
509
- var threads = document.getElementsByName("thread");
510
- currentThreadIndex = 0;
511
- currentThread = threads[0].firstChild;
512
- selectNode(currentThread, null);
513
- }
501
+ currentThread = threads[0].firstChild;
502
+ selectNode(currentThread, null);
503
+ };
504
+
514
505
  </script>
515
- </head><body>
506
+ </head><body><div style="display: inline-block;">
516
507
  <div id="titlebar">
517
508
  Call tree for application <b>primes </b><br/>
518
- Generated on Sat Jul 24 08:05:17 +0200 2010 with options {:application=&gt;&quot;primes&quot;}<br/>
509
+ Generated on 2015-04-24 11:52:24 +0200 with options {:application=&gt;&quot;primes&quot;}<br/>
519
510
  </div>
520
511
  <div id="commands">
521
512
  <span style="font-size: 11pt; font-weight: bold;">Threshold:</span>
@@ -526,48 +517,31 @@ Generated on Sat Jul 24 08:05:17 +0200 2010 with options {:application=&gt;&quot
526
517
  <input value="Show Help" onclick="toggleHelp(this);" type="submit">
527
518
  </div>
528
519
  <div style="display: none;" id="help">
529
- <img src="empty.png"> Enter a decimal value <i>d</i> into the threshold field and click "Apply"
530
- to hide all nodes marked with time values lower than <i>d</i>.<br>
531
- <img src="empty.png"> Click on "Expand All" for full tree expansion.<br>
532
- <img src="empty.png"> Click on "Collapse All" to show only top level nodes.<br>
533
- <img src="empty.png"> Use a, s, d, w as in Quake or Urban Terror to navigate the tree.<br>
534
- <img src="empty.png"> Use f and b to navigate the tree in preorder forward and backwards.<br>
535
- <img src="empty.png"> Use x to toggle visibility of a subtree.<br>
536
- <img src="empty.png"> Use * to expand/collapse a whole subtree.<br>
537
- <img src="empty.png"> Use h to navigate to thread root.<br>
538
- <img src="empty.png"> Use n and p to navigate between threads.<br>
539
- <img src="empty.png"> Click on background to move focus to a subtree.<br>
520
+ &#8226; Enter a decimal value <i>d</i> into the threshold field and click "Apply"
521
+ to hide all nodes marked with time values lower than <i>d</i>.<br>
522
+ &#8226; Click on "Expand All" for full tree expansion.<br>
523
+ &#8226; Click on "Collapse All" to show only top level nodes.<br>
524
+ &#8226; Use a, s, d, w as in Quake or Urban Terror to navigate the tree.<br>
525
+ &#8226; Use f and b to navigate the tree in preorder forward and backwards.<br>
526
+ &#8226; Use x to toggle visibility of a subtree.<br>
527
+ &#8226; Use * to expand/collapse a whole subtree.<br>
528
+ &#8226; Use h to navigate to thread root.<br>
529
+ &#8226; Use n and p to navigate between threads.<br>
530
+ &#8226; Click on background to move focus to a subtree.<br>
540
531
  </div>
541
- <div class="thread">Thread: 2148387240 (100.00% ~ 1.41237)</div><ul name="thread"><li class="color9" style="display:block"><img class="toggle" src="minus.png"> 100.00% (100.00%) <a href="txmt://open?url=file:///Users/skaes/src/ruby-prof/test/printers_test.rb&line=16">PrintersTest#setup</a> [1 calls, 1 total]
542
- <ul><li class="color5" style="display:block"><img class="toggle" src="minus.png"> 50.24% (50.24%) <a href="txmt://open?url=file:///Users/skaes/src/ruby-prof/test/printers_test.rb&line=9">PrintersTest#go</a> [1 calls, 1 total]
543
- <ul><li class="color5" style="display:block"><img class="toggle" src="minus.png"> 50.23% (100.00%) <a href="txmt://open?url=file:///Users/skaes/src/ruby-prof/test/prime.rb&line=46">Object#run_primes</a> [1 calls, 2 total]
544
- <ul><li class="color4" style="display:block"><img class="toggle" src="minus.png"> 49.72% (98.97%) <a href="txmt://open?url=file:///Users/skaes/src/ruby-prof/test/prime.rb&line=24">Object#find_primes</a> [1 calls, 2 total]
545
- <ul><li class="color4" style="display:block"><img class="toggle" src="minus.png"> 49.72% (100.00%) Array#select [1 calls, 2 total]
546
- <ul><li class="color4" style="display:block"><img class="toggle" src="minus.png"> 49.43% (99.42%) <a href="txmt://open?url=file:///Users/skaes/src/ruby-prof/test/prime.rb&line=16">Object#is_prime</a> [10000 calls, 20000 total]
547
- <ul><li class="color4" style="display:block"><img class="toggle" src="minus.png"> 48.85% (98.83%) Integer#upto [10000 calls, 20000 total]
548
- <ul><li class="color05" style="display:block"><img src="empty.png"> 7.13% (14.59%) Fixnum#% [778318 calls, 1544726 total]
549
- </li><li class="color05" style="display:block"><img src="empty.png"> 6.04% (12.36%) Fixnum#== [778318 calls, 1544726 total]
550
- </li></ul></li><li class="color01" style="display:none"><img src="empty.png"> 0.09% (0.17%) Fixnum#- [10000 calls, 20000 total]
551
- </li></ul></li></ul></li></ul></li><li class="color01" style="display:none"><img class="toggle" src="empty.png"> 0.52% (1.03%) <a href="txmt://open?url=file:///Users/skaes/src/ruby-prof/test/prime.rb&line=7">Object#make_random_array</a> [1 calls, 2 total]
552
- <ul style="display:none"><li class="color01" style="display:none"><img class="toggle" src="empty.png"> 0.51% (99.22%) Array#each_index [1 calls, 2 total]
553
- <ul style="display:none"><li class="color01" style="display:none"><img src="empty.png"> 0.12% (22.55%) Kernel#rand [10000 calls, 20000 total]
554
- </li><li class="color01" style="display:none"><img src="empty.png"> 0.09% (18.30%) Array#[]= [10000 calls, 20000 total]
555
- </li></ul></li><li class="color01" style="display:none"><img class="toggle" src="empty.png"> 0.00% (0.71%) Class#new [1 calls, 2 total]
556
- <ul style="display:none"><li class="color01" style="display:none"><img src="empty.png"> 0.00% (96.15%) Array#initialize [1 calls, 2 total]
557
- </li><li class="color01" style="display:none"><img src="empty.png"> 0.00% (1.92%) &lt;Class::Array&gt;#allocate [1 calls, 2 total]
558
- </li></ul></li></ul></li></ul></li></ul></li><li class="color4" style="display:block"><img class="toggle" src="minus.png"> 49.76% (49.76%) <a href="txmt://open?url=file:///Users/skaes/src/ruby-prof/test/prime.rb&line=46">Object#run_primes</a> [1 calls, 2 total]
559
- <ul><li class="color4" style="display:block"><img class="toggle" src="minus.png"> 49.23% (98.93%) <a href="txmt://open?url=file:///Users/skaes/src/ruby-prof/test/prime.rb&line=24">Object#find_primes</a> [1 calls, 2 total]
560
- <ul><li class="color4" style="display:block"><img class="toggle" src="minus.png"> 49.23% (100.00%) Array#select [1 calls, 2 total]
561
- <ul><li class="color4" style="display:block"><img class="toggle" src="minus.png"> 48.94% (99.41%) <a href="txmt://open?url=file:///Users/skaes/src/ruby-prof/test/prime.rb&line=16">Object#is_prime</a> [10000 calls, 20000 total]
562
- <ul><li class="color4" style="display:block"><img class="toggle" src="minus.png"> 48.38% (98.84%) Integer#upto [10000 calls, 20000 total]
563
- <ul><li class="color05" style="display:block"><img src="empty.png"> 7.03% (14.53%) Fixnum#% [766408 calls, 1544726 total]
564
- </li><li class="color01" style="display:block"><img src="empty.png"> 5.89% (12.17%) Fixnum#== [766408 calls, 1544726 total]
565
- </li></ul></li><li class="color01" style="display:none"><img src="empty.png"> 0.08% (0.17%) Fixnum#- [10000 calls, 20000 total]
566
- </li></ul></li></ul></li></ul></li><li class="color01" style="display:none"><img class="toggle" src="empty.png"> 0.53% (1.07%) <a href="txmt://open?url=file:///Users/skaes/src/ruby-prof/test/prime.rb&line=7">Object#make_random_array</a> [1 calls, 2 total]
567
- <ul style="display:none"><li class="color01" style="display:none"><img class="toggle" src="empty.png"> 0.53% (99.26%) Array#each_index [1 calls, 2 total]
568
- <ul style="display:none"><li class="color01" style="display:none"><img src="empty.png"> 0.11% (21.47%) Kernel#rand [10000 calls, 20000 total]
569
- </li><li class="color01" style="display:none"><img src="empty.png"> 0.10% (18.28%) Array#[]= [10000 calls, 20000 total]
570
- </li></ul></li><li class="color01" style="display:none"><img class="toggle" src="empty.png"> 0.00% (0.72%) Class#new [1 calls, 2 total]
571
- <ul style="display:none"><li class="color01" style="display:none"><img src="empty.png"> 0.00% (88.89%) Array#initialize [1 calls, 2 total]
572
- </li><li class="color01" style="display:none"><img src="empty.png"> 0.00% (1.85%) &lt;Class::Array&gt;#allocate [1 calls, 2 total]
573
- </li></ul></li></ul></li></ul></li></ul></li></ul><div id="sentinel"></div></body></html>
532
+ <div class="thread">Thread: 70140045951280, Fiber: 70140054192180 (100.00% ~ 0.0029680728912353516)</div><ul name="thread"><li class="color9" style="display:block"><a href="#" class="toggle minus" ></a><span> 100.00% (100.00%) <a href="txmt://open?url=file:///Users/stefan.kaes/src/ruby-prof/test/printers_test.rb&line=14">PrintersTest#setup</a> [1 calls, 1 total]</span>
533
+ <ul><li class="color9" style="display:block"><a href="#" class="toggle minus" ></a><span> 99.82% (99.82%) <a href="txmt://open?url=file:///Users/stefan.kaes/src/ruby-prof/test/prime.rb&line=45">Object#run_primes</a> [1 calls, 1 total]</span>
534
+ <ul><li class="color9" style="display:block"><a href="#" class="toggle minus" ></a><span> 92.62% (92.78%) <a href="txmt://open?url=file:///Users/stefan.kaes/src/ruby-prof/test/prime.rb&line=24">Object#find_primes</a> [1 calls, 1 total]</span>
535
+ <ul><li class="color9" style="display:block"><a href="#" class="toggle minus" ></a><span> 92.55% (99.93%) Array#select [1 calls, 1 total]</span>
536
+ <ul><li class="color8" style="display:block"><a href="#" class="toggle minus" ></a><span> 89.73% (96.95%) <a href="txmt://open?url=file:///Users/stefan.kaes/src/ruby-prof/test/prime.rb&line=16">Object#is_prime</a> [200 calls, 200 total]</span>
537
+ <ul><li class="color8" style="display:block"><a href="#" class="toggle empty" ></a><span> 86.63% (96.54%) Integer#upto [200 calls, 201 total]</span>
538
+ </li></ul></li></ul></li></ul></li><li class="color05" style="display:block"><a href="#" class="toggle plus" ></a><span> 6.64% (6.65%) <a href="txmt://open?url=file:///Users/stefan.kaes/src/ruby-prof/test/prime.rb&line=7">Object#make_random_array</a> [1 calls, 1 total]</span>
539
+ <ul style="display:none"><li class="color05" style="display:block"><a href="#" class="toggle plus" ></a><span> 6.33% (95.40%) Array#each_index [1 calls, 1 total]</span>
540
+ <ul style="display:none"><li class="color01" style="display:block"><a href="#" class="toggle plus" ></a><span> 3.96% (62.56%) Kernel#rand [200 calls, 200 total]</span>
541
+ <ul style="display:none"><li class="color01" style="display:block"><a href="#" class="toggle empty" ></a><span> 1.02% (25.76%) Kernel#respond_to_missing? [200 calls, 200 total]</span>
542
+ </li></ul></li></ul></li><li class="color01" style="display:none"><a href="#" class="toggle empty" ></a><span> 0.20% (3.03%) Class#new [1 calls, 1 total]</span>
543
+ <ul style="display:none"><li class="color01" style="display:none"><a href="#" class="toggle empty" ></a><span> 0.06% (32.00%) Array#initialize [1 calls, 1 total]</span>
544
+ </li></ul></li></ul></li><li class="color01" style="display:none"><a href="#" class="toggle empty" ></a><span> 0.51% (0.51%) <a href="txmt://open?url=file:///Users/stefan.kaes/src/ruby-prof/test/prime.rb&line=31">Object#find_largest</a> [1 calls, 1 total]</span>
545
+ <ul style="display:none"><li class="color01" style="display:none"><a href="#" class="toggle empty" ></a><span> 0.37% (73.02%) Integer#upto [1 calls, 201 total]</span>
546
+ </li><li class="color01" style="display:none"><a href="#" class="toggle empty" ></a><span> 0.03% (6.35%) Array#first [1 calls, 1 total]</span>
547
+ </li></ul></li></ul></li></ul></li></ul><div id="sentinel"></div></div></body></html>