1926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)/* 2926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * Copyright (C) 2012 Google Inc. All rights reserved. 3926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * 4926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * Redistribution and use in source and binary forms, with or without 5926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * modification, are permitted provided that the following conditions are 6926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * met: 7926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * 8926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * * Redistributions of source code must retain the above copyright 9926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * notice, this list of conditions and the following disclaimer. 10926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * * Redistributions in binary form must reproduce the above 11926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer 12926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * in the documentation and/or other materials provided with the 13926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * distribution. 14926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * * Neither the name of Google Inc. nor the names of its 15926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * contributors may be used to endorse or promote products derived from 16926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * this software without specific prior written permission. 17926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * 18926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 30926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 31926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)/** 32926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @constructor 33f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) * @extends {WebInspector.HeapSnapshot} 34f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) * @param {!Object} profile 35a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.HeapSnapshotProgress} progress 3607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch * @param {boolean} showHiddenData 37926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 3807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben MurdochWebInspector.JSHeapSnapshot = function(profile, progress, showHiddenData) 39926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 40926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._nodeFlags = { // bit flags 41926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) canBeQueried: 1, 42926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) detachedDOMTreeNode: 2, 43926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) pageObject: 4, // The idea is to track separately the objects owned by the page and the objects owned by debugger. 44926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 45197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch visitedMarkerMask: 0x0ffff, 46197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch visitedMarker: 0x10000 47926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }; 489bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) this._lazyStringCache = { }; 49197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch this._showHiddenData = showHiddenData; 50197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch WebInspector.HeapSnapshot.call(this, profile, progress); 51926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 52926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 53926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebInspector.JSHeapSnapshot.prototype = { 5409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 5509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @param {number} nodeIndex 5609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @return {!WebInspector.JSHeapSnapshotNode} 5709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 58926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) createNode: function(nodeIndex) 59926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 60926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return new WebInspector.JSHeapSnapshotNode(this, nodeIndex); 61926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 62926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 6309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 6407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch * @override 6509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @param {number} edgeIndex 6609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @return {!WebInspector.JSHeapSnapshotEdge} 6709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 6807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch createEdge: function(edgeIndex) 69926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 7007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch return new WebInspector.JSHeapSnapshotEdge(this, edgeIndex); 71926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 72926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 7309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 7407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch * @override 7509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @param {number} retainerIndex 7609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @return {!WebInspector.JSHeapSnapshotRetainerEdge} 7709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 7807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch createRetainingEdge: function(retainerIndex) 79926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 8007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch return new WebInspector.JSHeapSnapshotRetainerEdge(this, retainerIndex); 81926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 82926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 8309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 8407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch * @override 8507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch * @return {?function(!WebInspector.JSHeapSnapshotNode):boolean} 8609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 87926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) classNodesFilter: function() 88926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 89197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var mapAndFlag = this.userObjectsMapAndFlag(); 90197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (!mapAndFlag) 91197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return null; 92197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var map = mapAndFlag.map; 93197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var flag = mapAndFlag.flag; 9407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch /** 9507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch * @param {!WebInspector.JSHeapSnapshotNode} node 9607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch * @return {boolean} 9707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch */ 98926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) function filter(node) 99926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 100197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return !!(map[node.ordinal()] & flag); 101926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 102197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return filter; 103926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 104926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 10509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 10609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @return {function(!WebInspector.HeapSnapshotEdge):boolean} 10709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 10807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch containmentEdgesFilter: function() 109926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 11007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch var showHiddenData = this._showHiddenData; 111197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch function filter(edge) 112197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch { 113926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (edge.isInvisible()) 114926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return false; 115926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (showHiddenData) 116926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return true; 117926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return !edge.isHidden() && !edge.node().isHidden(); 118926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 119926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return filter; 120926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 121926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 12209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 12309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @return {function(!WebInspector.HeapSnapshotEdge):boolean} 12409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 12507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch retainingEdgesFilter: function() 126926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 12707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch var containmentEdgesFilter = this.containmentEdgesFilter(); 1287757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch function filter(edge) 1297757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch { 1307757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch return containmentEdgesFilter(edge) && !edge.node().isRoot() && !edge.isWeak(); 131926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 132926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return filter; 133926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 134926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 135926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) _calculateFlags: function() 136926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 137926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._flags = new Uint32Array(this.nodeCount); 138926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._markDetachedDOMTreeNodes(); 139926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._markQueriableHeapObjects(); 140926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._markPageOwnedNodes(); 141926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 142926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 1437242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci calculateDistances: function() 1447242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci { 1457242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci /** 1467242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @param {!WebInspector.HeapSnapshotNode} node 1477242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @param {!WebInspector.HeapSnapshotEdge} edge 1487242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @return {boolean} 1497242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci */ 1507242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci function filter(node, edge) 1517242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci { 1527242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (node.isHidden()) 1537242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return edge.name() !== "sloppy_function_map" || node.rawName() !== "system / NativeContext"; 1547242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (node.isArray()) { 1557242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // DescriptorArrays are fixed arrays used to hold instance descriptors. 1567242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // The format of the these objects is: 1577242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // [0]: Number of descriptors 1587242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // [1]: Either Smi(0) if uninitialized, or a pointer to small fixed array: 1597242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // [0]: pointer to fixed array with enum cache 1607242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // [1]: either Smi(0) or pointer to fixed array with indices 1617242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // [i*3+2]: i-th key 1627242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // [i*3+3]: i-th type 1637242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // [i*3+4]: i-th descriptor 1647242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // As long as maps may share descriptor arrays some of the descriptor 1657242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // links may not be valid for all the maps. We just skip 1667242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // all the descriptor links when calculating distances. 1677242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // For more details see http://crbug.com/413608 1687242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (node.rawName() !== "(map descriptors)") 1697242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return true; 1707242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci var index = edge.name(); 1717242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return index < 2 || (index % 3) !== 1; 1727242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci } 1737242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return true; 1747242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci } 1757242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci WebInspector.HeapSnapshot.prototype.calculateDistances.call(this, filter); 1767242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci }, 1777242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 178e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch /** 179e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * @param {!WebInspector.HeapSnapshotNode} node 180e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * @return {!boolean} 181e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch */ 182e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch _isUserRoot: function(node) 183926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 184e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch return node.isUserRoot() || node.isDocumentDOMTreesRoot(); 185926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 186926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 18783750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch /** 18883750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch * @param {function(!WebInspector.HeapSnapshotNode)} action 18983750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch * @param {boolean=} userRootsOnly 19083750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch */ 19183750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch forEachRoot: function(action, userRootsOnly) 19283750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch { 19383750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch /** 19483750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch * @param {!WebInspector.HeapSnapshotNode} node 1955d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @param {string} name 196a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @return {?WebInspector.HeapSnapshotNode} 19783750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch */ 19883750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch function getChildNodeByName(node, name) 19983750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch { 20083750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch for (var iter = node.edges(); iter.hasNext(); iter.next()) { 20183750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch var child = iter.edge.node(); 20283750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch if (child.name() === name) 20383750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch return child; 20483750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch } 20583750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch return null; 20683750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch } 20783750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch 20883750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch var visitedNodes = {}; 20983750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch /** 21083750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch * @param {!WebInspector.HeapSnapshotNode} node 21183750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch */ 21283750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch function doAction(node) 21383750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch { 214197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var ordinal = node.ordinal(); 21583750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch if (!visitedNodes[ordinal]) { 21683750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch action(node); 21783750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch visitedNodes[ordinal] = true; 21883750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch } 21983750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch } 22083750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch 22183750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch var gcRoots = getChildNodeByName(this.rootNode(), "(GC roots)"); 22283750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch if (!gcRoots) 22383750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch return; 22483750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch 22583750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch if (userRootsOnly) { 22683750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch for (var iter = this.rootNode().edges(); iter.hasNext(); iter.next()) { 22783750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch var node = iter.edge.node(); 22807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch if (this._isUserRoot(node)) 22983750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch doAction(node); 23083750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch } 23183750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch } else { 23283750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch for (var iter = gcRoots.edges(); iter.hasNext(); iter.next()) { 23383750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch var subRoot = iter.edge.node(); 23483750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch for (var iter2 = subRoot.edges(); iter2.hasNext(); iter2.next()) 23583750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch doAction(iter2.edge.node()); 23683750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch doAction(subRoot); 23783750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch } 23883750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch for (var iter = this.rootNode().edges(); iter.hasNext(); iter.next()) 23983750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch doAction(iter.edge.node()) 24083750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch } 24183750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch }, 24283750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch 24309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 24407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch * @return {?{map: !Uint32Array, flag: number}} 24509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 246926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) userObjectsMapAndFlag: function() 247926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 24807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch return this._showHiddenData ? null : { 249926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) map: this._flags, 250926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) flag: this._nodeFlags.pageObject 251926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }; 252926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 253926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 254926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) _flagsOfNode: function(node) 255926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 256926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return this._flags[node.nodeIndex / this._nodeFieldCount]; 257926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 258926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 259926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) _markDetachedDOMTreeNodes: function() 260926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 261926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var flag = this._nodeFlags.detachedDOMTreeNode; 262926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var detachedDOMTreesRoot; 263926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) for (var iter = this.rootNode().edges(); iter.hasNext(); iter.next()) { 264926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var node = iter.edge.node(); 265926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (node.name() === "(Detached DOM trees)") { 266926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) detachedDOMTreesRoot = node; 267926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) break; 268926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 269926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 270926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 271926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (!detachedDOMTreesRoot) 272926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return; 273926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 274926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var detachedDOMTreeRE = /^Detached DOM tree/; 275926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) for (var iter = detachedDOMTreesRoot.edges(); iter.hasNext(); iter.next()) { 276926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var node = iter.edge.node(); 277926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (detachedDOMTreeRE.test(node.className())) { 278926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) for (var edgesIter = node.edges(); edgesIter.hasNext(); edgesIter.next()) 279926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._flags[edgesIter.edge.node().nodeIndex / this._nodeFieldCount] |= flag; 280926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 281926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 282926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 283926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 284926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) _markQueriableHeapObjects: function() 285926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 286926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) // Allow runtime properties query for objects accessible from Window objects 287926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) // via regular properties, and for DOM wrappers. Trying to access random objects 288926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) // can cause a crash due to insonsistent state of internal properties of wrappers. 289926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var flag = this._nodeFlags.canBeQueried; 290926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var hiddenEdgeType = this._edgeHiddenType; 291926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var internalEdgeType = this._edgeInternalType; 292926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var invisibleEdgeType = this._edgeInvisibleType; 293926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var weakEdgeType = this._edgeWeakType; 294926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var edgeToNodeOffset = this._edgeToNodeOffset; 295926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var edgeTypeOffset = this._edgeTypeOffset; 296926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var edgeFieldsCount = this._edgeFieldsCount; 297197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var containmentEdges = this.containmentEdges; 298197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var nodes = this.nodes; 299926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var nodeCount = this.nodeCount; 300926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var nodeFieldCount = this._nodeFieldCount; 301926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var firstEdgeIndexes = this._firstEdgeIndexes; 302926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 303926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var flags = this._flags; 304926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var list = []; 305926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 306926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) for (var iter = this.rootNode().edges(); iter.hasNext(); iter.next()) { 307591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (iter.edge.node().isUserRoot()) 308926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) list.push(iter.edge.node().nodeIndex / nodeFieldCount); 309926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 310926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 311926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) while (list.length) { 312926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var nodeOrdinal = list.pop(); 313926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (flags[nodeOrdinal] & flag) 314926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) continue; 315926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) flags[nodeOrdinal] |= flag; 316926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var beginEdgeIndex = firstEdgeIndexes[nodeOrdinal]; 317926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var endEdgeIndex = firstEdgeIndexes[nodeOrdinal + 1]; 318926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) for (var edgeIndex = beginEdgeIndex; edgeIndex < endEdgeIndex; edgeIndex += edgeFieldsCount) { 319926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var childNodeIndex = containmentEdges[edgeIndex + edgeToNodeOffset]; 320926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var childNodeOrdinal = childNodeIndex / nodeFieldCount; 321926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (flags[childNodeOrdinal] & flag) 322926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) continue; 323926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var type = containmentEdges[edgeIndex + edgeTypeOffset]; 324926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (type === hiddenEdgeType || type === invisibleEdgeType || type === internalEdgeType || type === weakEdgeType) 325926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) continue; 326926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) list.push(childNodeOrdinal); 327926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 328926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 329926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 330926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 331926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) _markPageOwnedNodes: function() 332926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 333926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var edgeShortcutType = this._edgeShortcutType; 334926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var edgeElementType = this._edgeElementType; 335926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var edgeToNodeOffset = this._edgeToNodeOffset; 336926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var edgeTypeOffset = this._edgeTypeOffset; 337926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var edgeFieldsCount = this._edgeFieldsCount; 338926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var edgeWeakType = this._edgeWeakType; 339926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var firstEdgeIndexes = this._firstEdgeIndexes; 340197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var containmentEdges = this.containmentEdges; 341926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var containmentEdgesLength = containmentEdges.length; 342197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var nodes = this.nodes; 343926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var nodeFieldCount = this._nodeFieldCount; 344926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var nodesCount = this.nodeCount; 345926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 346926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var flags = this._flags; 347926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var flag = this._nodeFlags.pageObject; 348926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var visitedMarker = this._nodeFlags.visitedMarker; 349926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var visitedMarkerMask = this._nodeFlags.visitedMarkerMask; 350926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var markerAndFlag = visitedMarker | flag; 351926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 352926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var nodesToVisit = new Uint32Array(nodesCount); 353926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var nodesToVisitLength = 0; 354926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 355926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var rootNodeOrdinal = this._rootNodeIndex / nodeFieldCount; 356926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var node = this.rootNode(); 357926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) for (var edgeIndex = firstEdgeIndexes[rootNodeOrdinal], endEdgeIndex = firstEdgeIndexes[rootNodeOrdinal + 1]; 358926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) edgeIndex < endEdgeIndex; 359926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) edgeIndex += edgeFieldsCount) { 360926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var edgeType = containmentEdges[edgeIndex + edgeTypeOffset]; 361926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var nodeIndex = containmentEdges[edgeIndex + edgeToNodeOffset]; 362926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (edgeType === edgeElementType) { 363926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) node.nodeIndex = nodeIndex; 364926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (!node.isDocumentDOMTreesRoot()) 365926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) continue; 366926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } else if (edgeType !== edgeShortcutType) 367926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) continue; 368926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var nodeOrdinal = nodeIndex / nodeFieldCount; 369926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) nodesToVisit[nodesToVisitLength++] = nodeOrdinal; 370926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) flags[nodeOrdinal] |= visitedMarker; 371926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 372926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 373926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) while (nodesToVisitLength) { 374926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var nodeOrdinal = nodesToVisit[--nodesToVisitLength]; 375926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) flags[nodeOrdinal] |= flag; 376926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) flags[nodeOrdinal] &= visitedMarkerMask; 377926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var beginEdgeIndex = firstEdgeIndexes[nodeOrdinal]; 378926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var endEdgeIndex = firstEdgeIndexes[nodeOrdinal + 1]; 379926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) for (var edgeIndex = beginEdgeIndex; edgeIndex < endEdgeIndex; edgeIndex += edgeFieldsCount) { 380926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var childNodeIndex = containmentEdges[edgeIndex + edgeToNodeOffset]; 381926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var childNodeOrdinal = childNodeIndex / nodeFieldCount; 382926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (flags[childNodeOrdinal] & markerAndFlag) 383926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) continue; 384926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var type = containmentEdges[edgeIndex + edgeTypeOffset]; 385926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (type === edgeWeakType) 386926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) continue; 387926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) nodesToVisit[nodesToVisitLength++] = childNodeOrdinal; 388926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) flags[childNodeOrdinal] |= visitedMarker; 389926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 390926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 391926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 392926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 393d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) _calculateStatistics: function() 394d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) { 395d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) var nodeFieldCount = this._nodeFieldCount; 396197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var nodes = this.nodes; 397d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) var nodesLength = nodes.length; 398d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) var nodeTypeOffset = this._nodeTypeOffset; 399d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) var nodeSizeOffset = this._nodeSelfSizeOffset;; 400d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) var nodeNativeType = this._nodeNativeType; 401d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) var nodeCodeType = this._nodeCodeType; 402d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) var nodeConsStringType = this._nodeConsStringType; 403d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) var nodeSlicedStringType = this._nodeSlicedStringType; 404d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) var sizeNative = 0; 405d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) var sizeCode = 0; 406d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) var sizeStrings = 0; 407d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) var sizeJSArrays = 0; 408d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) var node = this.rootNode(); 409d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) for (var nodeIndex = 0; nodeIndex < nodesLength; nodeIndex += nodeFieldCount) { 410d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) node.nodeIndex = nodeIndex; 411d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) var nodeType = nodes[nodeIndex + nodeTypeOffset]; 412d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) var nodeSize = nodes[nodeIndex + nodeSizeOffset]; 413d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (nodeType === nodeNativeType) 414d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) sizeNative += nodeSize; 415d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) else if (nodeType === nodeCodeType) 416d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) sizeCode += nodeSize; 417d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) else if (nodeType === nodeConsStringType || nodeType === nodeSlicedStringType || node.type() === "string") 418d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) sizeStrings += nodeSize; 419d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) else if (node.name() === "Array") 420d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) sizeJSArrays += this._calculateArraySize(node); 421d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) } 422d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._statistics = new WebInspector.HeapSnapshotCommon.Statistics(); 423d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._statistics.total = this.totalSize; 424d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._statistics.v8heap = this.totalSize - sizeNative; 425d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._statistics.native = sizeNative; 426d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._statistics.code = sizeCode; 427d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._statistics.jsArrays = sizeJSArrays; 428d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._statistics.strings = sizeStrings; 429d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) }, 430d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 431d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) /** 432d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @param {!WebInspector.HeapSnapshotNode} node 433d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @return {number} 434d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) */ 435d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) _calculateArraySize: function(node) 436d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) { 437d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) var size = node.selfSize(); 438197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var beginEdgeIndex = node.edgeIndexesStart(); 439197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var endEdgeIndex = node.edgeIndexesEnd(); 440197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var containmentEdges = this.containmentEdges; 441197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var strings = this.strings; 442d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) var edgeToNodeOffset = this._edgeToNodeOffset; 443d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) var edgeTypeOffset = this._edgeTypeOffset; 444d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) var edgeNameOffset = this._edgeNameOffset; 445d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) var edgeFieldsCount = this._edgeFieldsCount; 446d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) var edgeInternalType = this._edgeInternalType; 447d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) for (var edgeIndex = beginEdgeIndex; edgeIndex < endEdgeIndex; edgeIndex += edgeFieldsCount) { 448d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) var edgeType = containmentEdges[edgeIndex + edgeTypeOffset]; 449d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (edgeType !== edgeInternalType) 450d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) continue; 451d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) var edgeName = strings[containmentEdges[edgeIndex + edgeNameOffset]]; 452d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (edgeName !== "elements") 453d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) continue; 454d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) var elementsNodeIndex = containmentEdges[edgeIndex + edgeToNodeOffset]; 455d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) node.nodeIndex = elementsNodeIndex; 456d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (node.retainersCount() === 1) 457d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) size += node.selfSize(); 458d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) break; 459d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) } 460d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return size; 461d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) }, 462d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 463d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) /** 464d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @return {!WebInspector.HeapSnapshotCommon.Statistics} 465d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) */ 466d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) getStatistics: function() 467d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) { 468d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return this._statistics; 469d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) }, 470d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 471926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) __proto__: WebInspector.HeapSnapshot.prototype 472926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}; 473926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 474926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)/** 475926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @constructor 476926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @extends {WebInspector.HeapSnapshotNode} 477a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.JSHeapSnapshot} snapshot 478926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {number=} nodeIndex 479926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 480926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebInspector.JSHeapSnapshotNode = function(snapshot, nodeIndex) 481926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 482926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) WebInspector.HeapSnapshotNode.call(this, snapshot, nodeIndex) 483926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 484926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 485926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebInspector.JSHeapSnapshotNode.prototype = { 48609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 48709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @return {boolean} 48809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 489926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) canBeQueried: function() 490926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 491926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var flags = this._snapshot._flagsOfNode(this); 492926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return !!(flags & this._snapshot._nodeFlags.canBeQueried); 493926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 494926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 49509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 49609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @return {string} 49709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 4987242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci rawName: WebInspector.HeapSnapshotNode.prototype.name, 4997242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 5007242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci /** 5017242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @return {string} 5027242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci */ 503197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch name: function() 504197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch { 5059bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) var snapshot = this._snapshot; 5069bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) if (this._type() === snapshot._nodeConsStringType) { 5079bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) var string = snapshot._lazyStringCache[this.nodeIndex]; 5089bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) if (typeof string === "undefined") { 5099bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) string = this._consStringName(); 5109bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) snapshot._lazyStringCache[this.nodeIndex] = string; 5119bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) } 5129bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) return string; 5139bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) } 5147242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return this.rawName(); 5159bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) }, 5169bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) 5177242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci /** 5187242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @return {string} 5197242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci */ 5209bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) _consStringName: function() 5219bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) { 5229bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) var snapshot = this._snapshot; 5239bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) var consStringType = snapshot._nodeConsStringType; 5249bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) var edgeInternalType = snapshot._edgeInternalType; 5259bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) var edgeFieldsCount = snapshot._edgeFieldsCount; 5269bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) var edgeToNodeOffset = snapshot._edgeToNodeOffset; 5279bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) var edgeTypeOffset = snapshot._edgeTypeOffset; 5289bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) var edgeNameOffset = snapshot._edgeNameOffset; 529197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var strings = snapshot.strings; 530197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var edges = snapshot.containmentEdges; 5319bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) var firstEdgeIndexes = snapshot._firstEdgeIndexes; 5329bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) var nodeFieldCount = snapshot._nodeFieldCount; 5339bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) var nodeTypeOffset = snapshot._nodeTypeOffset; 5349bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) var nodeNameOffset = snapshot._nodeNameOffset; 535197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var nodes = snapshot.nodes; 5369bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) var nodesStack = []; 5379bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) nodesStack.push(this.nodeIndex); 5389bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) var name = ""; 5399bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) 5409bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) while (nodesStack.length && name.length < 1024) { 5419bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) var nodeIndex = nodesStack.pop(); 5429bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) if (nodes[nodeIndex + nodeTypeOffset] !== consStringType) { 5439bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) name += strings[nodes[nodeIndex + nodeNameOffset]]; 5449bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) continue; 5459bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) } 5469bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) var nodeOrdinal = nodeIndex / nodeFieldCount; 5479bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) var beginEdgeIndex = firstEdgeIndexes[nodeOrdinal]; 5489bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) var endEdgeIndex = firstEdgeIndexes[nodeOrdinal + 1]; 5499bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) var firstNodeIndex = 0; 5509bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) var secondNodeIndex = 0; 5519bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) for (var edgeIndex = beginEdgeIndex; edgeIndex < endEdgeIndex && (!firstNodeIndex || !secondNodeIndex); edgeIndex += edgeFieldsCount) { 5529bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) var edgeType = edges[edgeIndex + edgeTypeOffset]; 5539bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) if (edgeType === edgeInternalType) { 5549bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) var edgeName = strings[edges[edgeIndex + edgeNameOffset]]; 5559bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) if (edgeName === "first") 5569bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) firstNodeIndex = edges[edgeIndex + edgeToNodeOffset]; 5579bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) else if (edgeName === "second") 5589bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) secondNodeIndex = edges[edgeIndex + edgeToNodeOffset]; 5599bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) } 5609bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) } 5619bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) nodesStack.push(secondNodeIndex); 5629bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) nodesStack.push(firstNodeIndex); 5639bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) } 5649bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) return name; 5659bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) }, 5669bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) 56709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 56809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @return {string} 56909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 570926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) className: function() 571926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 572926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var type = this.type(); 573926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) switch (type) { 574926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case "hidden": 575926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return "(system)"; 576926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case "object": 577926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case "native": 578926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return this.name(); 579926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case "code": 580926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return "(compiled code)"; 581926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) default: 582926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return "(" + type + ")"; 583926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 584926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 585926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 58609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 58709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @return {number} 58809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 589926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) classIndex: function() 590926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 591926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var snapshot = this._snapshot; 592197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var nodes = snapshot.nodes; 593926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var type = nodes[this.nodeIndex + snapshot._nodeTypeOffset];; 594926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (type === snapshot._nodeObjectType || type === snapshot._nodeNativeType) 595926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return nodes[this.nodeIndex + snapshot._nodeNameOffset]; 596926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return -1 - type; 597926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 598926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 59909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 600a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch * @return {number} 60109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 602926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) id: function() 603926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 604926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var snapshot = this._snapshot; 605197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return snapshot.nodes[this.nodeIndex + snapshot._nodeIdOffset]; 606926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 607926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 60809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 60909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @return {boolean} 61009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 611926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) isHidden: function() 612926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 613926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return this._type() === this._snapshot._nodeHiddenType; 614926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 615926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 61609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 61709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @return {boolean} 61809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 6197242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci isArray: function() 6207242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci { 6217242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return this._type() === this._snapshot._nodeArrayType; 6227242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci }, 6237242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 6247242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci /** 6257242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @return {boolean} 6267242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci */ 627926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) isSynthetic: function() 628926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 629926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return this._type() === this._snapshot._nodeSyntheticType; 630926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 631926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 632e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch /** 633e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * @return {!boolean} 634e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch */ 635591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch isUserRoot: function() 636926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 63783750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch return !this.isSynthetic(); 638926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 639926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 640e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch /** 641e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * @return {!boolean} 642e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch */ 643926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) isDocumentDOMTreesRoot: function() 644926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 645926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return this.isSynthetic() && this.name() === "(Document DOM trees)"; 646926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 647926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 64809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 649a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch * @return {!WebInspector.HeapSnapshotCommon.Node} 65009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 651926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) serialize: function() 652926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 653926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var result = WebInspector.HeapSnapshotNode.prototype.serialize.call(this); 654926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var flags = this._snapshot._flagsOfNode(this); 655926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (flags & this._snapshot._nodeFlags.canBeQueried) 656926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) result.canBeQueried = true; 657926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (flags & this._snapshot._nodeFlags.detachedDOMTreeNode) 658926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) result.detachedDOMTreeNode = true; 659926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return result; 660926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 661926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 662926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) __proto__: WebInspector.HeapSnapshotNode.prototype 663926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}; 664926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 665926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)/** 666926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @constructor 667926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @extends {WebInspector.HeapSnapshotEdge} 668a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.JSHeapSnapshot} snapshot 669926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {number=} edgeIndex 670926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 67107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben MurdochWebInspector.JSHeapSnapshotEdge = function(snapshot, edgeIndex) 672926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 67307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch WebInspector.HeapSnapshotEdge.call(this, snapshot, edgeIndex); 674926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 675926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 676926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebInspector.JSHeapSnapshotEdge.prototype = { 67709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 67809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @return {!WebInspector.JSHeapSnapshotEdge} 67909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 680926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) clone: function() 681926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 68207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch var snapshot = /** @type {!WebInspector.JSHeapSnapshot} */ (this._snapshot); 68307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch return new WebInspector.JSHeapSnapshotEdge(snapshot, this.edgeIndex); 684926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 685926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 68609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 68709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @return {boolean} 68809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 689926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) hasStringName: function() 690926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 691926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (!this.isShortcut()) 692926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return this._hasStringName(); 693926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return isNaN(parseInt(this._name(), 10)); 694926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 695926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 69609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 69709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @return {boolean} 69809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 699926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) isElement: function() 700926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 701926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return this._type() === this._snapshot._edgeElementType; 702926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 703926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 70409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 70509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @return {boolean} 70609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 707926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) isHidden: function() 708926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 709926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return this._type() === this._snapshot._edgeHiddenType; 710926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 711926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 71209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 71309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @return {boolean} 71409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 715926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) isWeak: function() 716926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 717926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return this._type() === this._snapshot._edgeWeakType; 718926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 719926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 72009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 72109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @return {boolean} 72209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 723926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) isInternal: function() 724926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 725926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return this._type() === this._snapshot._edgeInternalType; 726926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 727926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 72809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 72909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @return {boolean} 73009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 731926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) isInvisible: function() 732926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 733926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return this._type() === this._snapshot._edgeInvisibleType; 734926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 735926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 73609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 73709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @return {boolean} 73809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 739926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) isShortcut: function() 740926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 741926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return this._type() === this._snapshot._edgeShortcutType; 742926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 743926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 74409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 7457242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @return {string|number} 74609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 747926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) name: function() 748926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 749926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (!this.isShortcut()) 750926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return this._name(); 751926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var numName = parseInt(this._name(), 10); 752926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return isNaN(numName) ? this._name() : numName; 753926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 754926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 75509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 75609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @return {string} 75709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 758926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) toString: function() 759926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 760926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var name = this.name(); 761926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) switch (this.type()) { 762926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case "context": return "->" + name; 763926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case "element": return "[" + name + "]"; 764926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case "weak": return "[[" + name + "]]"; 765926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case "property": 766926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return name.indexOf(" ") === -1 ? "." + name : "[\"" + name + "\"]"; 767926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case "shortcut": 768926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (typeof name === "string") 769926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return name.indexOf(" ") === -1 ? "." + name : "[\"" + name + "\"]"; 770926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) else 771926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return "[" + name + "]"; 772926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case "internal": 773926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case "hidden": 774926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case "invisible": 775926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return "{" + name + "}"; 776926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }; 777926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return "?" + name + "?"; 778926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 779926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 7807242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci /** 7817242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @return {boolean} 7827242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci */ 783926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) _hasStringName: function() 784926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 7857242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci var type = this._type(); 7867242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci var snapshot = this._snapshot; 7877242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return type !== snapshot._edgeElementType && type !== snapshot._edgeHiddenType; 788926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 789926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 7907242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci /** 7917242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @return {string|number} 7927242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci */ 793926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) _name: function() 794926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 795197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return this._hasStringName() ? this._snapshot.strings[this._nameOrIndex()] : this._nameOrIndex(); 796926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 797926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 7987242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci /** 7997242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @return {number} 8007242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci */ 801926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) _nameOrIndex: function() 802926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 80307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch return this._edges[this.edgeIndex + this._snapshot._edgeNameOffset]; 804926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 805926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 8067242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci /** 8077242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @return {number} 8087242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci */ 809926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) _type: function() 810926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 81107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch return this._edges[this.edgeIndex + this._snapshot._edgeTypeOffset]; 812926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 813926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 814926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) __proto__: WebInspector.HeapSnapshotEdge.prototype 815926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}; 816926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 817926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 818926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)/** 819926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @constructor 820926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @extends {WebInspector.HeapSnapshotRetainerEdge} 821a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.JSHeapSnapshot} snapshot 82207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch * @param {number} retainerIndex 823926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 82407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben MurdochWebInspector.JSHeapSnapshotRetainerEdge = function(snapshot, retainerIndex) 825926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 82607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch WebInspector.HeapSnapshotRetainerEdge.call(this, snapshot, retainerIndex); 827926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 828926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 829926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebInspector.JSHeapSnapshotRetainerEdge.prototype = { 83009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 83109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @return {!WebInspector.JSHeapSnapshotRetainerEdge} 83209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 833926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) clone: function() 834926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 83507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch var snapshot = /** @type {!WebInspector.JSHeapSnapshot} */ (this._snapshot); 83607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch return new WebInspector.JSHeapSnapshotRetainerEdge(snapshot, this.retainerIndex()); 837926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 838926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 83909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 84009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @return {boolean} 84109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 842926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) isHidden: function() 843926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 844926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return this._edge().isHidden(); 845926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 846926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 84709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 84809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @return {boolean} 84909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 850926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) isInternal: function() 851926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 852926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return this._edge().isInternal(); 853926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 854926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 85509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 85609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @return {boolean} 85709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 858926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) isInvisible: function() 859926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 860926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return this._edge().isInvisible(); 861926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 862926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 86309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 86409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @return {boolean} 86509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 866926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) isShortcut: function() 867926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 868926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return this._edge().isShortcut(); 869926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 870926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 87109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 87209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @return {boolean} 87309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 874926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) isWeak: function() 875926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 876926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return this._edge().isWeak(); 877926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 878926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 879926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) __proto__: WebInspector.HeapSnapshotRetainerEdge.prototype 880926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 881926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 882