| 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 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 85 * @return {!Element} | 85 * @return {!Element} |
| 86 */ | 86 */ |
| 87 createCell: function(columnIdentifier) | 87 createCell: function(columnIdentifier) |
| 88 { | 88 { |
| 89 var cell = WebInspector.DataGridNode.prototype.createCell.call(this, col
umnIdentifier); | 89 var cell = WebInspector.DataGridNode.prototype.createCell.call(this, col
umnIdentifier); |
| 90 if (this._searchMatched) | 90 if (this._searchMatched) |
| 91 cell.classList.add("highlight"); | 91 cell.classList.add("highlight"); |
| 92 return cell; | 92 return cell; |
| 93 }, | 93 }, |
| 94 | 94 |
| 95 /** |
| 96 * @override |
| 97 */ |
| 95 collapse: function() | 98 collapse: function() |
| 96 { | 99 { |
| 97 WebInspector.DataGridNode.prototype.collapse.call(this); | 100 WebInspector.DataGridNode.prototype.collapse.call(this); |
| 98 this._dataGrid.updateVisibleNodes(); | 101 this._dataGrid.updateVisibleNodes(); |
| 99 }, | 102 }, |
| 100 | 103 |
| 104 /** |
| 105 * @override |
| 106 */ |
| 101 dispose: function() | 107 dispose: function() |
| 102 { | 108 { |
| 103 if (this._providerObject) | 109 if (this._providerObject) |
| 104 this._providerObject.dispose(); | 110 this._providerObject.dispose(); |
| 105 for (var node = this.children[0]; node; node = node.traverseNextNode(tru
e, this, true)) | 111 for (var node = this.children[0]; node; node = node.traverseNextNode(tru
e, this, true)) |
| 106 if (node.dispose) | 112 if (node.dispose) |
| 107 node.dispose(); | 113 node.dispose(); |
| 108 }, | 114 }, |
| 109 | 115 |
| 110 _reachableFromWindow: false, | 116 _reachableFromWindow: false, |
| 111 | 117 |
| 112 queryObjectContent: function(callback) | 118 queryObjectContent: function(callback) |
| 113 { | 119 { |
| 114 }, | 120 }, |
| 115 | 121 |
| 116 /** | 122 /** |
| 117 * @override | 123 * @override |
| 118 */ | 124 */ |
| 119 wasDetached: function() | 125 wasDetached: function() |
| 120 { | 126 { |
| 121 this._dataGrid.nodeWasDetached(this); | 127 this._dataGrid.nodeWasDetached(this); |
| 122 }, | 128 }, |
| 123 | 129 |
| 124 _toPercentString: function(num) | 130 _toPercentString: function(num) |
| 125 { | 131 { |
| 126 return num.toFixed(0) + "\u2009%"; // \u2009 is a thin space. | 132 return num.toFixed(0) + "\u2009%"; // \u2009 is a thin space. |
| 127 }, | 133 }, |
| 128 | 134 |
| 129 /** | 135 /** |
| 136 * @return {!Array.<!WebInspector.DataGridNode>} |
| 137 */ |
| 138 allChildren: function() |
| 139 { |
| 140 return this.children; |
| 141 }, |
| 142 |
| 143 /** |
| 144 * @param {number} index |
| 145 */ |
| 146 removeChildByIndex: function(index) |
| 147 { |
| 148 this.removeChild(this.children[index]); |
| 149 }, |
| 150 |
| 151 /** |
| 130 * @param {number} nodePosition | 152 * @param {number} nodePosition |
| 131 * @return {?WebInspector.DataGridNode} | 153 * @return {?WebInspector.DataGridNode} |
| 132 */ | 154 */ |
| 133 childForPosition: function(nodePosition) | 155 childForPosition: function(nodePosition) |
| 134 { | 156 { |
| 135 var indexOfFirsChildInRange = 0; | 157 var indexOfFirstChildInRange = 0; |
| 136 for (var i = 0; i < this._retrievedChildrenRanges.length; i++) { | 158 for (var i = 0; i < this._retrievedChildrenRanges.length; i++) { |
| 137 var range = this._retrievedChildrenRanges[i]; | 159 var range = this._retrievedChildrenRanges[i]; |
| 138 if (range.from <= nodePosition && nodePosition < range.to) { | 160 if (range.from <= nodePosition && nodePosition < range.to) { |
| 139 var childIndex = indexOfFirsChildInRange + nodePosition - range.f
rom; | 161 var childIndex = indexOfFirstChildInRange + nodePosition - range.
from; |
| 140 return this.children[childIndex]; | 162 return this.allChildren()[childIndex]; |
| 141 } | 163 } |
| 142 indexOfFirsChildInRange += range.to - range.from + 1; | 164 indexOfFirstChildInRange += range.to - range.from + 1; |
| 143 } | 165 } |
| 144 return null; | 166 return null; |
| 145 }, | 167 }, |
| 146 | 168 |
| 169 /** |
| 170 * @param {string} columnIdentifier |
| 171 * @return {!Element} |
| 172 */ |
| 147 _createValueCell: function(columnIdentifier) | 173 _createValueCell: function(columnIdentifier) |
| 148 { | 174 { |
| 149 var cell = document.createElement("td"); | 175 var cell = document.createElement("td"); |
| 150 cell.className = columnIdentifier + "-column"; | 176 cell.className = columnIdentifier + "-column"; |
| 151 if (this.dataGrid.snapshot.totalSize !== 0) { | 177 if (this.dataGrid.snapshot.totalSize !== 0) { |
| 152 var div = document.createElement("div"); | 178 var div = document.createElement("div"); |
| 153 var valueSpan = document.createElement("span"); | 179 var valueSpan = document.createElement("span"); |
| 154 valueSpan.textContent = this.data[columnIdentifier]; | 180 valueSpan.textContent = this.data[columnIdentifier]; |
| 155 div.appendChild(valueSpan); | 181 div.appendChild(valueSpan); |
| 156 var percentColumn = columnIdentifier + "-percent"; | 182 var percentColumn = columnIdentifier + "-percent"; |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 270 } | 296 } |
| 271 insertionIndex += range.to - range.from; | 297 insertionIndex += range.to - range.from; |
| 272 // Skip the button if there is one. | 298 // Skip the button if there is one. |
| 273 if (range.to < itemsRange.totalLength) | 299 if (range.to < itemsRange.totalLength) |
| 274 insertionIndex += 1; | 300 insertionIndex += 1; |
| 275 ++rangeIndex; | 301 ++rangeIndex; |
| 276 } | 302 } |
| 277 | 303 |
| 278 if (!found || itemsRange.startPosition < range.from) { | 304 if (!found || itemsRange.startPosition < range.from) { |
| 279 // Update previous button. | 305 // Update previous button. |
| 280 this.children[insertionIndex - 1].setEndPosition(itemsRange.
startPosition); | 306 this.allChildren()[insertionIndex - 1].setEndPosition(itemsR
ange.startPosition); |
| 281 insertShowMoreButton.call(this, itemsRange.startPosition, fo
und ? range.from : itemsRange.totalLength, insertionIndex); | 307 insertShowMoreButton.call(this, itemsRange.startPosition, fo
und ? range.from : itemsRange.totalLength, insertionIndex); |
| 282 range = {from: itemsRange.startPosition, to: itemsRange.star
tPosition}; | 308 range = {from: itemsRange.startPosition, to: itemsRange.star
tPosition}; |
| 283 if (!found) | 309 if (!found) |
| 284 rangeIndex = this._retrievedChildrenRanges.length; | 310 rangeIndex = this._retrievedChildrenRanges.length; |
| 285 this._retrievedChildrenRanges.splice(rangeIndex, 0, range); | 311 this._retrievedChildrenRanges.splice(rangeIndex, 0, range); |
| 286 } else { | 312 } else { |
| 287 insertionIndex += itemPosition - range.from; | 313 insertionIndex += itemPosition - range.from; |
| 288 } | 314 } |
| 289 // At this point insertionIndex is always an index before button
or between nodes. | 315 // At this point insertionIndex is always an index before button
or between nodes. |
| 290 // Also it is always true here that range.from <= itemPosition <
= range.to | 316 // Also it is always true here that range.from <= itemPosition <
= range.to |
| (...skipping 12 matching lines...) Expand all Loading... |
| 303 if (newEndOfRange > itemsRange.endPosition) | 329 if (newEndOfRange > itemsRange.endPosition) |
| 304 newEndOfRange = itemsRange.endPosition; | 330 newEndOfRange = itemsRange.endPosition; |
| 305 while (itemPosition < newEndOfRange) { | 331 while (itemPosition < newEndOfRange) { |
| 306 insertRetrievedChild.call(this, items[itemIndex++], inse
rtionIndex++); | 332 insertRetrievedChild.call(this, items[itemIndex++], inse
rtionIndex++); |
| 307 ++itemPosition; | 333 ++itemPosition; |
| 308 } | 334 } |
| 309 // Merge with the next range. | 335 // Merge with the next range. |
| 310 if (nextRange && newEndOfRange === nextRange.from) { | 336 if (nextRange && newEndOfRange === nextRange.from) { |
| 311 range.to = nextRange.to; | 337 range.to = nextRange.to; |
| 312 // Remove "show next" button if there is one. | 338 // Remove "show next" button if there is one. |
| 313 this.removeChild(this.children[insertionIndex]); | 339 this.removeChildByIndex(insertionIndex); |
| 314 this._retrievedChildrenRanges.splice(rangeIndex + 1, 1); | 340 this._retrievedChildrenRanges.splice(rangeIndex + 1, 1); |
| 315 } else { | 341 } else { |
| 316 range.to = newEndOfRange; | 342 range.to = newEndOfRange; |
| 317 // Remove or update next button. | 343 // Remove or update next button. |
| 318 if (newEndOfRange === itemsRange.totalLength) | 344 if (newEndOfRange === itemsRange.totalLength) |
| 319 this.removeChild(this.children[insertionIndex]); | 345 this.removeChildByIndex(insertionIndex); |
| 320 else | 346 else |
| 321 this.children[insertionIndex].setStartPosition(items
Range.endPosition); | 347 this.allChildren()[insertionIndex].setStartPosition(
itemsRange.endPosition); |
| 322 } | 348 } |
| 323 } | 349 } |
| 324 } | 350 } |
| 325 | 351 |
| 326 // TODO: fix this. | 352 // TODO: fix this. |
| 327 this._instanceCount += items.length; | 353 this._instanceCount += items.length; |
| 328 if (firstNotSerializedPosition < toPosition) { | 354 if (firstNotSerializedPosition < toPosition) { |
| 329 serializeNextChunk.call(this); | 355 serializeNextChunk.call(this); |
| 330 return; | 356 return; |
| 331 } | 357 } |
| 332 | 358 |
| 333 if (afterPopulate) | 359 if (afterPopulate) |
| 334 afterPopulate(); | 360 afterPopulate(); |
| 335 this.dispatchEventToListeners(WebInspector.HeapSnapshotGridNode.Even
ts.PopulateComplete); | 361 this.dispatchEventToListeners(WebInspector.HeapSnapshotGridNode.Even
ts.PopulateComplete); |
| 336 } | 362 } |
| 337 serializeNextChunk.call(this); | 363 serializeNextChunk.call(this); |
| 338 }, | 364 }, |
| 339 | 365 |
| 340 _saveChildren: function() | 366 _saveChildren: function() |
| 341 { | 367 { |
| 342 this._savedChildren = null; | 368 this._savedChildren = null; |
| 343 for (var i = 0, childrenCount = this.children.length; i < childrenCount;
++i) { | 369 var children = this.allChildren(); |
| 344 var child = this.children[i]; | 370 for (var i = 0, l = children.length; i < l; ++i) { |
| 371 var child = children[i]; |
| 345 if (!child.expanded) | 372 if (!child.expanded) |
| 346 continue; | 373 continue; |
| 347 if (!this._savedChildren) | 374 if (!this._savedChildren) |
| 348 this._savedChildren = {}; | 375 this._savedChildren = {}; |
| 349 this._savedChildren[this._childHashForNode(child)] = child; | 376 this._savedChildren[this._childHashForNode(child)] = child; |
| 350 } | 377 } |
| 351 }, | 378 }, |
| 352 | 379 |
| 353 sort: function() | 380 sort: function() |
| 354 { | 381 { |
| 355 this._dataGrid.recursiveSortingEnter(); | 382 this._dataGrid.recursiveSortingEnter(); |
| 356 | 383 |
| 357 /** | 384 /** |
| 358 * @this {WebInspector.HeapSnapshotGridNode} | 385 * @this {WebInspector.HeapSnapshotGridNode} |
| 359 */ | 386 */ |
| 360 function afterSort() | 387 function afterSort() |
| 361 { | 388 { |
| 362 this._saveChildren(); | 389 this._saveChildren(); |
| 363 this.removeChildren(); | 390 this.removeChildren(); |
| 364 this._retrievedChildrenRanges = []; | 391 this._retrievedChildrenRanges = []; |
| 365 | 392 |
| 366 /** | 393 /** |
| 367 * @this {WebInspector.HeapSnapshotGridNode} | 394 * @this {WebInspector.HeapSnapshotGridNode} |
| 368 */ | 395 */ |
| 369 function afterPopulate() | 396 function afterPopulate() |
| 370 { | 397 { |
| 371 for (var i = 0, l = this.children.length; i < l; ++i) { | 398 var children = this.allChildren(); |
| 372 var child = this.children[i]; | 399 for (var i = 0, l = children.length; i < l; ++i) { |
| 400 var child = children[i]; |
| 373 if (child.expanded) | 401 if (child.expanded) |
| 374 child.sort(); | 402 child.sort(); |
| 375 } | 403 } |
| 376 this._dataGrid.recursiveSortingLeave(); | 404 this._dataGrid.recursiveSortingLeave(); |
| 377 } | 405 } |
| 378 var instanceCount = this._instanceCount; | 406 var instanceCount = this._instanceCount; |
| 379 this._instanceCount = 0; | 407 this._instanceCount = 0; |
| 380 this._populateChildren(0, instanceCount, afterPopulate.bind(this)); | 408 this._populateChildren(0, instanceCount, afterPopulate.bind(this)); |
| 381 } | 409 } |
| 382 | 410 |
| (...skipping 447 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 830 /** | 858 /** |
| 831 * @this {WebInspector.HeapSnapshotConstructorNode} | 859 * @this {WebInspector.HeapSnapshotConstructorNode} |
| 832 */ | 860 */ |
| 833 function didExpand() | 861 function didExpand() |
| 834 { | 862 { |
| 835 this._provider().nodePosition(snapshotObjectId, didGetNodePosition.b
ind(this)); | 863 this._provider().nodePosition(snapshotObjectId, didGetNodePosition.b
ind(this)); |
| 836 } | 864 } |
| 837 | 865 |
| 838 /** | 866 /** |
| 839 * @this {WebInspector.HeapSnapshotConstructorNode} | 867 * @this {WebInspector.HeapSnapshotConstructorNode} |
| 868 * @param {number} nodePosition |
| 840 */ | 869 */ |
| 841 function didGetNodePosition(nodePosition) | 870 function didGetNodePosition(nodePosition) |
| 842 { | 871 { |
| 843 if (nodePosition === -1) { | 872 if (nodePosition === -1) { |
| 844 this.collapse(); | 873 this.collapse(); |
| 845 callback(false); | 874 callback(false); |
| 846 } else { | 875 } else { |
| 847 this._populateChildren(nodePosition, null, didPopulateChildren.b
ind(this, nodePosition)); | 876 this._populateChildren(nodePosition, null, didPopulateChildren.b
ind(this, nodePosition)); |
| 848 } | 877 } |
| 849 } | 878 } |
| 850 | 879 |
| 851 /** | 880 /** |
| 852 * @this {WebInspector.HeapSnapshotConstructorNode} | 881 * @this {WebInspector.HeapSnapshotConstructorNode} |
| 882 * @param {number} nodePosition |
| 853 */ | 883 */ |
| 854 function didPopulateChildren(nodePosition) | 884 function didPopulateChildren(nodePosition) |
| 855 { | 885 { |
| 856 var indexOfFirsChildInRange = 0; | 886 var child = this.childForPosition(nodePosition); |
| 857 for (var i = 0; i < this._retrievedChildrenRanges.length; i++) { | 887 if (child) |
| 858 var range = this._retrievedChildrenRanges[i]; | 888 this._dataGrid.highlightNode(/** @type {!WebInspector.HeapSnapsh
otGridNode} */ (child)); |
| 859 if (range.from <= nodePosition && nodePosition < range.to) { | 889 callback(!!child); |
| 860 var childIndex = indexOfFirsChildInRange + nodePosition - ran
ge.from; | |
| 861 var instanceNode = this.children[childIndex]; | |
| 862 this._dataGrid.highlightNode(/** @type {!WebInspector.HeapSna
pshotGridNode} */ (instanceNode)); | |
| 863 callback(true); | |
| 864 return; | |
| 865 } | |
| 866 indexOfFirsChildInRange += range.to - range.from + 1; | |
| 867 } | |
| 868 callback(false); | |
| 869 } | 890 } |
| 870 | 891 |
| 871 this.expandWithoutPopulate(didExpand.bind(this)); | 892 this.expandWithoutPopulate(didExpand.bind(this)); |
| 872 }, | 893 }, |
| 873 | 894 |
| 874 /** | 895 /** |
| 875 * @param {string} columnIdentifier | 896 * @param {string} columnIdentifier |
| 876 * @return {!Element} | 897 * @return {!Element} |
| 877 */ | 898 */ |
| 878 createCell: function(columnIdentifier) | 899 createCell: function(columnIdentifier) |
| (...skipping 360 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1239 }, | 1260 }, |
| 1240 | 1261 |
| 1241 _emptyData: function() | 1262 _emptyData: function() |
| 1242 { | 1263 { |
| 1243 return {}; | 1264 return {}; |
| 1244 }, | 1265 }, |
| 1245 | 1266 |
| 1246 __proto__: WebInspector.HeapSnapshotGenericObjectNode.prototype | 1267 __proto__: WebInspector.HeapSnapshotGenericObjectNode.prototype |
| 1247 } | 1268 } |
| 1248 | 1269 |
| OLD | NEW |