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

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

Issue 1285213005: DevTools: Move build(TopDown|BottomUp)Tree to TimelineModel (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: update the test. Created 5 years, 4 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
« no previous file with comments | « Source/devtools/front_end/timeline/TimelineTreeView.js ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 1591 matching lines...) Expand 10 before | Expand all | Expand 10 after
1602 new WebInspector.TimelineUIUtils.EventDispatchTypeDescriptor(2, green, [ "wheel"]), 1602 new WebInspector.TimelineUIUtils.EventDispatchTypeDescriptor(2, green, [ "wheel"]),
1603 new WebInspector.TimelineUIUtils.EventDispatchTypeDescriptor(3, orange, ["click", "mousedown", "mouseup"]), 1603 new WebInspector.TimelineUIUtils.EventDispatchTypeDescriptor(3, orange, ["click", "mousedown", "mouseup"]),
1604 new WebInspector.TimelineUIUtils.EventDispatchTypeDescriptor(3, orange, ["touchstart", "touchend", "touchmove", "touchcancel"]), 1604 new WebInspector.TimelineUIUtils.EventDispatchTypeDescriptor(3, orange, ["touchstart", "touchend", "touchmove", "touchcancel"]),
1605 new WebInspector.TimelineUIUtils.EventDispatchTypeDescriptor(3, orange, ["pointerdown", "pointerup", "pointercancel", "gotpointercapture", "lostpointerc apture"]), 1605 new WebInspector.TimelineUIUtils.EventDispatchTypeDescriptor(3, orange, ["pointerdown", "pointerup", "pointercancel", "gotpointercapture", "lostpointerc apture"]),
1606 new WebInspector.TimelineUIUtils.EventDispatchTypeDescriptor(3, purple, ["keydown", "keyup", "keypress"]) 1606 new WebInspector.TimelineUIUtils.EventDispatchTypeDescriptor(3, purple, ["keydown", "keyup", "keypress"])
1607 ]; 1607 ];
1608 return WebInspector.TimelineUIUtils._eventDispatchDesciptors; 1608 return WebInspector.TimelineUIUtils._eventDispatchDesciptors;
1609 } 1609 }
1610 1610
1611 /** 1611 /**
1612 * @param {!Array<!WebInspector.TracingModel.Event>} events
1613 * @param {number} startTime
1614 * @param {number} endTime
1615 * @param {!Array<!WebInspector.TraceEventFilter>} filters
1616 * @param {function(!WebInspector.TracingModel.Event):string} eventIdCallback
1617 * @return {!WebInspector.TimelineModel.ProfileTreeNode}
1618 */
1619 WebInspector.TimelineUIUtils.buildTopDownTree = function(events, startTime, endT ime, filters, eventIdCallback)
1620 {
1621 // Temporarily deposit a big enough value that exceeds the max recording tim e.
1622 var /** @const */ initialTime = 1e7;
1623 var root = new WebInspector.TimelineModel.ProfileTreeNode();
1624 root.totalTime = initialTime;
1625 root.selfTime = initialTime;
1626 root.name = WebInspector.UIString("Top-Down Chart");
1627 var parent = root;
1628
1629 /**
1630 * @param {!WebInspector.TracingModel.Event} e
1631 * @return {boolean}
1632 */
1633 function filter(e)
1634 {
1635 if (!e.endTime && e.phase !== WebInspector.TracingModel.Phase.Instant)
1636 return false;
1637 if (e.endTime <= startTime || e.startTime >= endTime)
1638 return false;
1639 if (WebInspector.TracingModel.isAsyncPhase(e.phase))
1640 return false;
1641 for (var filter of filters) {
1642 if (!filter.accept(e))
1643 return false;
1644 }
1645 return true;
1646 }
1647
1648 /**
1649 * @param {!WebInspector.TracingModel.Event} e
1650 */
1651 function onStartEvent(e)
1652 {
1653 if (!filter(e))
1654 return;
1655 var time = Math.min(endTime, e.endTime) - Math.max(startTime, e.startTim e);
1656 var id = eventIdCallback(e);
1657 if (!parent.children)
1658 parent.children = /** @type {!Map<string,!WebInspector.TimelineModel .ProfileTreeNode>} */ (new Map());
1659 var node = parent.children.get(id);
1660 if (node) {
1661 node.selfTime += time;
1662 node.totalTime += time;
1663 } else {
1664 node = new WebInspector.TimelineModel.ProfileTreeNode();
1665 node.totalTime = time;
1666 node.selfTime = time;
1667 node.parent = parent;
1668 node.name = eventName(e);
1669 node.id = id;
1670 node.event = e;
1671 parent.children.set(id, node);
1672 }
1673 parent.selfTime -= time;
1674 if (parent.selfTime < 0) {
1675 console.log("Error: Negative self of " + parent.selfTime, e);
1676 parent.selfTime = 0;
1677 }
1678 parent = node;
1679 }
1680
1681 /**
1682 * @param {!WebInspector.TracingModel.Event} e
1683 */
1684 function onEndEvent(e)
1685 {
1686 if (!filter(e))
1687 return;
1688 parent = parent.parent;
1689 }
1690
1691 /**
1692 * @param {!WebInspector.TracingModel.Event} e
1693 * @return {string}
1694 */
1695 function eventName(e)
1696 {
1697 if (e.name === "JSFrame")
1698 return WebInspector.beautifyFunctionName(e.args.data.functionName);
1699 if (e.name === "EventDispatch")
1700 return WebInspector.UIString("Event%s", e.args.data ? " (" + e.args. data.type + ")" : "");
1701 return e.name;
1702 }
1703
1704 WebInspector.TimelineModel.forEachEvent(events, onStartEvent, onEndEvent);
1705 root.totalTime -= root.selfTime;
1706 root.selfTime = 0;
1707 return root;
1708 }
1709
1710 /**
1711 * @param {!WebInspector.TimelineModel.ProfileTreeNode} topDownTree
1712 * @param {function(!WebInspector.TimelineModel.ProfileTreeNode):?WebInspector.T imelineModel.ProfileTreeNode=} groupingCallback
1713 * @return {!WebInspector.TimelineModel.ProfileTreeNode}
1714 */
1715 WebInspector.TimelineUIUtils.buildBottomUpTree = function(topDownTree, groupingC allback)
1716 {
1717 var buRoot = new WebInspector.TimelineModel.ProfileTreeNode();
1718 buRoot.totalTime = 0;
1719 buRoot.name = WebInspector.UIString("Bottom-Up Chart");
1720 /** @type {!Map<string,!WebInspector.TimelineModel.ProfileTreeNode>} */
1721 buRoot.children = new Map();
1722 processNode(topDownTree);
1723
1724 /**
1725 * @param {!WebInspector.TimelineModel.ProfileTreeNode} tdNode
1726 */
1727 function processNode(tdNode)
1728 {
1729 if (tdNode.selfTime > 0) {
1730 var buParent = groupingCallback && groupingCallback(tdNode) || buRoo t;
1731 appendNode(tdNode, buParent);
1732 }
1733 if (tdNode.children)
1734 tdNode.children.forEach(processNode);
1735 }
1736
1737 /**
1738 * @param {!WebInspector.TimelineModel.ProfileTreeNode} tdNode
1739 * @param {!WebInspector.TimelineModel.ProfileTreeNode} buParent
1740 */
1741 function appendNode(tdNode, buParent)
1742 {
1743 var time = tdNode.selfTime;
1744 buParent.totalTime += time;
1745 while (tdNode.parent) {
1746 if (!buParent.children)
1747 buParent.children = /** @type {!Map<string,!WebInspector.Timelin eModel.ProfileTreeNode>} */ (new Map());
1748 var id = tdNode.id;
1749 var buNode = buParent.children.get(id);
1750 if (!buNode) {
1751 buNode = new WebInspector.TimelineModel.ProfileTreeNode();
1752 buNode.totalTime = time;
1753 buNode.name = tdNode.name;
1754 buNode.event = tdNode.event;
1755 buNode.id = id;
1756 buParent.children.set(id, buNode);
1757 } else {
1758 buNode.totalTime += time;
1759 }
1760 tdNode = tdNode.parent;
1761 buParent = buNode;
1762 }
1763 }
1764
1765 return buRoot;
1766 }
1767
1768 /**
1769 * @constructor 1612 * @constructor
1770 * @extends {WebInspector.Object} 1613 * @extends {WebInspector.Object}
1771 * @param {string} name 1614 * @param {string} name
1772 * @param {string} title 1615 * @param {string} title
1773 * @param {boolean} visible 1616 * @param {boolean} visible
1774 * @param {string} borderColor 1617 * @param {string} borderColor
1775 * @param {string} backgroundColor 1618 * @param {string} backgroundColor
1776 * @param {string} fillColorStop0 1619 * @param {string} fillColorStop0
1777 * @param {string} fillColorStop1 1620 * @param {string} fillColorStop1
1778 */ 1621 */
(...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after
2084 return; 1927 return;
2085 1928
2086 var stackTraceElement = parentElement.createChild("div", "timeline-detai ls-view-row-value timeline-details-view-row-stack-trace monospace"); 1929 var stackTraceElement = parentElement.createChild("div", "timeline-detai ls-view-row-value timeline-details-view-row-stack-trace monospace");
2087 1930
2088 var callFrameElem = WebInspector.DOMPresentationUtils.buildStackTracePre viewContents(this._target, this._linkifier, stackTrace); 1931 var callFrameElem = WebInspector.DOMPresentationUtils.buildStackTracePre viewContents(this._target, this._linkifier, stackTrace);
2089 1932
2090 stackTraceElement.appendChild(callFrameElem); 1933 stackTraceElement.appendChild(callFrameElem);
2091 } 1934 }
2092 1935
2093 } 1936 }
OLDNEW
« no previous file with comments | « Source/devtools/front_end/timeline/TimelineTreeView.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698