Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 Google Inc. All rights reserved. |
| 3 * Copyright (C) 2012 Intel Inc. All rights reserved. | 3 * Copyright (C) 2012 Intel Inc. All rights reserved. |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions are | 6 * modification, are permitted provided that the following conditions are |
| 7 * met: | 7 * met: |
| 8 * | 8 * |
| 9 * * Redistributions of source code must retain the above copyright | 9 * * Redistributions of source code must retain the above copyright |
| 10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
| (...skipping 736 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 747 title = WebInspector.UIString("Layout invalidations"); | 747 title = WebInspector.UIString("Layout invalidations"); |
| 748 break; | 748 break; |
| 749 default: | 749 default: |
| 750 title = WebInspector.UIString("Other invalidations"); | 750 title = WebInspector.UIString("Other invalidations"); |
| 751 break; | 751 break; |
| 752 } | 752 } |
| 753 | 753 |
| 754 var detailsNode = createElementWithClass("div", "timeline-details-view-row") ; | 754 var detailsNode = createElementWithClass("div", "timeline-details-view-row") ; |
| 755 var titleElement = detailsNode.createChild("span", "timeline-details-view-ro w-title"); | 755 var titleElement = detailsNode.createChild("span", "timeline-details-view-ro w-title"); |
| 756 titleElement.textContent = WebInspector.UIString("%s: ", title); | 756 titleElement.textContent = WebInspector.UIString("%s: ", title); |
| 757 var eventsList = detailsNode.createChild("div", "timeline-details-view-row-v alue"); | 757 |
| 758 var eventsTreeOutline = new TreeOutlineInShadow(); | |
| 759 eventsTreeOutline.element.classList.add("invalidations-tree"); | |
| 760 detailsNode.appendChild(eventsTreeOutline.element); | |
| 761 | |
| 758 var invalidationGroups = groupInvalidationsByCause(invalidations); | 762 var invalidationGroups = groupInvalidationsByCause(invalidations); |
| 759 invalidationGroups.forEach(function(group) { | 763 invalidationGroups.forEach(function(group) { |
| 760 appendInvalidationGroup(eventsList, group); | 764 appendInvalidationGroup(eventsTreeOutline, group); |
| 761 }); | 765 }); |
| 762 contentHelper.element.appendChild(detailsNode); | 766 contentHelper.element.appendChild(detailsNode); |
| 763 | 767 |
| 764 /** | 768 /** |
| 765 * @param {!Array.<!WebInspector.InvalidationTrackingEvent>} invalidations | 769 * @param {!Array.<!WebInspector.InvalidationTrackingEvent>} invalidations |
| 766 */ | 770 */ |
| 767 function groupInvalidationsByCause(invalidations) | 771 function groupInvalidationsByCause(invalidations) |
| 768 { | 772 { |
| 769 var causeToInvalidationMap = {}; | 773 var causeToInvalidationMap = {}; |
| 770 for (var index = 0; index < invalidations.length; index++) { | 774 for (var index = 0; index < invalidations.length; index++) { |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 784 | 788 |
| 785 if (causeToInvalidationMap[causeKey]) | 789 if (causeToInvalidationMap[causeKey]) |
| 786 causeToInvalidationMap[causeKey].push(invalidation); | 790 causeToInvalidationMap[causeKey].push(invalidation); |
| 787 else | 791 else |
| 788 causeToInvalidationMap[causeKey] = [ invalidation ]; | 792 causeToInvalidationMap[causeKey] = [ invalidation ]; |
| 789 } | 793 } |
| 790 return Object.values(causeToInvalidationMap); | 794 return Object.values(causeToInvalidationMap); |
| 791 } | 795 } |
| 792 | 796 |
| 793 /** | 797 /** |
| 794 * @param {!Element} parentElement | 798 * @param {!TreeOutline} treeOutline |
| 795 * @param {!Array.<!WebInspector.InvalidationTrackingEvent>} invalidations | 799 * @param {!Array.<!WebInspector.InvalidationTrackingEvent>} invalidations |
| 796 */ | 800 */ |
| 797 function appendInvalidationGroup(parentElement, invalidations) | 801 function appendInvalidationGroup(treeOutline, invalidations) |
| 798 { | 802 { |
| 799 if (!target) | 803 if (!target) |
| 800 return; | 804 return; |
| 801 | 805 |
| 802 var row = parentElement.createChild("div", "invalidations-group section" ); | |
| 803 var header = row.createChild("div", "header"); | |
| 804 header.addEventListener("click", function() { | |
| 805 toggleDetails(header, invalidations); | |
| 806 }); | |
| 807 | |
| 808 var first = invalidations[0]; | 806 var first = invalidations[0]; |
| 809 var reason = first.cause.reason; | 807 var reason = first.cause.reason; |
| 810 var topFrame = first.cause.stackTrace && first.cause.stackTrace[0]; | 808 var topFrame = first.cause.stackTrace && first.cause.stackTrace[0]; |
| 811 | 809 |
| 810 var title = createElement("span"); | |
| 812 if (reason) | 811 if (reason) |
| 813 header.createTextChild(WebInspector.UIString("%s for ", reason)); | 812 title.createTextChild(WebInspector.UIString("%s for ", reason)); |
| 814 else | 813 else |
| 815 header.createTextChild(WebInspector.UIString("Unknown cause for ")); | 814 title.createTextChild(WebInspector.UIString("Unknown cause for ")); |
| 816 | 815 |
| 817 appendTruncatedNodeList(header, invalidations); | 816 var treeElement = new TreeElement(title, true); |
| 817 treeElement.listItemElement.classList.add("header"); | |
| 818 treeElement.selectable = false; | |
| 819 treeElement.isEventWithinDisclosureTriangle = function() {return true;} | |
|
pfeldman
2015/04/07 15:02:09
you should not need this.
pdr.
2015/04/09 06:14:49
Fixed. "toggleOnClick = true" was what I was looki
| |
| 820 treeOutline.appendChild(treeElement); | |
| 821 | |
| 822 appendTruncatedNodeList(title, invalidations); | |
| 818 | 823 |
| 819 if (topFrame && contentHelper.linkifier()) { | 824 if (topFrame && contentHelper.linkifier()) { |
| 820 header.createTextChild(WebInspector.UIString(". ")); | 825 title.createTextChild(WebInspector.UIString(". ")); |
| 821 var stack = header.createChild("span", "monospace"); | 826 var stack = title.createChild("span", "monospace"); |
| 822 | |
| 823 stack.createChild("span").textContent = WebInspector.beautifyFunctio nName(topFrame.functionName); | 827 stack.createChild("span").textContent = WebInspector.beautifyFunctio nName(topFrame.functionName); |
| 824 stack.createChild("span").textContent = " @ "; | 828 stack.createChild("span").textContent = " @ "; |
| 825 stack.createChild("span").appendChild(contentHelper.linkifier().link ifyConsoleCallFrame(target, topFrame)); | 829 stack.createChild("span").appendChild(contentHelper.linkifier().link ifyConsoleCallFrame(target, topFrame)); |
| 826 } | 830 } |
| 831 | |
| 832 treeElement.onexpand = onExpand.bind(null, treeElement, invalidations); | |
|
pfeldman
2015/04/07 15:02:09
We try not to do this. You should extend TreeEleme
pdr.
2015/04/09 06:14:49
Done. This is much cleaner but unfortunately makes
| |
| 833 | |
| 834 /** | |
| 835 * @param {!TreeElement} treeElement | |
| 836 * @param {!Array.<!WebInspector.InvalidationTrackingEvent>} invalidatio ns | |
| 837 */ | |
| 838 function onExpand(treeElement, invalidations) | |
| 839 { | |
| 840 if (treeElement.childCount() >= 1) | |
|
pfeldman
2015/04/07 15:02:09
You should override onpopulate which is going to b
pdr.
2015/04/09 06:14:49
Done.
| |
| 841 return; | |
| 842 | |
| 843 var content = createElementWithClass("div", "content"); | |
| 844 | |
| 845 var first = invalidations[0]; | |
| 846 if (first.cause.stackTrace) { | |
| 847 var stack = content.createChild("div"); | |
| 848 stack.createTextChild(WebInspector.UIString("Stack trace:")); | |
| 849 contentHelper.createChildStackTraceElement(stack, first.cause.st ackTrace); | |
| 850 } | |
| 851 | |
| 852 content.createTextChild(invalidations.length > 1 ? WebInspector.UISt ring("Nodes:") : WebInspector.UIString("Node:")); | |
| 853 var nodeList = content.createChild("div", "node-list"); | |
| 854 appendDetailedNodeList(nodeList, invalidations); | |
| 855 | |
| 856 var contentTreeElement = new TreeElement(content, false); | |
| 857 contentTreeElement.selectable = false; | |
| 858 treeElement.appendChild(contentTreeElement); | |
| 859 } | |
| 827 } | 860 } |
| 828 | 861 |
| 829 /** | 862 /** |
| 830 * @param {!WebInspector.InvalidationTrackingEvent} invalidation | 863 * @param {!WebInspector.InvalidationTrackingEvent} invalidation |
| 831 * @param {boolean} showUnknownNodes | 864 * @param {boolean} showUnknownNodes |
| 832 */ | 865 */ |
| 833 function createInvalidationNode(invalidation, showUnknownNodes) | 866 function createInvalidationNode(invalidation, showUnknownNodes) |
| 834 { | 867 { |
| 835 var node = contentHelper.nodeForBackendId(invalidation.nodeId); | 868 var node = contentHelper.nodeForBackendId(invalidation.nodeId); |
| 836 if (node) | 869 if (node) |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 850 * @param {!Element} parentElement | 883 * @param {!Element} parentElement |
| 851 * @param {!Array.<!WebInspector.InvalidationTrackingEvent>} invalidations | 884 * @param {!Array.<!WebInspector.InvalidationTrackingEvent>} invalidations |
| 852 */ | 885 */ |
| 853 function appendTruncatedNodeList(parentElement, invalidations) | 886 function appendTruncatedNodeList(parentElement, invalidations) |
| 854 { | 887 { |
| 855 var invalidationNodes = []; | 888 var invalidationNodes = []; |
| 856 var invalidationNodeIdMap = {}; | 889 var invalidationNodeIdMap = {}; |
| 857 for (var i = 0; i < invalidations.length; i++) { | 890 for (var i = 0; i < invalidations.length; i++) { |
| 858 var invalidation = invalidations[i]; | 891 var invalidation = invalidations[i]; |
| 859 var invalidationNode = createInvalidationNode(invalidation, false); | 892 var invalidationNode = createInvalidationNode(invalidation, false); |
| 893 invalidationNode.onclick = function(event) { | |
|
pfeldman
2015/04/07 15:02:09
add named click listener please.
pdr.
2015/04/09 06:14:49
Done, and switched to "consume".
| |
| 894 event.cancelBubble = true; | |
| 895 return false; | |
| 896 } | |
| 860 if (invalidationNode && !invalidationNodeIdMap[invalidation.nodeId]) { | 897 if (invalidationNode && !invalidationNodeIdMap[invalidation.nodeId]) { |
| 861 invalidationNodes.push(invalidationNode); | 898 invalidationNodes.push(invalidationNode); |
| 862 invalidationNodeIdMap[invalidation.nodeId] = true; | 899 invalidationNodeIdMap[invalidation.nodeId] = true; |
| 863 } | 900 } |
| 864 } | 901 } |
| 865 | 902 |
| 866 if (invalidationNodes.length === 1) { | 903 if (invalidationNodes.length === 1) { |
| 867 parentElement.appendChild(invalidationNodes[0]); | 904 parentElement.appendChild(invalidationNodes[0]); |
| 868 } else if (invalidationNodes.length === 2) { | 905 } else if (invalidationNodes.length === 2) { |
| 869 parentElement.appendChild(invalidationNodes[0]); | 906 parentElement.appendChild(invalidationNodes[0]); |
| 870 parentElement.createTextChild(WebInspector.UIString(" and ")); | 907 parentElement.createTextChild(WebInspector.UIString(" and ")); |
| 871 parentElement.appendChild(invalidationNodes[1]); | 908 parentElement.appendChild(invalidationNodes[1]); |
| 872 } else if (invalidationNodes.length >= 3) { | 909 } else if (invalidationNodes.length >= 3) { |
| 873 parentElement.appendChild(invalidationNodes[0]); | 910 parentElement.appendChild(invalidationNodes[0]); |
| 874 parentElement.createTextChild(WebInspector.UIString(", ")); | 911 parentElement.createTextChild(WebInspector.UIString(", ")); |
| 875 parentElement.appendChild(invalidationNodes[1]); | 912 parentElement.appendChild(invalidationNodes[1]); |
| 876 parentElement.createTextChild(WebInspector.UIString(", and %s others ", invalidationNodes.length - 2)); | 913 parentElement.createTextChild(WebInspector.UIString(", and %s others ", invalidationNodes.length - 2)); |
| 877 } | 914 } |
| 878 } | 915 } |
| 879 | 916 |
| 880 /** | 917 /** |
| 881 * @param {!Element} header | |
| 882 * @param {!Array.<!WebInspector.InvalidationTrackingEvent>} invalidations | |
| 883 */ | |
| 884 function toggleDetails(header, invalidations) | |
| 885 { | |
| 886 var wasExpanded = header.classList.contains("expanded"); | |
| 887 header.classList.toggle("expanded", !wasExpanded); | |
| 888 header.parentElement.classList.toggle("expanded", !wasExpanded); | |
| 889 | |
| 890 if (wasExpanded) { | |
| 891 var content = header.nextElementSibling; | |
| 892 if (content) | |
| 893 content.remove(); | |
| 894 } else { | |
| 895 createInvalidationGroupDetails(header.parentElement, invalidations); | |
| 896 } | |
| 897 } | |
| 898 | |
| 899 /** | |
| 900 * @param {!Element} parentElement | 918 * @param {!Element} parentElement |
| 901 * @param {!Array.<!WebInspector.InvalidationTrackingEvent>} invalidations | 919 * @param {!Array.<!WebInspector.InvalidationTrackingEvent>} invalidations |
| 902 */ | 920 */ |
| 903 function createInvalidationGroupDetails(parentElement, invalidations) | 921 function createInvalidationGroupDetails(parentElement, invalidations) |
| 904 { | 922 { |
| 905 var content = parentElement.createChild("div", "content"); | 923 var content = parentElement.createChild("div", "content"); |
| 906 | 924 |
| 907 var first = invalidations[0]; | 925 var first = invalidations[0]; |
| 908 if (first.cause.stackTrace) { | 926 if (first.cause.stackTrace) { |
| 909 var stack = content.createChild("div"); | 927 var stack = content.createChild("div"); |
| 910 stack.createTextChild(WebInspector.UIString("Stack trace:")); | 928 stack.createTextChild(WebInspector.UIString("Stack trace:")); |
| 911 contentHelper.createChildStackTraceElement(stack, first.cause.stackT race); | 929 contentHelper.createChildStackTraceElement(stack, first.cause.stackT race); |
| 912 } | 930 } |
| 913 | 931 |
| 914 content.createTextChild(invalidations.length > 1 ? WebInspector.UIString ("Nodes:") : WebInspector.UIString("Node:")); | 932 content.createTextChild(invalidations.length > 1 ? WebInspector.UIString ("Nodes:") : WebInspector.UIString("Node:")); |
| 915 var nodeList = content.createChild("div", "node-list timeline-details-vi ew-row-stack-trace"); | 933 var nodeList = content.createChild("div", "node-list"); |
| 916 appendDetailedNodeList(nodeList, invalidations); | 934 appendDetailedNodeList(nodeList, invalidations); |
| 917 } | 935 } |
| 918 | 936 |
| 919 /** | 937 /** |
| 920 * @param {!Element} parentElement | 938 * @param {!Element} parentElement |
| 921 * @param {!Array.<!WebInspector.InvalidationTrackingEvent>} invalidations | 939 * @param {!Array.<!WebInspector.InvalidationTrackingEvent>} invalidations |
| 922 */ | 940 */ |
| 923 function appendDetailedNodeList(parentElement, invalidations) | 941 function appendDetailedNodeList(parentElement, invalidations) |
| 924 { | 942 { |
| 925 var firstNode = true; | 943 var firstNode = true; |
| (...skipping 919 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1845 return; | 1863 return; |
| 1846 | 1864 |
| 1847 var stackTraceElement = parentElement.createChild("div", "timeline-detai ls-view-row-value timeline-details-view-row-stack-trace monospace"); | 1865 var stackTraceElement = parentElement.createChild("div", "timeline-detai ls-view-row-value timeline-details-view-row-stack-trace monospace"); |
| 1848 | 1866 |
| 1849 var callFrameElem = WebInspector.DOMPresentationUtils.buildStackTracePre viewContents(this._target, this._linkifier, stackTrace); | 1867 var callFrameElem = WebInspector.DOMPresentationUtils.buildStackTracePre viewContents(this._target, this._linkifier, stackTrace); |
| 1850 | 1868 |
| 1851 stackTraceElement.appendChild(callFrameElem); | 1869 stackTraceElement.appendChild(callFrameElem); |
| 1852 } | 1870 } |
| 1853 | 1871 |
| 1854 } | 1872 } |
| OLD | NEW |