| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2011 Google Inc. All rights reserved. | 2 * Copyright (C) 2011 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 12 matching lines...) Expand all Loading... |
| 23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | 23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
| 24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | 24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 29 */ | 29 */ |
| 30 | 30 |
| 31 /** | 31 /** |
| 32 * @constructor | 32 * @constructor |
| 33 * @param {!Uint32Array} array | 33 * @param {!WebInspector.HeapSnapshot} snapshot |
| 34 * @param {number} start | 34 * @param {!Uint32Array} edges |
| 35 * @param {number} end | |
| 36 */ | |
| 37 WebInspector.HeapSnapshotArraySlice = function(array, start, end) | |
| 38 { | |
| 39 this._array = array; | |
| 40 this._start = start; | |
| 41 this.length = end - start; | |
| 42 } | |
| 43 | |
| 44 WebInspector.HeapSnapshotArraySlice.prototype = { | |
| 45 /** | |
| 46 * @param {number} index | |
| 47 * @return {number} | |
| 48 */ | |
| 49 item: function(index) | |
| 50 { | |
| 51 return this._array[this._start + index]; | |
| 52 }, | |
| 53 | |
| 54 /** | |
| 55 * @param {number} start | |
| 56 * @param {number=} end | |
| 57 * @return {!Uint32Array} | |
| 58 */ | |
| 59 slice: function(start, end) | |
| 60 { | |
| 61 if (typeof end === "undefined") | |
| 62 end = this.length; | |
| 63 return this._array.subarray(this._start + start, this._start + end); | |
| 64 } | |
| 65 } | |
| 66 | |
| 67 /** | |
| 68 * @constructor | |
| 69 * @param {number=} edgeIndex | 35 * @param {number=} edgeIndex |
| 70 */ | 36 */ |
| 71 WebInspector.HeapSnapshotEdge = function(snapshot, edges, edgeIndex) | 37 WebInspector.HeapSnapshotEdge = function(snapshot, edges, edgeIndex) |
| 72 { | 38 { |
| 73 this._snapshot = snapshot; | 39 this._snapshot = snapshot; |
| 74 this._edges = edges; | 40 this._edges = edges; |
| 75 this.edgeIndex = edgeIndex || 0; | 41 this.edgeIndex = edgeIndex || 0; |
| 76 } | 42 } |
| 77 | 43 |
| 78 /** | 44 /** |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 122 node: function() | 88 node: function() |
| 123 { | 89 { |
| 124 return this._snapshot.createNode(this.nodeIndex()); | 90 return this._snapshot.createNode(this.nodeIndex()); |
| 125 }, | 91 }, |
| 126 | 92 |
| 127 /** | 93 /** |
| 128 * @return {number} | 94 * @return {number} |
| 129 */ | 95 */ |
| 130 nodeIndex: function() | 96 nodeIndex: function() |
| 131 { | 97 { |
| 132 return this._edges.item(this.edgeIndex + this._snapshot._edgeToNodeOffse
t); | 98 return this._edges[this.edgeIndex + this._snapshot._edgeToNodeOffset]; |
| 133 }, | 99 }, |
| 134 | 100 |
| 135 /** | 101 /** |
| 136 * @return {!Array.<number>} | |
| 137 */ | |
| 138 rawEdges: function() | |
| 139 { | |
| 140 return this._edges; | |
| 141 }, | |
| 142 | |
| 143 /** | |
| 144 * @return {string} | 102 * @return {string} |
| 145 */ | 103 */ |
| 146 toString: function() | 104 toString: function() |
| 147 { | 105 { |
| 148 return "HeapSnapshotEdge: " + this.name(); | 106 return "HeapSnapshotEdge: " + this.name(); |
| 149 }, | 107 }, |
| 150 | 108 |
| 151 /** | 109 /** |
| 152 * @return {string} | 110 * @return {string} |
| 153 */ | 111 */ |
| 154 type: function() | 112 type: function() |
| 155 { | 113 { |
| 156 return this._snapshot._edgeTypes[this._type()]; | 114 return this._snapshot._edgeTypes[this._type()]; |
| 157 }, | 115 }, |
| 158 | 116 |
| 159 /** | 117 /** |
| 160 * @return {!WebInspector.HeapSnapshotEdge.Serialized} | 118 * @return {!WebInspector.HeapSnapshotEdge.Serialized} |
| 161 */ | 119 */ |
| 162 serialize: function() | 120 serialize: function() |
| 163 { | 121 { |
| 164 var node = this.node(); | 122 var node = this.node(); |
| 165 return new WebInspector.HeapSnapshotEdge.Serialized(this.name(), node.se
rialize(), this.nodeIndex(), this.type(), node.distance()); | 123 return new WebInspector.HeapSnapshotEdge.Serialized(this.name(), node.se
rialize(), this.nodeIndex(), this.type(), node.distance()); |
| 166 }, | 124 }, |
| 167 | 125 |
| 168 _type: function() | 126 _type: function() |
| 169 { | 127 { |
| 170 return this._edges.item(this.edgeIndex + this._snapshot._edgeTypeOffset)
; | 128 return this._edges[this.edgeIndex + this._snapshot._edgeTypeOffset]; |
| 171 } | 129 } |
| 172 }; | 130 }; |
| 173 | 131 |
| 174 /** | 132 /** |
| 175 * @constructor | 133 * @constructor |
| 176 */ | 134 */ |
| 177 WebInspector.HeapSnapshotEdgeIterator = function(edge) | 135 WebInspector.HeapSnapshotEdgeIterator = function(edge) |
| 178 { | 136 { |
| 179 this.edge = edge; | 137 this.edge = edge; |
| 180 } | 138 } |
| (...skipping 335 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 516 | 474 |
| 517 /** | 475 /** |
| 518 * @return {string} | 476 * @return {string} |
| 519 */ | 477 */ |
| 520 name: function() | 478 name: function() |
| 521 { | 479 { |
| 522 return this._snapshot._strings[this._name()]; | 480 return this._snapshot._strings[this._name()]; |
| 523 }, | 481 }, |
| 524 | 482 |
| 525 /** | 483 /** |
| 526 * @return {!WebInspector.HeapSnapshotArraySlice} | 484 * @return {!Uint32Array} |
| 527 */ | 485 */ |
| 528 rawEdges: function() | 486 rawEdges: function() |
| 529 { | 487 { |
| 530 return new WebInspector.HeapSnapshotArraySlice(this._snapshot._containme
ntEdges, this._edgeIndexesStart(), this._edgeIndexesEnd()); | 488 return this._snapshot._containmentEdges.subarray(this._edgeIndexesStart(
), this._edgeIndexesEnd()); |
| 531 }, | 489 }, |
| 532 | 490 |
| 533 /** | 491 /** |
| 534 * @return {number} | 492 * @return {number} |
| 535 */ | 493 */ |
| 536 retainedSize: function() | 494 retainedSize: function() |
| 537 { | 495 { |
| 538 return this._snapshot._retainedSizes[this._ordinal()]; | 496 return this._snapshot._retainedSizes[this._ordinal()]; |
| 539 }, | 497 }, |
| 540 | 498 |
| (...skipping 450 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 991 return this.rootNode().retainedSize(); | 949 return this.rootNode().retainedSize(); |
| 992 }, | 950 }, |
| 993 | 951 |
| 994 _getDominatedIndex: function(nodeIndex) | 952 _getDominatedIndex: function(nodeIndex) |
| 995 { | 953 { |
| 996 if (nodeIndex % this._nodeFieldCount) | 954 if (nodeIndex % this._nodeFieldCount) |
| 997 throw new Error("Invalid nodeIndex: " + nodeIndex); | 955 throw new Error("Invalid nodeIndex: " + nodeIndex); |
| 998 return this._firstDominatedNodeIndex[nodeIndex / this._nodeFieldCount]; | 956 return this._firstDominatedNodeIndex[nodeIndex / this._nodeFieldCount]; |
| 999 }, | 957 }, |
| 1000 | 958 |
| 959 /** |
| 960 * @param {!WebInspector.HeapSnapshotNode} node |
| 961 * @return {!Uint32Array} |
| 962 */ |
| 1001 _dominatedNodesOfNode: function(node) | 963 _dominatedNodesOfNode: function(node) |
| 1002 { | 964 { |
| 1003 var dominatedIndexFrom = this._getDominatedIndex(node.nodeIndex); | 965 var dominatedIndexFrom = this._getDominatedIndex(node.nodeIndex); |
| 1004 var dominatedIndexTo = this._getDominatedIndex(node._nextNodeIndex()); | 966 var dominatedIndexTo = this._getDominatedIndex(node._nextNodeIndex()); |
| 1005 return new WebInspector.HeapSnapshotArraySlice(this._dominatedNodes, dom
inatedIndexFrom, dominatedIndexTo); | 967 return this._dominatedNodes.subarray(dominatedIndexFrom, dominatedIndexT
o); |
| 1006 }, | 968 }, |
| 1007 | 969 |
| 1008 /** | 970 /** |
| 1009 * @param {!WebInspector.HeapSnapshotCommon.NodeFilter} nodeFilter | 971 * @param {!WebInspector.HeapSnapshotCommon.NodeFilter} nodeFilter |
| 1010 * @return {!Object.<string, !WebInspector.HeapSnapshotCommon.Aggregate>} | 972 * @return {!Object.<string, !WebInspector.HeapSnapshotCommon.Aggregate>} |
| 1011 */ | 973 */ |
| 1012 aggregatesWithFilter: function(nodeFilter) | 974 aggregatesWithFilter: function(nodeFilter) |
| 1013 { | 975 { |
| 1014 var minNodeId = nodeFilter.minNodeId; | 976 var minNodeId = nodeFilter.minNodeId; |
| 1015 var maxNodeId = nodeFilter.maxNodeId; | 977 var maxNodeId = nodeFilter.maxNodeId; |
| (...skipping 907 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1923 * @return {!WebInspector.HeapSnapshotCommon.StaticData} | 1885 * @return {!WebInspector.HeapSnapshotCommon.StaticData} |
| 1924 */ | 1886 */ |
| 1925 updateStaticData: function() | 1887 updateStaticData: function() |
| 1926 { | 1888 { |
| 1927 return new WebInspector.HeapSnapshotCommon.StaticData(this.nodeCount, th
is._rootNodeIndex, this.totalSize, this._maxJsNodeId()); | 1889 return new WebInspector.HeapSnapshotCommon.StaticData(this.nodeCount, th
is._rootNodeIndex, this.totalSize, this._maxJsNodeId()); |
| 1928 } | 1890 } |
| 1929 }; | 1891 }; |
| 1930 | 1892 |
| 1931 /** | 1893 /** |
| 1932 * @constructor | 1894 * @constructor |
| 1933 * @param {!Array.<number>=} unfilteredIterationOrder | 1895 * @param {(!Array.<number>|!Uint32Array)=} unfilteredIterationOrder |
| 1934 */ | 1896 */ |
| 1935 WebInspector.HeapSnapshotFilteredOrderedIterator = function(iterator, filter, un
filteredIterationOrder) | 1897 WebInspector.HeapSnapshotFilteredOrderedIterator = function(iterator, filter, un
filteredIterationOrder) |
| 1936 { | 1898 { |
| 1937 this._filter = filter; | 1899 this._filter = filter; |
| 1938 this._iterator = iterator; | 1900 this._iterator = iterator; |
| 1939 this._unfilteredIterationOrder = unfilteredIterationOrder; | 1901 this._unfilteredIterationOrder = unfilteredIterationOrder; |
| 1902 /** @type {?Array.<number>|?Uint32Array} */ |
| 1940 this._iterationOrder = null; | 1903 this._iterationOrder = null; |
| 1941 this._position = 0; | 1904 this._position = 0; |
| 1942 this._currentComparator = null; | 1905 this._currentComparator = null; |
| 1943 this._sortedPrefixLength = 0; | 1906 this._sortedPrefixLength = 0; |
| 1944 this._sortedSuffixLength = 0; | 1907 this._sortedSuffixLength = 0; |
| 1945 } | 1908 } |
| 1946 | 1909 |
| 1947 WebInspector.HeapSnapshotFilteredOrderedIterator.prototype = { | 1910 WebInspector.HeapSnapshotFilteredOrderedIterator.prototype = { |
| 1948 _createIterationOrder: function() | 1911 _createIterationOrder: function() |
| 1949 { | 1912 { |
| 1950 if (this._iterationOrder) | 1913 if (this._iterationOrder) |
| 1951 return; | 1914 return; |
| 1952 if (this._unfilteredIterationOrder && !this._filter) { | 1915 if (this._unfilteredIterationOrder && !this._filter) { |
| 1953 this._iterationOrder = this._unfilteredIterationOrder.slice(0); | 1916 this._iterationOrder = this._unfilteredIterationOrder; |
| 1954 this._unfilteredIterationOrder = null; | 1917 this._unfilteredIterationOrder = null; |
| 1955 return; | 1918 return; |
| 1956 } | 1919 } |
| 1957 this._iterationOrder = []; | 1920 this._iterationOrder = []; |
| 1958 var iterator = this._iterator; | 1921 var iterator = this._iterator; |
| 1959 if (!this._unfilteredIterationOrder && !this._filter) { | 1922 if (!this._unfilteredIterationOrder && !this._filter) { |
| 1960 for (iterator.rewind(); iterator.hasNext(); iterator.next()) | 1923 for (iterator.rewind(); iterator.hasNext(); iterator.next()) |
| 1961 this._iterationOrder.push(iterator.index()); | 1924 this._iterationOrder.push(iterator.index()); |
| 1962 } else if (!this._unfilteredIterationOrder) { | 1925 } else if (!this._unfilteredIterationOrder) { |
| 1963 for (iterator.rewind(); iterator.hasNext(); iterator.next()) { | 1926 for (iterator.rewind(); iterator.hasNext(); iterator.next()) { |
| 1964 if (this._filter(iterator.item())) | 1927 if (this._filter(iterator.item())) |
| 1965 this._iterationOrder.push(iterator.index()); | 1928 this._iterationOrder.push(iterator.index()); |
| 1966 } | 1929 } |
| 1967 } else { | 1930 } else { |
| 1968 var order = this._unfilteredIterationOrder.constructor === Array ? | 1931 var order = this._unfilteredIterationOrder; |
| 1969 this._unfilteredIterationOrder : this._unfilteredIterationOrder.
slice(0); | |
| 1970 for (var i = 0, l = order.length; i < l; ++i) { | 1932 for (var i = 0, l = order.length; i < l; ++i) { |
| 1971 iterator.setIndex(order[i]); | 1933 iterator.setIndex(order[i]); |
| 1972 if (this._filter(iterator.item())) | 1934 if (this._filter(iterator.item())) |
| 1973 this._iterationOrder.push(iterator.index()); | 1935 this._iterationOrder.push(iterator.index()); |
| 1974 } | 1936 } |
| 1975 this._unfilteredIterationOrder = null; | 1937 this._unfilteredIterationOrder = null; |
| 1976 } | 1938 } |
| 1977 }, | 1939 }, |
| 1978 | 1940 |
| 1979 rewind: function() | 1941 rewind: function() |
| (...skipping 20 matching lines...) Expand all Loading... |
| 2000 return !this._unfilteredIterationOrder.length; | 1962 return !this._unfilteredIterationOrder.length; |
| 2001 var iterator = this._iterator; | 1963 var iterator = this._iterator; |
| 2002 if (!this._unfilteredIterationOrder && !this._filter) { | 1964 if (!this._unfilteredIterationOrder && !this._filter) { |
| 2003 iterator.rewind(); | 1965 iterator.rewind(); |
| 2004 return !iterator.hasNext(); | 1966 return !iterator.hasNext(); |
| 2005 } else if (!this._unfilteredIterationOrder) { | 1967 } else if (!this._unfilteredIterationOrder) { |
| 2006 for (iterator.rewind(); iterator.hasNext(); iterator.next()) | 1968 for (iterator.rewind(); iterator.hasNext(); iterator.next()) |
| 2007 if (this._filter(iterator.item())) | 1969 if (this._filter(iterator.item())) |
| 2008 return false; | 1970 return false; |
| 2009 } else { | 1971 } else { |
| 2010 var order = this._unfilteredIterationOrder.constructor === Array ? | 1972 var order = this._unfilteredIterationOrder; |
| 2011 this._unfilteredIterationOrder : this._unfilteredIterationOrder.
slice(0); | |
| 2012 for (var i = 0, l = order.length; i < l; ++i) { | 1973 for (var i = 0, l = order.length; i < l; ++i) { |
| 2013 iterator.setIndex(order[i]); | 1974 iterator.setIndex(order[i]); |
| 2014 if (this._filter(iterator.item())) | 1975 if (this._filter(iterator.item())) |
| 2015 return false; | 1976 return false; |
| 2016 } | 1977 } |
| 2017 } | 1978 } |
| 2018 return true; | 1979 return true; |
| 2019 }, | 1980 }, |
| 2020 | 1981 |
| 2021 /** | 1982 /** |
| (...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2171 this._iterationOrder.sortRange(compareNodeAndNode, leftBound, rightB
ound, windowLeft, windowRight); | 2132 this._iterationOrder.sortRange(compareNodeAndNode, leftBound, rightB
ound, windowLeft, windowRight); |
| 2172 }, | 2133 }, |
| 2173 | 2134 |
| 2174 __proto__: WebInspector.HeapSnapshotFilteredOrderedIterator.prototype | 2135 __proto__: WebInspector.HeapSnapshotFilteredOrderedIterator.prototype |
| 2175 } | 2136 } |
| 2176 | 2137 |
| 2177 | 2138 |
| 2178 /** | 2139 /** |
| 2179 * @constructor | 2140 * @constructor |
| 2180 * @extends {WebInspector.HeapSnapshotFilteredOrderedIterator} | 2141 * @extends {WebInspector.HeapSnapshotFilteredOrderedIterator} |
| 2181 * @param {!Array.<number>=} nodeIndexes | 2142 * @param {(!Array.<number>|!Uint32Array)=} nodeIndexes |
| 2182 */ | 2143 */ |
| 2183 WebInspector.HeapSnapshotNodesProvider = function(snapshot, filter, nodeIndexes) | 2144 WebInspector.HeapSnapshotNodesProvider = function(snapshot, filter, nodeIndexes) |
| 2184 { | 2145 { |
| 2185 this.snapshot = snapshot; | 2146 this.snapshot = snapshot; |
| 2186 WebInspector.HeapSnapshotFilteredOrderedIterator.call(this, snapshot._allNod
es(), filter, nodeIndexes); | 2147 WebInspector.HeapSnapshotFilteredOrderedIterator.call(this, snapshot._allNod
es(), filter, nodeIndexes); |
| 2187 } | 2148 } |
| 2188 | 2149 |
| 2189 WebInspector.HeapSnapshotNodesProvider.prototype = { | 2150 WebInspector.HeapSnapshotNodesProvider.prototype = { |
| 2190 /** | 2151 /** |
| 2191 * @param {string} snapshotObjectId | 2152 * @param {string} snapshotObjectId |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2261 * @param {number} windowRight | 2222 * @param {number} windowRight |
| 2262 */ | 2223 */ |
| 2263 sort: function(comparator, leftBound, rightBound, windowLeft, windowRight) | 2224 sort: function(comparator, leftBound, rightBound, windowLeft, windowRight) |
| 2264 { | 2225 { |
| 2265 this._iterationOrder.sortRange(this._buildCompareFunction(comparator), l
eftBound, rightBound, windowLeft, windowRight); | 2226 this._iterationOrder.sortRange(this._buildCompareFunction(comparator), l
eftBound, rightBound, windowLeft, windowRight); |
| 2266 }, | 2227 }, |
| 2267 | 2228 |
| 2268 __proto__: WebInspector.HeapSnapshotFilteredOrderedIterator.prototype | 2229 __proto__: WebInspector.HeapSnapshotFilteredOrderedIterator.prototype |
| 2269 } | 2230 } |
| 2270 | 2231 |
| OLD | NEW |