Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(110)

Side by Side Diff: Source/devtools/front_end/timeline/TimelineUIUtils.js

Issue 1048663002: [invalidations] Convert invalidations to use TreeOutline (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Use TreeOutlineInShadow Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698