| Index: Source/devtools/front_end/HeapSnapshot.js
|
| diff --git a/Source/devtools/front_end/HeapSnapshot.js b/Source/devtools/front_end/HeapSnapshot.js
|
| index 32d8ce574fed967b8faaf46b48cdea6f76c0f630..540bab46618c4e04a298d83b5b890413616b3bba 100644
|
| --- a/Source/devtools/front_end/HeapSnapshot.js
|
| +++ b/Source/devtools/front_end/HeapSnapshot.js
|
| @@ -142,59 +142,150 @@ WebInspector.HeapSnapshotItemIterator.prototype = {
|
| hasNext: function() { },
|
|
|
| /**
|
| + * @return {!WebInspector.HeapSnapshotEdge|!WebInspector.HeapSnapshotNode|!WebInspector.HeapSnapshotRetainerEdge}
|
| + */
|
| + item: function() { },
|
| +
|
| + next: function() { }
|
| +};
|
| +
|
| +
|
| +/**
|
| + * @interface
|
| + */
|
| +WebInspector.HeapSnapshotItemIndexProvider = function() { }
|
| +
|
| +WebInspector.HeapSnapshotItemIndexProvider.prototype = {
|
| + /**
|
| + * @param {!WebInspector.HeapSnapshotEdge|!WebInspector.HeapSnapshotNode|!WebInspector.HeapSnapshotRetainerEdge} item
|
| * @return {number}
|
| */
|
| - index: function() { },
|
| + indexForItem: function(item) { },
|
|
|
| /**
|
| * @param {number} newIndex
|
| + * @return {!WebInspector.HeapSnapshotEdge|!WebInspector.HeapSnapshotNode|!WebInspector.HeapSnapshotRetainerEdge}
|
| */
|
| - setIndex: function(newIndex) { },
|
| + itemForIndex: function(newIndex) { },
|
| +};
|
| +
|
| +/**
|
| + * @constructor
|
| + * @implements {WebInspector.HeapSnapshotItemIndexProvider}
|
| + * @param {!WebInspector.HeapSnapshot} snapshot
|
| + */
|
| +WebInspector.HeapSnapshotNodeIndexProvider = function(snapshot)
|
| +{
|
| + this._node = snapshot.createNode();
|
| +}
|
|
|
| +WebInspector.HeapSnapshotNodeIndexProvider.prototype = {
|
| /**
|
| - * @return {!WebInspector.HeapSnapshotEdge|!WebInspector.HeapSnapshotNode|!WebInspector.HeapSnapshotRetainerEdge}
|
| + * @param {!WebInspector.HeapSnapshotEdge|!WebInspector.HeapSnapshotNode|!WebInspector.HeapSnapshotRetainerEdge} item
|
| + * @return {number}
|
| */
|
| - item: function() { },
|
| + indexForItem: function(item)
|
| + {
|
| + var node = /** @type {!WebInspector.HeapSnapshotNode} */ (item);
|
| + return node.nodeIndex;
|
| + },
|
|
|
| - next: function() { }
|
| + /**
|
| + * @param {number} index
|
| + * @return {!WebInspector.HeapSnapshotNode}
|
| + */
|
| + itemForIndex: function(index)
|
| + {
|
| + this._node.nodeIndex = index;
|
| + return this._node;
|
| + }
|
| };
|
|
|
|
|
| -
|
| /**
|
| * @constructor
|
| - * @implements {WebInspector.HeapSnapshotItemIterator}
|
| - * @param {!WebInspector.HeapSnapshotNode} node
|
| + * @implements {WebInspector.HeapSnapshotItemIndexProvider}
|
| + * @param {!WebInspector.HeapSnapshot} snapshot
|
| */
|
| -WebInspector.HeapSnapshotEdgeIterator = function(node)
|
| +WebInspector.HeapSnapshotEdgeIndexProvider = function(snapshot)
|
| {
|
| - this._sourceNode = node;
|
| - this.edge = node._snapshot.createEdge(node._edgeIndexesStart());
|
| + this._edge = snapshot.createEdge(0);
|
| }
|
|
|
| -WebInspector.HeapSnapshotEdgeIterator.prototype = {
|
| +WebInspector.HeapSnapshotEdgeIndexProvider.prototype = {
|
| /**
|
| - * @return {boolean}
|
| + * @param {!WebInspector.HeapSnapshotEdge|!WebInspector.HeapSnapshotNode|!WebInspector.HeapSnapshotRetainerEdge} item
|
| + * @return {number}
|
| */
|
| - hasNext: function()
|
| + indexForItem: function(item)
|
| {
|
| - return this.edge.edgeIndex < this._sourceNode._edgeIndexesEnd();
|
| + var edge = /** @type {!WebInspector.HeapSnapshotEdge} */ (item);
|
| + return edge.edgeIndex;
|
| },
|
|
|
| /**
|
| + * @param {number} index
|
| + * @return {!WebInspector.HeapSnapshotEdge}
|
| + */
|
| + itemForIndex: function(index)
|
| + {
|
| + this._edge.edgeIndex = index;
|
| + return this._edge;
|
| + }
|
| +};
|
| +
|
| +
|
| +/**
|
| + * @constructor
|
| + * @implements {WebInspector.HeapSnapshotItemIndexProvider}
|
| + * @param {!WebInspector.HeapSnapshot} snapshot
|
| + */
|
| +WebInspector.HeapSnapshotRetainerEdgeIndexProvider = function(snapshot)
|
| +{
|
| + this._retainerEdge = snapshot.createRetainingEdge(0);
|
| +}
|
| +
|
| +WebInspector.HeapSnapshotRetainerEdgeIndexProvider.prototype = {
|
| + /**
|
| + * @param {!WebInspector.HeapSnapshotEdge|!WebInspector.HeapSnapshotNode|!WebInspector.HeapSnapshotRetainerEdge} item
|
| * @return {number}
|
| */
|
| - index: function()
|
| + indexForItem: function(item)
|
| {
|
| - return this.edge.edgeIndex;
|
| + var edge = /** @type {!WebInspector.HeapSnapshotRetainerEdge} */ (item);
|
| + return edge.retainerIndex();
|
| },
|
|
|
| /**
|
| - * @param {number} newIndex
|
| + * @param {number} index
|
| + * @return {!WebInspector.HeapSnapshotRetainerEdge}
|
| */
|
| - setIndex: function(newIndex)
|
| + itemForIndex: function(index)
|
| {
|
| - this.edge.edgeIndex = newIndex;
|
| + this._retainerEdge.setRetainerIndex(index);
|
| + return this._retainerEdge;
|
| + }
|
| +};
|
| +
|
| +
|
| +/**
|
| + * @constructor
|
| + * @implements {WebInspector.HeapSnapshotItemIterator}
|
| + * @param {!WebInspector.HeapSnapshotNode} node
|
| + */
|
| +WebInspector.HeapSnapshotEdgeIterator = function(node)
|
| +{
|
| + this._sourceNode = node;
|
| + this.edge = node._snapshot.createEdge(node._edgeIndexesStart());
|
| +}
|
| +
|
| +WebInspector.HeapSnapshotEdgeIterator.prototype = {
|
| + /**
|
| + * @return {boolean}
|
| + */
|
| + hasNext: function()
|
| + {
|
| + return this.edge.edgeIndex < this._sourceNode._edgeIndexesEnd();
|
| },
|
|
|
| /**
|
| @@ -373,22 +464,6 @@ WebInspector.HeapSnapshotRetainerEdgeIterator.prototype = {
|
| },
|
|
|
| /**
|
| - * @return {number}
|
| - */
|
| - index: function()
|
| - {
|
| - return this.retainer.retainerIndex();
|
| - },
|
| -
|
| - /**
|
| - * @param {number} newIndex
|
| - */
|
| - setIndex: function(newIndex)
|
| - {
|
| - this.retainer.setRetainerIndex(newIndex);
|
| - },
|
| -
|
| - /**
|
| * @return {!WebInspector.HeapSnapshotRetainerEdge}
|
| */
|
| item: function()
|
| @@ -409,7 +484,6 @@ WebInspector.HeapSnapshotRetainerEdgeIterator.prototype = {
|
| WebInspector.HeapSnapshotNode = function(snapshot, nodeIndex)
|
| {
|
| this._snapshot = snapshot;
|
| - this._firstNodeIndex = nodeIndex;
|
| this.nodeIndex = nodeIndex;
|
| }
|
|
|
| @@ -636,22 +710,6 @@ WebInspector.HeapSnapshotNodeIterator.prototype = {
|
| },
|
|
|
| /**
|
| - * @return {number}
|
| - */
|
| - index: function()
|
| - {
|
| - return /** @type{number} */ (this.node.nodeIndex);
|
| - },
|
| -
|
| - /**
|
| - * @param {number} newIndex
|
| - */
|
| - setIndex: function(newIndex)
|
| - {
|
| - this.node.nodeIndex = newIndex;
|
| - },
|
| -
|
| - /**
|
| * @return {!WebInspector.HeapSnapshotNode}
|
| */
|
| item: function()
|
| @@ -669,15 +727,14 @@ WebInspector.HeapSnapshotNodeIterator.prototype = {
|
| /**
|
| * @constructor
|
| * @implements {WebInspector.HeapSnapshotItemIterator}
|
| - * @param {!WebInspector.HeapSnapshotItemIterator} iterator
|
| + * @param {!WebInspector.HeapSnapshotItemIndexProvider} itemProvider
|
| * @param {!Array.<number>|!Uint32Array} indexes
|
| */
|
| -WebInspector.HeapSnapshotIndexRangeIterator = function(iterator, indexes)
|
| +WebInspector.HeapSnapshotIndexRangeIterator = function(itemProvider, indexes)
|
| {
|
| - this._iterator = iterator;
|
| + this._itemProvider = itemProvider;
|
| this._indexes = indexes;
|
| this._position = 0;
|
| - this._forcedIndex = -1;
|
| }
|
|
|
| WebInspector.HeapSnapshotIndexRangeIterator.prototype = {
|
| @@ -690,30 +747,12 @@ WebInspector.HeapSnapshotIndexRangeIterator.prototype = {
|
| },
|
|
|
| /**
|
| - * @return {number}
|
| - */
|
| - index: function()
|
| - {
|
| - if (this._forcedIndex !== -1)
|
| - return this._forcedIndex;
|
| - return this._indexes[this._position];
|
| - },
|
| -
|
| - /**
|
| - * @param {number} newIndex
|
| - */
|
| - setIndex: function(newIndex)
|
| - {
|
| - this._forcedIndex = newIndex;
|
| - },
|
| -
|
| - /**
|
| * @return {!WebInspector.HeapSnapshotEdge|!WebInspector.HeapSnapshotNode|!WebInspector.HeapSnapshotRetainerEdge}
|
| */
|
| item: function()
|
| {
|
| - this._iterator.setIndex(this.index());
|
| - return this._iterator.item();
|
| + var index = this._indexes[this._position];
|
| + return this._itemProvider.itemForIndex(index);
|
| },
|
|
|
| next: function()
|
| @@ -745,22 +784,6 @@ WebInspector.HeapSnapshotFilteredIterator.prototype = {
|
| },
|
|
|
| /**
|
| - * @return {number}
|
| - */
|
| - index: function()
|
| - {
|
| - return this._iterator.index();
|
| - },
|
| -
|
| - /**
|
| - * @param {number} newIndex
|
| - */
|
| - setIndex: function(newIndex)
|
| - {
|
| - this._iterator.setIndex(newIndex);
|
| - },
|
| -
|
| - /**
|
| * @return {!WebInspector.HeapSnapshotEdge|!WebInspector.HeapSnapshotNode|!WebInspector.HeapSnapshotRetainerEdge}
|
| */
|
| item: function()
|
| @@ -1900,7 +1923,8 @@ WebInspector.HeapSnapshot.prototype = {
|
| {
|
| var node = this.createNode(nodeIndex);
|
| var filter = this.containmentEdgesFilter(showHiddenData);
|
| - return new WebInspector.HeapSnapshotEdgesProvider(this, filter, node.edges());
|
| + var indexProvider = new WebInspector.HeapSnapshotEdgeIndexProvider(this);
|
| + return new WebInspector.HeapSnapshotEdgesProvider(this, filter, node.edges(), indexProvider);
|
| },
|
|
|
| /**
|
| @@ -1910,7 +1934,8 @@ WebInspector.HeapSnapshot.prototype = {
|
| createEdgesProviderForTest: function(nodeIndex, filter)
|
| {
|
| var node = this.createNode(nodeIndex);
|
| - return new WebInspector.HeapSnapshotEdgesProvider(this, filter, node.edges());
|
| + var indexProvider = new WebInspector.HeapSnapshotEdgeIndexProvider(this);
|
| + return new WebInspector.HeapSnapshotEdgesProvider(this, filter, node.edges(), indexProvider);
|
| },
|
|
|
| /**
|
| @@ -1940,7 +1965,8 @@ WebInspector.HeapSnapshot.prototype = {
|
| {
|
| var node = this.createNode(nodeIndex);
|
| var filter = this.retainingEdgesFilter(showHiddenData);
|
| - return new WebInspector.HeapSnapshotEdgesProvider(this, filter, node.retainers());
|
| + var indexProvider = new WebInspector.HeapSnapshotRetainerEdgeIndexProvider(this);
|
| + return new WebInspector.HeapSnapshotEdgesProvider(this, filter, node.retainers(), indexProvider);
|
| },
|
|
|
| /**
|
| @@ -2024,10 +2050,12 @@ WebInspector.HeapSnapshot.prototype = {
|
| /**
|
| * @constructor
|
| * @param {!WebInspector.HeapSnapshotItemIterator} iterator
|
| + * @param {!WebInspector.HeapSnapshotItemIndexProvider} indexProvider
|
| */
|
| -WebInspector.HeapSnapshotItemProvider = function(iterator)
|
| +WebInspector.HeapSnapshotItemProvider = function(iterator, indexProvider)
|
| {
|
| this._iterator = iterator;
|
| + this._indexProvider = indexProvider;
|
| this._isEmpty = !iterator.hasNext();
|
| /** @type {?Array.<number>} */
|
| this._iterationOrder = null;
|
| @@ -2043,7 +2071,7 @@ WebInspector.HeapSnapshotItemProvider.prototype = {
|
| return;
|
| this._iterationOrder = [];
|
| for (var iterator = this._iterator; iterator.hasNext(); iterator.next())
|
| - this._iterationOrder.push(iterator.index());
|
| + this._iterationOrder.push(this._indexProvider.indexForItem(iterator.item()));
|
| },
|
|
|
| /**
|
| @@ -2078,8 +2106,9 @@ WebInspector.HeapSnapshotItemProvider.prototype = {
|
| var result = new Array(count);
|
| var iterator = this._iterator;
|
| for (var i = 0 ; i < count; ++i) {
|
| - iterator.setIndex(this._iterationOrder[position++]);
|
| - result[i] = iterator.item().serialize();
|
| + var itemIndex = this._iterationOrder[position++];
|
| + var item = this._indexProvider.itemForIndex(itemIndex);
|
| + result[i] = item.serialize();
|
| }
|
| return new WebInspector.HeapSnapshotCommon.ItemsRange(begin, end, this._iterationOrder.length, result);
|
| },
|
| @@ -2095,13 +2124,14 @@ WebInspector.HeapSnapshotItemProvider.prototype = {
|
| /**
|
| * @constructor
|
| * @extends {WebInspector.HeapSnapshotItemProvider}
|
| + * @param {!WebInspector.HeapSnapshotItemIndexProvider} indexProvider
|
| */
|
| -WebInspector.HeapSnapshotEdgesProvider = function(snapshot, filter, edgesIter)
|
| +WebInspector.HeapSnapshotEdgesProvider = function(snapshot, filter, edgesIter, indexProvider)
|
| {
|
| this.snapshot = snapshot;
|
| if (filter)
|
| edgesIter = new WebInspector.HeapSnapshotFilteredIterator(edgesIter, filter);
|
| - WebInspector.HeapSnapshotItemProvider.call(this, edgesIter);
|
| + WebInspector.HeapSnapshotItemProvider.call(this, edgesIter, indexProvider);
|
| }
|
|
|
| WebInspector.HeapSnapshotEdgesProvider.prototype = {
|
| @@ -2199,10 +2229,11 @@ WebInspector.HeapSnapshotEdgesProvider.prototype = {
|
| WebInspector.HeapSnapshotNodesProvider = function(snapshot, filter, nodeIndexes)
|
| {
|
| this.snapshot = snapshot;
|
| - var it = new WebInspector.HeapSnapshotIndexRangeIterator(snapshot._allNodes(), nodeIndexes);
|
| + var indexProvider = new WebInspector.HeapSnapshotNodeIndexProvider(snapshot);
|
| + var it = new WebInspector.HeapSnapshotIndexRangeIterator(indexProvider, nodeIndexes);
|
| if (filter)
|
| it = new WebInspector.HeapSnapshotFilteredIterator(it, filter);
|
| - WebInspector.HeapSnapshotItemProvider.call(this, it);
|
| + WebInspector.HeapSnapshotItemProvider.call(this, it, indexProvider);
|
| }
|
|
|
| WebInspector.HeapSnapshotNodesProvider.prototype = {
|
|
|