OLD | NEW |
1 // Copyright 2017 the V8 project authors. All rights reserved. | 1 // Copyright 2017 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 "use strict" | 5 "use strict" |
6 | 6 |
7 function $(id) { | 7 function $(id) { |
8 return document.getElementById(id); | 8 return document.getElementById(id); |
9 } | 9 } |
10 | 10 |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
76 callTreeState.categories = "code-type"; | 76 callTreeState.categories = "code-type"; |
77 callTreeState.sort = "time"; | 77 callTreeState.sort = "time"; |
78 break; | 78 break; |
79 case "top-down": | 79 case "top-down": |
80 callTreeState.attribution = "js-exclude-bc"; | 80 callTreeState.attribution = "js-exclude-bc"; |
81 callTreeState.categories = "none"; | 81 callTreeState.categories = "none"; |
82 callTreeState.sort = "time"; | 82 callTreeState.sort = "time"; |
83 break; | 83 break; |
84 case "function-list": | 84 case "function-list": |
85 callTreeState.attribution = "js-exclude-bc"; | 85 callTreeState.attribution = "js-exclude-bc"; |
86 callTreeState.categories = "none"; | 86 callTreeState.categories = "code-type"; |
87 callTreeState.sort = "own-time"; | 87 callTreeState.sort = "own-time"; |
88 break; | 88 break; |
89 default: | 89 default: |
90 console.error("Invalid mode"); | 90 console.error("Invalid mode"); |
91 } | 91 } |
92 main.currentState = setCallTreeState(main.currentState, callTreeState); | 92 main.currentState = setCallTreeState(main.currentState, callTreeState); |
93 main.delayRender(); | 93 main.delayRender(); |
94 } | 94 } |
95 }, | 95 }, |
96 | 96 |
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
272 return (type, kind) => type !== 'CODE'; | 272 return (type, kind) => type !== 'CODE'; |
273 case "js-exclude-bc": | 273 case "js-exclude-bc": |
274 return (type, kind) => | 274 return (type, kind) => |
275 type !== 'CODE' || !CallTreeView.IsBytecodeHandler(kind); | 275 type !== 'CODE' || !CallTreeView.IsBytecodeHandler(kind); |
276 } | 276 } |
277 } | 277 } |
278 | 278 |
279 sortFromId(id) { | 279 sortFromId(id) { |
280 switch (id) { | 280 switch (id) { |
281 case "time": | 281 case "time": |
282 return (c1, c2) => c2.ticks - c1.ticks; | 282 return (c1, c2) => { |
| 283 if (c1.ticks < c2.ticks) return 1; |
| 284 else if (c1.ticks > c2.ticks) return -1; |
| 285 return c2.ownTicks - c1.ownTicks; |
| 286 } |
283 case "own-time": | 287 case "own-time": |
284 return (c1, c2) => c2.ownTicks - c1.ownTicks; | 288 return (c1, c2) => { |
| 289 if (c1.ownTicks < c2.ownTicks) return 1; |
| 290 else if (c1.ownTicks > c2.ownTicks) return -1; |
| 291 return c2.ticks - c1.ticks; |
| 292 } |
285 case "category-time": | 293 case "category-time": |
286 return (c1, c2) => { | 294 return (c1, c2) => { |
287 if (c1.type === c2.type) return c2.ticks - c1.ticks; | 295 if (c1.type === c2.type) return c2.ticks - c1.ticks; |
288 if (c1.type < c2.type) return 1; | 296 if (c1.type < c2.type) return 1; |
289 return -1; | 297 return -1; |
290 }; | 298 }; |
291 case "category-own-time": | 299 case "category-own-time": |
292 return (c1, c2) => { | 300 return (c1, c2) => { |
293 if (c1.type === c2.type) return c2.ownTicks - c1.ownTicks; | 301 if (c1.type === c2.type) return c2.ownTicks - c1.ownTicks; |
294 if (c1.type < c2.type) return 1; | 302 if (c1.type < c2.type) return 1; |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
376 // again. | 384 // again. |
377 expander.textContent = "\u25BE"; | 385 expander.textContent = "\u25BE"; |
378 let expandHandler = expander.onclick; | 386 let expandHandler = expander.onclick; |
379 expander.onclick = () => { | 387 expander.onclick = () => { |
380 that.collapseRow(tree, expander, expandHandler); | 388 that.collapseRow(tree, expander, expandHandler); |
381 } | 389 } |
382 } | 390 } |
383 | 391 |
384 // Collect the children, and sort them by ticks. | 392 // Collect the children, and sort them by ticks. |
385 let children = []; | 393 let children = []; |
386 for (let child in tree.children) { | 394 let filter = |
387 if (tree.children[child].ticks > 0) { | 395 this.filterFromFilterId(this.currentState.callTree.attribution); |
388 children.push(tree.children[child]); | 396 for (let childId in tree.children) { |
| 397 let child = tree.children[childId]; |
| 398 if (child.ticks > 0) { |
| 399 children.push(child); |
| 400 if (child.delayedExpansion) { |
| 401 expandTreeNode(this.currentState.file, child, filter); |
| 402 } |
389 } | 403 } |
390 } | 404 } |
391 children.sort(this.sortFromId(this.currentState.callTree.sort)); | 405 children.sort(this.sortFromId(this.currentState.callTree.sort)); |
392 | 406 |
393 for (let i = 0; i < children.length; i++) { | 407 for (let i = 0; i < children.length; i++) { |
394 let node = children[i]; | 408 let node = children[i]; |
395 let row = this.rows.insertRow(index); | 409 let row = this.rows.insertRow(index); |
396 row.id = id + i + "/"; | 410 row.id = id + i + "/"; |
397 | 411 |
398 if (node.type != "CAT") { | 412 if (node.type != "CAT") { |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
499 addOptions(this.selectSort, [ | 513 addOptions(this.selectSort, [ |
500 { value : "time", text : "Time (including children)" }, | 514 { value : "time", text : "Time (including children)" }, |
501 { value : "own-time", text : "Own time" }, | 515 { value : "own-time", text : "Own time" }, |
502 { value : "category-time", text : "Code category, time" }, | 516 { value : "category-time", text : "Code category, time" }, |
503 { value : "category-own-time", text : "Code category, own time"} | 517 { value : "category-own-time", text : "Code category, own time"} |
504 ], calltree.sort); | 518 ], calltree.sort); |
505 return; | 519 return; |
506 case "function-list": | 520 case "function-list": |
507 addOptions(this.selectAttribution, attributions, calltree.attribution); | 521 addOptions(this.selectAttribution, attributions, calltree.attribution); |
508 addOptions(this.selectCategories, [ | 522 addOptions(this.selectCategories, [ |
| 523 { value : "code-type", text : "Code type" }, |
509 { value : "none", text : "None" } | 524 { value : "none", text : "None" } |
510 ], calltree.categories); | 525 ], calltree.categories); |
511 addOptions(this.selectSort, [ | 526 addOptions(this.selectSort, [ |
512 { value : "own-time", text : "Own time" }, | 527 { value : "own-time", text : "Own time" }, |
513 { value : "time", text : "Time (including children)" }, | 528 { value : "time", text : "Time (including children)" }, |
514 { value : "category-own-time", text : "Code category, own time"}, | 529 { value : "category-own-time", text : "Code category, own time"}, |
515 { value : "category-time", text : "Code category, time" }, | 530 { value : "category-time", text : "Code category, time" }, |
516 ], calltree.sort); | 531 ], calltree.sort); |
517 return; | 532 return; |
518 } | 533 } |
(...skipping 24 matching lines...) Expand all Loading... |
543 this.element.style.display = "inherit"; | 558 this.element.style.display = "inherit"; |
544 | 559 |
545 let mode = this.currentState.callTree.mode; | 560 let mode = this.currentState.callTree.mode; |
546 if (!oldState || mode !== oldState.callTree.mode) { | 561 if (!oldState || mode !== oldState.callTree.mode) { |
547 // Technically, we should also call this if attribution, categories or | 562 // Technically, we should also call this if attribution, categories or |
548 // sort change, but the selection is already highlighted by the combobox | 563 // sort change, but the selection is already highlighted by the combobox |
549 // itself, so we do need to do anything here. | 564 // itself, so we do need to do anything here. |
550 this.fillSelects(newState.callTree); | 565 this.fillSelects(newState.callTree); |
551 } | 566 } |
552 | 567 |
553 let inclusiveDisplay = (mode === "bottom-up") ? "none" : "inherit"; | 568 let ownTimeClass = (mode === "bottom-up") ? "numeric-hidden" : "numeric"; |
554 let ownTimeTh = $(this.treeElement.id + "-own-time-header"); | 569 let ownTimeTh = $(this.treeElement.id + "-own-time-header"); |
555 ownTimeTh.style.display = inclusiveDisplay; | 570 ownTimeTh.classList = ownTimeClass; |
556 let ownTicksTh = $(this.treeElement.id + "-own-ticks-header"); | 571 let ownTicksTh = $(this.treeElement.id + "-own-ticks-header"); |
557 ownTicksTh.style.display = inclusiveDisplay; | 572 ownTicksTh.classList = ownTimeClass; |
558 | 573 |
559 // Build the tree. | 574 // Build the tree. |
560 let stackProcessor; | 575 let stackProcessor; |
561 let filter = this.filterFromFilterId(this.currentState.callTree.attribution)
; | 576 let filter = this.filterFromFilterId(this.currentState.callTree.attribution)
; |
562 if (mode === "top-down") { | 577 if (mode === "top-down") { |
563 stackProcessor = | 578 stackProcessor = |
564 new PlainCallTreeProcessor(filter, false); | 579 new PlainCallTreeProcessor(filter, false); |
565 } else if (mode === "function-list") { | 580 } else if (mode === "function-list") { |
566 stackProcessor = | 581 stackProcessor = new FunctionListTree( |
567 new FunctionListTree(filter); | 582 filter, this.currentState.callTree.categories === "code-type"); |
568 | 583 |
569 } else { | 584 } else { |
570 console.assert(mode === "bottom-up"); | 585 console.assert(mode === "bottom-up"); |
571 if (this.currentState.callTree.categories == "none") { | 586 if (this.currentState.callTree.categories == "none") { |
572 stackProcessor = | 587 stackProcessor = |
573 new PlainCallTreeProcessor(filter, true); | 588 new PlainCallTreeProcessor(filter, true); |
574 } else { | 589 } else { |
575 console.assert(this.currentState.callTree.categories === "code-type"); | 590 console.assert(this.currentState.callTree.categories === "code-type"); |
576 stackProcessor = | 591 stackProcessor = |
577 new CategorizedCallTreeProcessor(filter, true); | 592 new CategorizedCallTreeProcessor(filter, true); |
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
803 | 818 |
804 class HelpView { | 819 class HelpView { |
805 constructor() { | 820 constructor() { |
806 this.element = $("help"); | 821 this.element = $("help"); |
807 } | 822 } |
808 | 823 |
809 render(newState) { | 824 render(newState) { |
810 this.element.style.display = newState.file ? "none" : "inherit"; | 825 this.element.style.display = newState.file ? "none" : "inherit"; |
811 } | 826 } |
812 } | 827 } |
OLD | NEW |