Chromium Code Reviews| 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 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 104 WebInspector.HeapSnapshotGridNode.prototype = { | 104 WebInspector.HeapSnapshotGridNode.prototype = { |
| 105 /** | 105 /** |
| 106 * @return {!WebInspector.HeapSnapshotGridNode.ChildrenProvider} | 106 * @return {!WebInspector.HeapSnapshotGridNode.ChildrenProvider} |
| 107 */ | 107 */ |
| 108 createProvider: function() | 108 createProvider: function() |
| 109 { | 109 { |
| 110 throw new Error("Not implemented."); | 110 throw new Error("Not implemented."); |
| 111 }, | 111 }, |
| 112 | 112 |
| 113 /** | 113 /** |
| 114 * @return {?{snapshot:!WebInspector.HeapSnapshotProxy, snapshotNodeIndex:nu mber}} | |
| 115 */ | |
| 116 retainersDataSource: function() | |
| 117 { | |
| 118 return null; | |
| 119 }, | |
| 120 | |
| 121 /** | |
| 114 * @return {!WebInspector.HeapSnapshotGridNode.ChildrenProvider} | 122 * @return {!WebInspector.HeapSnapshotGridNode.ChildrenProvider} |
| 115 */ | 123 */ |
| 116 _provider: function() | 124 _provider: function() |
| 117 { | 125 { |
| 118 if (!this._providerObject) | 126 if (!this._providerObject) |
| 119 this._providerObject = this.createProvider(); | 127 this._providerObject = this.createProvider(); |
| 120 return this._providerObject; | 128 return this._providerObject; |
| 121 }, | 129 }, |
| 122 | 130 |
| 123 /** | 131 /** |
| (...skipping 338 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 462 this._provider().sortAndRewind(this.comparator(), afterSort.bind(this)); | 470 this._provider().sortAndRewind(this.comparator(), afterSort.bind(this)); |
| 463 }, | 471 }, |
| 464 | 472 |
| 465 __proto__: WebInspector.DataGridNode.prototype | 473 __proto__: WebInspector.DataGridNode.prototype |
| 466 } | 474 } |
| 467 | 475 |
| 468 | 476 |
| 469 /** | 477 /** |
| 470 * @constructor | 478 * @constructor |
| 471 * @extends {WebInspector.HeapSnapshotGridNode} | 479 * @extends {WebInspector.HeapSnapshotGridNode} |
| 472 * @param {!WebInspector.HeapSnapshotSortableDataGrid} tree | 480 * @param {!WebInspector.HeapSnapshotSortableDataGrid} dataGrid |
| 473 */ | 481 */ |
| 474 WebInspector.HeapSnapshotGenericObjectNode = function(tree, node) | 482 WebInspector.HeapSnapshotGenericObjectNode = function(dataGrid, node) |
| 475 { | 483 { |
| 476 this.snapshotNodeIndex = 0; | 484 WebInspector.HeapSnapshotGridNode.call(this, dataGrid, false); |
| 477 WebInspector.HeapSnapshotGridNode.call(this, tree, false); | |
| 478 // node is null for DataGrid root nodes. | 485 // node is null for DataGrid root nodes. |
| 479 if (!node) | 486 if (!node) |
| 480 return; | 487 return; |
| 481 this._name = node.name; | 488 this._name = node.name; |
| 482 this._type = node.type; | 489 this._type = node.type; |
| 483 this._distance = node.distance; | 490 this._distance = node.distance; |
| 484 this._shallowSize = node.selfSize; | 491 this._shallowSize = node.selfSize; |
| 485 this._retainedSize = node.retainedSize; | 492 this._retainedSize = node.retainedSize; |
|
loislo
2014/03/26 08:36:04
Looks like we don't need these 3 properties on 'th
yurys
2014/03/26 09:25:09
They are used when sorting rows, see _sortFields m
| |
| 486 this.snapshotNodeId = node.id; | 493 this.snapshotNodeId = node.id; |
| 487 this.snapshotNodeIndex = node.nodeIndex; | 494 this.snapshotNodeIndex = node.nodeIndex; |
| 488 if (this._type === "string") | 495 if (this._type === "string") |
| 489 this._reachableFromWindow = true; | 496 this._reachableFromWindow = true; |
| 490 else if (this._type === "object" && this._name.startsWith("Window")) { | 497 else if (this._type === "object" && this._name.startsWith("Window")) { |
| 491 this._name = this.shortenWindowURL(this._name, false); | 498 this._name = this.shortenWindowURL(this._name, false); |
| 492 this._reachableFromWindow = true; | 499 this._reachableFromWindow = true; |
| 493 } else if (node.canBeQueried) | 500 } else if (node.canBeQueried) |
| 494 this._reachableFromWindow = true; | 501 this._reachableFromWindow = true; |
| 495 if (node.detachedDOMTreeNode) | 502 if (node.detachedDOMTreeNode) |
| 496 this.detachedDOMTreeNode = true; | 503 this.detachedDOMTreeNode = true; |
| 504 | |
| 505 var snapshot = dataGrid.snapshot; | |
| 506 var shallowSizePercent = this._shallowSize / snapshot.totalSize * 100.0; | |
| 507 var retainedSizePercent = this._retainedSize / snapshot.totalSize * 100.0; | |
| 508 this.data = { | |
| 509 "distance": this._distance, | |
| 510 "shallowSize": Number.withThousandsSeparator(this._shallowSize), | |
| 511 "retainedSize": Number.withThousandsSeparator(this._retainedSize), | |
| 512 "shallowSize-percent": this._toPercentString(shallowSizePercent), | |
| 513 "retainedSize-percent": this._toPercentString(retainedSizePercent) | |
| 514 }; | |
| 497 }; | 515 }; |
| 498 | 516 |
| 499 WebInspector.HeapSnapshotGenericObjectNode.prototype = { | 517 WebInspector.HeapSnapshotGenericObjectNode.prototype = { |
| 500 /** | 518 /** |
| 519 * @return {?{snapshot:!WebInspector.HeapSnapshotProxy, snapshotNodeIndex:nu mber}} | |
| 520 */ | |
| 521 retainersDataSource: function() | |
| 522 { | |
| 523 return {snapshot: this._dataGrid.snapshot, snapshotNodeIndex: this.snaps hotNodeIndex}; | |
| 524 }, | |
| 525 | |
| 526 /** | |
| 501 * @param {string} columnIdentifier | 527 * @param {string} columnIdentifier |
| 502 * @return {!Element} | 528 * @return {!Element} |
| 503 */ | 529 */ |
| 504 createCell: function(columnIdentifier) | 530 createCell: function(columnIdentifier) |
| 505 { | 531 { |
| 506 var cell = columnIdentifier !== "object" ? this._createValueCell(columnI dentifier) : this._createObjectCell(); | 532 var cell = columnIdentifier !== "object" ? this._createValueCell(columnI dentifier) : this._createObjectCell(); |
| 507 if (this._searchMatched) | 533 if (this._searchMatched) |
| 508 cell.classList.add("highlight"); | 534 cell.classList.add("highlight"); |
| 509 return cell; | 535 return cell; |
| 510 }, | 536 }, |
| 511 | 537 |
| 538 /** | |
| 539 * @return {!Element} | |
| 540 */ | |
| 512 _createObjectCell: function() | 541 _createObjectCell: function() |
| 513 { | 542 { |
| 514 var cell = document.createElement("td"); | |
| 515 cell.className = "object-column"; | |
| 516 var div = document.createElement("div"); | |
| 517 div.className = "source-code event-properties"; | |
| 518 div.style.overflow = "visible"; | |
| 519 | |
| 520 var data = this.data["object"]; | |
| 521 if (this._prefixObjectCell) | |
| 522 this._prefixObjectCell(div, data); | |
| 523 | |
| 524 var valueSpan = document.createElement("span"); | |
| 525 valueSpan.className = "value console-formatted-" + data.valueStyle; | |
| 526 valueSpan.textContent = data.value; | |
| 527 div.appendChild(valueSpan); | |
| 528 | |
| 529 var idSpan = document.createElement("span"); | |
| 530 idSpan.className = "console-formatted-id"; | |
| 531 idSpan.textContent = " @" + data["nodeId"]; | |
| 532 div.appendChild(idSpan); | |
| 533 | |
| 534 if (this._postfixObjectCell) | |
| 535 this._postfixObjectCell(div, data); | |
| 536 | |
| 537 cell.appendChild(div); | |
| 538 cell.classList.add("disclosure"); | |
| 539 if (this.depth) | |
| 540 cell.style.setProperty("padding-left", (this.depth * this.dataGrid.i ndentWidth) + "px"); | |
| 541 cell.heapSnapshotNode = this; | |
| 542 return cell; | |
| 543 }, | |
| 544 | |
| 545 get data() | |
| 546 { | |
| 547 var data = this._emptyData(); | |
| 548 | |
| 549 var value = this._name; | 543 var value = this._name; |
| 550 var valueStyle = "object"; | 544 var valueStyle = "object"; |
| 551 switch (this._type) { | 545 switch (this._type) { |
| 552 case "concatenated string": | 546 case "concatenated string": |
| 553 case "string": | 547 case "string": |
| 554 value = "\"" + value + "\""; | 548 value = "\"" + value + "\""; |
| 555 valueStyle = "string"; | 549 valueStyle = "string"; |
| 556 break; | 550 break; |
| 557 case "regexp": | 551 case "regexp": |
| 558 value = "/" + value + "/"; | 552 value = "/" + value + "/"; |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 574 else | 568 else |
| 575 value += "[]"; | 569 value += "[]"; |
| 576 break; | 570 break; |
| 577 }; | 571 }; |
| 578 if (this._reachableFromWindow) | 572 if (this._reachableFromWindow) |
| 579 valueStyle += " highlight"; | 573 valueStyle += " highlight"; |
| 580 if (value === "Object") | 574 if (value === "Object") |
| 581 value = ""; | 575 value = ""; |
| 582 if (this.detachedDOMTreeNode) | 576 if (this.detachedDOMTreeNode) |
| 583 valueStyle += " detached-dom-tree-node"; | 577 valueStyle += " detached-dom-tree-node"; |
| 584 data["object"] = { valueStyle: valueStyle, value: value, nodeId: this.sn apshotNodeId }; | 578 return this._createObjectCellWithValue(valueStyle, value); |
| 579 }, | |
| 585 | 580 |
| 586 data["distance"] = this._distance; | 581 _createObjectCellWithValue: function(valueStyle, value) |
| 587 data["shallowSize"] = Number.withThousandsSeparator(this._shallowSize); | 582 { |
| 588 data["retainedSize"] = Number.withThousandsSeparator(this._retainedSize) ; | 583 var cell = document.createElement("td"); |
| 589 data["shallowSize-percent"] = this._toPercentString(this._shallowSizePer cent); | 584 cell.className = "object-column"; |
| 590 data["retainedSize-percent"] = this._toPercentString(this._retainedSizeP ercent); | 585 var div = document.createElement("div"); |
| 586 div.className = "source-code event-properties"; | |
| 587 div.style.overflow = "visible"; | |
| 591 | 588 |
| 592 return this._enhanceData ? this._enhanceData(data) : data; | 589 this._prefixObjectCell(div); |
| 590 | |
| 591 var valueSpan = document.createElement("span"); | |
| 592 valueSpan.className = "value console-formatted-" + valueStyle; | |
| 593 valueSpan.textContent = value; | |
| 594 div.appendChild(valueSpan); | |
| 595 | |
| 596 var idSpan = document.createElement("span"); | |
| 597 idSpan.className = "console-formatted-id"; | |
| 598 idSpan.textContent = " @" + this.snapshotNodeId; | |
| 599 div.appendChild(idSpan); | |
| 600 | |
| 601 cell.appendChild(div); | |
| 602 cell.classList.add("disclosure"); | |
| 603 if (this.depth) | |
| 604 cell.style.setProperty("padding-left", (this.depth * this.dataGrid.i ndentWidth) + "px"); | |
| 605 cell.heapSnapshotNode = this; | |
| 606 return cell; | |
| 607 }, | |
| 608 | |
| 609 _prefixObjectCell: function(div) | |
| 610 { | |
| 593 }, | 611 }, |
| 594 | 612 |
| 595 queryObjectContent: function(callback, objectGroupName) | 613 queryObjectContent: function(callback, objectGroupName) |
| 596 { | 614 { |
| 597 /** | 615 /** |
| 598 * @param {?Protocol.Error} error | 616 * @param {?Protocol.Error} error |
| 599 * @param {!RuntimeAgent.RemoteObject} object | 617 * @param {!RuntimeAgent.RemoteObject} object |
| 600 */ | 618 */ |
| 601 function formatResult(error, object) | 619 function formatResult(error, object) |
| 602 { | 620 { |
| 603 if (!error && object.type) | 621 if (!error && object.type) |
| 604 callback(WebInspector.RemoteObject.fromPayload(object), !!error) ; | 622 callback(WebInspector.RemoteObject.fromPayload(object), !!error) ; |
| 605 else | 623 else |
| 606 callback(WebInspector.RemoteObject.fromPrimitiveValue(WebInspect or.UIString("Preview is not available"))); | 624 callback(WebInspector.RemoteObject.fromPrimitiveValue(WebInspect or.UIString("Preview is not available"))); |
| 607 } | 625 } |
| 608 | 626 |
| 609 if (this._type === "string") | 627 if (this._type === "string") |
| 610 callback(WebInspector.RemoteObject.fromPrimitiveValue(this._name)); | 628 callback(WebInspector.RemoteObject.fromPrimitiveValue(this._name)); |
| 611 else | 629 else |
| 612 HeapProfilerAgent.getObjectByHeapObjectId(String(this.snapshotNodeId ), objectGroupName, formatResult); | 630 HeapProfilerAgent.getObjectByHeapObjectId(String(this.snapshotNodeId ), objectGroupName, formatResult); |
| 613 }, | 631 }, |
| 614 | 632 |
| 615 get _retainedSizePercent() | |
| 616 { | |
| 617 return this._retainedSize / this.dataGrid.snapshot.totalSize * 100.0; | |
| 618 }, | |
| 619 | |
| 620 get _shallowSizePercent() | |
| 621 { | |
| 622 return this._shallowSize / this.dataGrid.snapshot.totalSize * 100.0; | |
| 623 }, | |
| 624 | |
| 625 updateHasChildren: function() | 633 updateHasChildren: function() |
| 626 { | 634 { |
| 627 /** | 635 /** |
| 628 * @this {WebInspector.HeapSnapshotGenericObjectNode} | 636 * @this {WebInspector.HeapSnapshotGenericObjectNode} |
| 629 */ | 637 */ |
| 630 function isEmptyCallback(isEmpty) | 638 function isEmptyCallback(isEmpty) |
| 631 { | 639 { |
| 632 this.hasChildren = !isEmpty; | 640 this.hasChildren = !isEmpty; |
| 633 } | 641 } |
| 634 this._provider().isEmpty(isEmptyCallback.bind(this)); | 642 this._provider().isEmpty(isEmptyCallback.bind(this)); |
| (...skipping 17 matching lines...) Expand all Loading... | |
| 652 } else | 660 } else |
| 653 return fullName; | 661 return fullName; |
| 654 }, | 662 }, |
| 655 | 663 |
| 656 __proto__: WebInspector.HeapSnapshotGridNode.prototype | 664 __proto__: WebInspector.HeapSnapshotGridNode.prototype |
| 657 } | 665 } |
| 658 | 666 |
| 659 /** | 667 /** |
| 660 * @constructor | 668 * @constructor |
| 661 * @extends {WebInspector.HeapSnapshotGenericObjectNode} | 669 * @extends {WebInspector.HeapSnapshotGenericObjectNode} |
| 662 * @param {!WebInspector.HeapSnapshotSortableDataGrid} tree | 670 * @param {!WebInspector.HeapSnapshotSortableDataGrid} dataGrid |
| 663 * @param {boolean} isFromBaseSnapshot | 671 * @param {!WebInspector.HeapSnapshotProxy} snapshot |
| 664 */ | 672 */ |
| 665 WebInspector.HeapSnapshotObjectNode = function(tree, isFromBaseSnapshot, edge, p arentGridNode) | 673 WebInspector.HeapSnapshotObjectNode = function(dataGrid, snapshot, edge, parentG ridNode) |
| 666 { | 674 { |
| 667 WebInspector.HeapSnapshotGenericObjectNode.call(this, tree, edge.node); | 675 WebInspector.HeapSnapshotGenericObjectNode.call(this, dataGrid, edge.node); |
| 668 this._referenceName = edge.name; | 676 this._referenceName = edge.name; |
| 669 this._referenceType = edge.type; | 677 this._referenceType = edge.type; |
| 670 this._distance = edge.distance; | 678 this.showRetainingEdges = dataGrid.showRetainingEdges; |
| 671 this.showRetainingEdges = tree.showRetainingEdges; | 679 this._snapshot = snapshot; |
| 672 this._isFromBaseSnapshot = isFromBaseSnapshot; | |
| 673 | 680 |
| 674 this._parentGridNode = parentGridNode; | 681 this._parentGridNode = parentGridNode; |
| 675 this._cycledWithAncestorGridNode = this._findAncestorWithSameSnapshotNodeId( ); | 682 this._cycledWithAncestorGridNode = this._findAncestorWithSameSnapshotNodeId( ); |
| 676 if (!this._cycledWithAncestorGridNode) | 683 if (!this._cycledWithAncestorGridNode) |
| 677 this.updateHasChildren(); | 684 this.updateHasChildren(); |
| 685 | |
| 686 var data = this.data; | |
| 687 data["count"] = ""; | |
| 688 data["addedCount"] = ""; | |
| 689 data["removedCount"] = ""; | |
| 690 data["countDelta"] = ""; | |
| 691 data["addedSize"] = ""; | |
| 692 data["removedSize"] = ""; | |
| 693 data["sizeDelta"] = ""; | |
| 678 } | 694 } |
| 679 | 695 |
| 680 WebInspector.HeapSnapshotObjectNode.prototype = { | 696 WebInspector.HeapSnapshotObjectNode.prototype = { |
| 681 /** | 697 /** |
| 698 * @return {?{snapshot:!WebInspector.HeapSnapshotProxy, snapshotNodeIndex:nu mber}} | |
| 699 */ | |
| 700 retainersDataSource: function() | |
| 701 { | |
| 702 return {snapshot: this._snapshot, snapshotNodeIndex: this.snapshotNodeIn dex}; | |
| 703 }, | |
| 704 | |
| 705 /** | |
| 682 * @return {!WebInspector.HeapSnapshotProviderProxy} | 706 * @return {!WebInspector.HeapSnapshotProviderProxy} |
| 683 */ | 707 */ |
| 684 createProvider: function() | 708 createProvider: function() |
| 685 { | 709 { |
| 686 var tree = this._dataGrid; | 710 var tree = this._dataGrid; |
| 687 var showHiddenData = WebInspector.settings.showAdvancedHeapSnapshotPrope rties.get(); | 711 var showHiddenData = WebInspector.settings.showAdvancedHeapSnapshotPrope rties.get(); |
| 688 var snapshot = this._isFromBaseSnapshot ? tree.baseSnapshot : tree.snaps hot; | |
| 689 if (this.showRetainingEdges) | 712 if (this.showRetainingEdges) |
| 690 return snapshot.createRetainingEdgesProvider(this.snapshotNodeIndex, showHiddenData); | 713 return this._snapshot.createRetainingEdgesProvider(this.snapshotNode Index, showHiddenData); |
| 691 else | 714 else |
| 692 return snapshot.createEdgesProvider(this.snapshotNodeIndex, showHidd enData); | 715 return this._snapshot.createEdgesProvider(this.snapshotNodeIndex, sh owHiddenData); |
| 693 }, | 716 }, |
| 694 | 717 |
| 695 _findAncestorWithSameSnapshotNodeId: function() | 718 _findAncestorWithSameSnapshotNodeId: function() |
| 696 { | 719 { |
| 697 var ancestor = this._parentGridNode; | 720 var ancestor = this._parentGridNode; |
| 698 while (ancestor) { | 721 while (ancestor) { |
| 699 if (ancestor.snapshotNodeId === this.snapshotNodeId) | 722 if (ancestor.snapshotNodeId === this.snapshotNodeId) |
| 700 return ancestor; | 723 return ancestor; |
| 701 ancestor = ancestor._parentGridNode; | 724 ancestor = ancestor._parentGridNode; |
| 702 } | 725 } |
| 703 return null; | 726 return null; |
| 704 }, | 727 }, |
| 705 | 728 |
| 706 _createChildNode: function(item) | 729 _createChildNode: function(item) |
| 707 { | 730 { |
| 708 return new WebInspector.HeapSnapshotObjectNode(this._dataGrid, this._isF romBaseSnapshot, item, this); | 731 return new WebInspector.HeapSnapshotObjectNode(this._dataGrid, this._sna pshot, item, this); |
| 709 }, | 732 }, |
| 710 | 733 |
| 711 _childHashForEntity: function(edge) | 734 _childHashForEntity: function(edge) |
| 712 { | 735 { |
| 713 var prefix = this.showRetainingEdges ? edge.node.id + "#" : ""; | 736 var prefix = this.showRetainingEdges ? edge.node.id + "#" : ""; |
| 714 return prefix + edge.type + "#" + edge.name; | 737 return prefix + edge.type + "#" + edge.name; |
| 715 }, | 738 }, |
| 716 | 739 |
| 717 _childHashForNode: function(childNode) | 740 _childHashForNode: function(childNode) |
| 718 { | 741 { |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 730 var sortFields = { | 753 var sortFields = { |
| 731 object: ["!edgeName", sortAscending, "retainedSize", false], | 754 object: ["!edgeName", sortAscending, "retainedSize", false], |
| 732 count: ["!edgeName", true, "retainedSize", false], | 755 count: ["!edgeName", true, "retainedSize", false], |
| 733 shallowSize: ["selfSize", sortAscending, "!edgeName", true], | 756 shallowSize: ["selfSize", sortAscending, "!edgeName", true], |
| 734 retainedSize: ["retainedSize", sortAscending, "!edgeName", true], | 757 retainedSize: ["retainedSize", sortAscending, "!edgeName", true], |
| 735 distance: ["distance", sortAscending, "_name", true] | 758 distance: ["distance", sortAscending, "_name", true] |
| 736 }[sortColumnIdentifier] || ["!edgeName", true, "retainedSize", false]; | 759 }[sortColumnIdentifier] || ["!edgeName", true, "retainedSize", false]; |
| 737 return WebInspector.HeapSnapshotGridNode.createComparator(sortFields); | 760 return WebInspector.HeapSnapshotGridNode.createComparator(sortFields); |
| 738 }, | 761 }, |
| 739 | 762 |
| 740 _emptyData: function() | 763 _prefixObjectCell: function(div) |
| 741 { | |
| 742 return { count: "", addedCount: "", removedCount: "", countDelta: "", ad dedSize: "", removedSize: "", sizeDelta: "" }; | |
| 743 }, | |
| 744 | |
| 745 _enhanceData: function(data) | |
| 746 { | 764 { |
| 747 var name = this._referenceName; | 765 var name = this._referenceName; |
| 748 if (name === "") name = "(empty)"; | 766 if (name === "") name = "(empty)"; |
| 749 var nameClass = "name"; | 767 var nameClass = "name"; |
| 750 switch (this._referenceType) { | 768 switch (this._referenceType) { |
| 751 case "context": | 769 case "context": |
| 752 nameClass = "console-formatted-number"; | 770 nameClass = "console-formatted-number"; |
| 753 break; | 771 break; |
| 754 case "internal": | 772 case "internal": |
| 755 case "hidden": | 773 case "hidden": |
| 756 case "weak": | 774 case "weak": |
| 757 nameClass = "console-formatted-null"; | 775 nameClass = "console-formatted-null"; |
| 758 break; | 776 break; |
| 759 case "element": | 777 case "element": |
| 760 name = "[" + name + "]"; | 778 name = "[" + name + "]"; |
| 761 break; | 779 break; |
| 762 } | 780 } |
| 763 data["object"].nameClass = nameClass; | |
| 764 data["object"].name = name; | |
| 765 data["distance"] = this._distance; | |
| 766 return data; | |
| 767 }, | |
| 768 | 781 |
| 769 _prefixObjectCell: function(div, data) | |
| 770 { | |
| 771 if (this._cycledWithAncestorGridNode) | 782 if (this._cycledWithAncestorGridNode) |
| 772 div.className += " cycled-ancessor-node"; | 783 div.className += " cycled-ancessor-node"; |
| 773 | 784 |
| 774 var nameSpan = document.createElement("span"); | 785 var nameSpan = document.createElement("span"); |
| 775 nameSpan.className = data.nameClass; | 786 nameSpan.className = nameClass; |
| 776 nameSpan.textContent = data.name; | 787 nameSpan.textContent = name; |
| 777 div.appendChild(nameSpan); | 788 div.appendChild(nameSpan); |
| 778 | 789 |
| 779 var separatorSpan = document.createElement("span"); | 790 var separatorSpan = document.createElement("span"); |
| 780 separatorSpan.className = "grayed"; | 791 separatorSpan.className = "grayed"; |
| 781 separatorSpan.textContent = this.showRetainingEdges ? " in " : " :: "; | 792 separatorSpan.textContent = this.showRetainingEdges ? " in " : " :: "; |
| 782 div.appendChild(separatorSpan); | 793 div.appendChild(separatorSpan); |
| 783 }, | 794 }, |
| 784 | 795 |
| 785 __proto__: WebInspector.HeapSnapshotGenericObjectNode.prototype | 796 __proto__: WebInspector.HeapSnapshotGenericObjectNode.prototype |
| 786 } | 797 } |
| 787 | 798 |
| 788 /** | 799 /** |
| 789 * @constructor | 800 * @constructor |
| 790 * @extends {WebInspector.HeapSnapshotGenericObjectNode} | 801 * @extends {WebInspector.HeapSnapshotGenericObjectNode} |
| 802 * @param {!WebInspector.HeapSnapshotSortableDataGrid} dataGrid | |
| 803 * @param {!WebInspector.HeapSnapshotProxy} snapshot | |
| 804 * @param {boolean} isDeletedNode | |
| 791 */ | 805 */ |
| 792 WebInspector.HeapSnapshotInstanceNode = function(tree, baseSnapshot, snapshot, n ode) | 806 WebInspector.HeapSnapshotInstanceNode = function(dataGrid, snapshot, node, isDel etedNode) |
| 793 { | 807 { |
| 794 WebInspector.HeapSnapshotGenericObjectNode.call(this, tree, node); | 808 WebInspector.HeapSnapshotGenericObjectNode.call(this, dataGrid, node); |
| 795 this._baseSnapshotOrSnapshot = baseSnapshot || snapshot; | 809 this._baseSnapshotOrSnapshot = snapshot; |
| 796 this._isDeletedNode = !!baseSnapshot; | 810 this._isDeletedNode = isDeletedNode; |
| 797 this.updateHasChildren(); | 811 this.updateHasChildren(); |
| 812 | |
| 813 var data = this.data; | |
| 814 data["count"] = ""; | |
| 815 data["countDelta"] = ""; | |
| 816 data["sizeDelta"] = ""; | |
| 817 if (this._isDeletedNode) { | |
| 818 data["addedCount"] = ""; | |
| 819 data["addedSize"] = ""; | |
| 820 data["removedCount"] = "\u2022"; | |
| 821 data["removedSize"] = Number.withThousandsSeparator(this._shallowSize); | |
| 822 } else { | |
| 823 data["addedCount"] = "\u2022"; | |
| 824 data["addedSize"] = Number.withThousandsSeparator(this._shallowSize); | |
| 825 data["removedCount"] = ""; | |
| 826 data["removedSize"] = ""; | |
| 827 } | |
| 798 }; | 828 }; |
| 799 | 829 |
| 800 WebInspector.HeapSnapshotInstanceNode.prototype = { | 830 WebInspector.HeapSnapshotInstanceNode.prototype = { |
| 801 /** | 831 /** |
| 832 * @return {?{snapshot:!WebInspector.HeapSnapshotProxy, snapshotNodeIndex:nu mber}} | |
| 833 */ | |
| 834 retainersDataSource: function() | |
| 835 { | |
| 836 return {snapshot: this._baseSnapshotOrSnapshot, snapshotNodeIndex: this. snapshotNodeIndex}; | |
| 837 }, | |
| 838 | |
| 839 /** | |
| 802 * @return {!WebInspector.HeapSnapshotProviderProxy} | 840 * @return {!WebInspector.HeapSnapshotProviderProxy} |
| 803 */ | 841 */ |
| 804 createProvider: function() | 842 createProvider: function() |
| 805 { | 843 { |
| 806 var showHiddenData = WebInspector.settings.showAdvancedHeapSnapshotPrope rties.get(); | 844 var showHiddenData = WebInspector.settings.showAdvancedHeapSnapshotPrope rties.get(); |
| 807 return this._baseSnapshotOrSnapshot.createEdgesProvider( | 845 return this._baseSnapshotOrSnapshot.createEdgesProvider( |
| 808 this.snapshotNodeIndex, | 846 this.snapshotNodeIndex, |
| 809 showHiddenData); | 847 showHiddenData); |
| 810 }, | 848 }, |
| 811 | 849 |
| 812 _createChildNode: function(item) | 850 _createChildNode: function(item) |
| 813 { | 851 { |
| 814 return new WebInspector.HeapSnapshotObjectNode(this._dataGrid, this._isD eletedNode, item, null); | 852 return new WebInspector.HeapSnapshotObjectNode(this._dataGrid, this._bas eSnapshotOrSnapshot, item, null); |
| 815 }, | 853 }, |
| 816 | 854 |
| 817 _childHashForEntity: function(edge) | 855 _childHashForEntity: function(edge) |
| 818 { | 856 { |
| 819 return edge.type + "#" + edge.name; | 857 return edge.type + "#" + edge.name; |
| 820 }, | 858 }, |
| 821 | 859 |
| 822 _childHashForNode: function(childNode) | 860 _childHashForNode: function(childNode) |
| 823 { | 861 { |
| 824 return childNode._referenceType + "#" + childNode._referenceName; | 862 return childNode._referenceType + "#" + childNode._referenceName; |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 836 distance: ["distance", sortAscending, "retainedSize", false], | 874 distance: ["distance", sortAscending, "retainedSize", false], |
| 837 count: ["!edgeName", true, "retainedSize", false], | 875 count: ["!edgeName", true, "retainedSize", false], |
| 838 addedSize: ["selfSize", sortAscending, "!edgeName", true], | 876 addedSize: ["selfSize", sortAscending, "!edgeName", true], |
| 839 removedSize: ["selfSize", sortAscending, "!edgeName", true], | 877 removedSize: ["selfSize", sortAscending, "!edgeName", true], |
| 840 shallowSize: ["selfSize", sortAscending, "!edgeName", true], | 878 shallowSize: ["selfSize", sortAscending, "!edgeName", true], |
| 841 retainedSize: ["retainedSize", sortAscending, "!edgeName", true] | 879 retainedSize: ["retainedSize", sortAscending, "!edgeName", true] |
| 842 }[sortColumnIdentifier] || ["!edgeName", true, "retainedSize", false]; | 880 }[sortColumnIdentifier] || ["!edgeName", true, "retainedSize", false]; |
| 843 return WebInspector.HeapSnapshotGridNode.createComparator(sortFields); | 881 return WebInspector.HeapSnapshotGridNode.createComparator(sortFields); |
| 844 }, | 882 }, |
| 845 | 883 |
| 846 _emptyData: function() | |
| 847 { | |
| 848 return {count: "", countDelta: "", sizeDelta: ""}; | |
| 849 }, | |
| 850 | |
| 851 _enhanceData: function(data) | |
| 852 { | |
| 853 if (this._isDeletedNode) { | |
| 854 data["addedCount"] = ""; | |
| 855 data["addedSize"] = ""; | |
| 856 data["removedCount"] = "\u2022"; | |
| 857 data["removedSize"] = Number.withThousandsSeparator(this._shallowSiz e); | |
| 858 } else { | |
| 859 data["addedCount"] = "\u2022"; | |
| 860 data["addedSize"] = Number.withThousandsSeparator(this._shallowSize) ; | |
| 861 data["removedCount"] = ""; | |
| 862 data["removedSize"] = ""; | |
| 863 } | |
| 864 return data; | |
| 865 }, | |
| 866 | |
| 867 get isDeletedNode() | |
| 868 { | |
| 869 return this._isDeletedNode; | |
| 870 }, | |
| 871 | |
| 872 __proto__: WebInspector.HeapSnapshotGenericObjectNode.prototype | 884 __proto__: WebInspector.HeapSnapshotGenericObjectNode.prototype |
| 873 } | 885 } |
| 874 | 886 |
| 875 /** | 887 /** |
| 876 * @constructor | 888 * @constructor |
| 889 * @param {!WebInspector.HeapSnapshotConstructorsDataGrid} dataGrid | |
| 877 * @param {string} className | 890 * @param {string} className |
| 878 * @param {!WebInspector.HeapSnapshotCommon.Aggregate} aggregate | 891 * @param {!WebInspector.HeapSnapshotCommon.Aggregate} aggregate |
| 879 * @param {!WebInspector.HeapSnapshotCommon.NodeFilter} nodeFilter | 892 * @param {!WebInspector.HeapSnapshotCommon.NodeFilter} nodeFilter |
| 880 * @extends {WebInspector.HeapSnapshotGridNode} | 893 * @extends {WebInspector.HeapSnapshotGridNode} |
| 881 */ | 894 */ |
| 882 WebInspector.HeapSnapshotConstructorNode = function(tree, className, aggregate, nodeFilter) | 895 WebInspector.HeapSnapshotConstructorNode = function(dataGrid, className, aggrega te, nodeFilter) |
| 883 { | 896 { |
| 884 WebInspector.HeapSnapshotGridNode.call(this, tree, aggregate.count > 0); | 897 WebInspector.HeapSnapshotGridNode.call(this, dataGrid, aggregate.count > 0); |
| 885 this._name = className; | 898 this._name = className; |
| 886 this._nodeFilter = nodeFilter; | 899 this._nodeFilter = nodeFilter; |
| 887 this._distance = aggregate.distance; | 900 this._distance = aggregate.distance; |
| 888 this._count = aggregate.count; | 901 this._count = aggregate.count; |
| 889 this._shallowSize = aggregate.self; | 902 this._shallowSize = aggregate.self; |
| 890 this._retainedSize = aggregate.maxRet; | 903 this._retainedSize = aggregate.maxRet; |
|
loislo
2014/03/26 08:36:04
ditto
yurys
2014/03/26 09:25:09
Same as above.
| |
| 904 | |
| 905 var snapshot = dataGrid.snapshot; | |
| 906 var countPercent = this._count / snapshot.nodeCount * 100.0; | |
| 907 var retainedSizePercent = this._retainedSize / snapshot.totalSize * 100.0; | |
| 908 var shallowSizePercent = this._shallowSize / snapshot.totalSize * 100.0; | |
| 909 | |
| 910 this.data = { | |
| 911 "object": className, | |
| 912 "count": Number.withThousandsSeparator(this._count), | |
| 913 "distance": this._distance, | |
| 914 "shallowSize": Number.withThousandsSeparator(this._shallowSize), | |
| 915 "retainedSize": Number.withThousandsSeparator(this._retainedSize), | |
| 916 "count-percent": this._toPercentString(countPercent), | |
| 917 "shallowSize-percent": this._toPercentString(shallowSizePercent), | |
| 918 "retainedSize-percent": this._toPercentString(retainedSizePercent) | |
| 919 }; | |
| 891 } | 920 } |
| 892 | 921 |
| 893 WebInspector.HeapSnapshotConstructorNode.prototype = { | 922 WebInspector.HeapSnapshotConstructorNode.prototype = { |
| 894 /** | 923 /** |
| 895 * @override | 924 * @override |
| 896 * @return {!WebInspector.HeapSnapshotProviderProxy} | 925 * @return {!WebInspector.HeapSnapshotProviderProxy} |
| 897 */ | 926 */ |
| 898 createProvider: function() | 927 createProvider: function() |
| 899 { | 928 { |
| 900 return this._dataGrid.snapshot.createNodesProviderForClass(this._name, t his._nodeFilter) | 929 return this._dataGrid.snapshot.createNodesProviderForClass(this._name, t his._nodeFilter) |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 960 createCell: function(columnIdentifier) | 989 createCell: function(columnIdentifier) |
| 961 { | 990 { |
| 962 var cell = columnIdentifier !== "object" ? this._createValueCell(columnI dentifier) : WebInspector.HeapSnapshotGridNode.prototype.createCell.call(this, c olumnIdentifier); | 991 var cell = columnIdentifier !== "object" ? this._createValueCell(columnI dentifier) : WebInspector.HeapSnapshotGridNode.prototype.createCell.call(this, c olumnIdentifier); |
| 963 if (this._searchMatched) | 992 if (this._searchMatched) |
| 964 cell.classList.add("highlight"); | 993 cell.classList.add("highlight"); |
| 965 return cell; | 994 return cell; |
| 966 }, | 995 }, |
| 967 | 996 |
| 968 _createChildNode: function(item) | 997 _createChildNode: function(item) |
| 969 { | 998 { |
| 970 return new WebInspector.HeapSnapshotInstanceNode(this._dataGrid, null, t his._dataGrid.snapshot, item); | 999 return new WebInspector.HeapSnapshotInstanceNode(this._dataGrid, this._d ataGrid.snapshot, item, false); |
| 971 }, | 1000 }, |
| 972 | 1001 |
| 973 /** | 1002 /** |
| 974 * @return {!WebInspector.HeapSnapshotCommon.ComparatorConfig} | 1003 * @return {!WebInspector.HeapSnapshotCommon.ComparatorConfig} |
| 975 */ | 1004 */ |
| 976 comparator: function() | 1005 comparator: function() |
| 977 { | 1006 { |
| 978 var sortAscending = this._dataGrid.isSortOrderAscending(); | 1007 var sortAscending = this._dataGrid.isSortOrderAscending(); |
| 979 var sortColumnIdentifier = this._dataGrid.sortColumnIdentifier(); | 1008 var sortColumnIdentifier = this._dataGrid.sortColumnIdentifier(); |
| 980 var sortFields = { | 1009 var sortFields = { |
| 981 object: ["id", sortAscending, "retainedSize", false], | 1010 object: ["id", sortAscending, "retainedSize", false], |
| 982 distance: ["distance", sortAscending, "retainedSize", false], | 1011 distance: ["distance", sortAscending, "retainedSize", false], |
| 983 count: ["id", true, "retainedSize", false], | 1012 count: ["id", true, "retainedSize", false], |
| 984 shallowSize: ["selfSize", sortAscending, "id", true], | 1013 shallowSize: ["selfSize", sortAscending, "id", true], |
| 985 retainedSize: ["retainedSize", sortAscending, "id", true] | 1014 retainedSize: ["retainedSize", sortAscending, "id", true] |
| 986 }[sortColumnIdentifier]; | 1015 }[sortColumnIdentifier]; |
| 987 return WebInspector.HeapSnapshotGridNode.createComparator(sortFields); | 1016 return WebInspector.HeapSnapshotGridNode.createComparator(sortFields); |
| 988 }, | 1017 }, |
| 989 | 1018 |
| 990 _childHashForEntity: function(node) | 1019 _childHashForEntity: function(node) |
| 991 { | 1020 { |
| 992 return node.id; | 1021 return node.id; |
| 993 }, | 1022 }, |
| 994 | 1023 |
| 995 _childHashForNode: function(childNode) | 1024 _childHashForNode: function(childNode) |
| 996 { | 1025 { |
| 997 return childNode.snapshotNodeId; | 1026 return childNode.snapshotNodeId; |
| 998 }, | 1027 }, |
| 999 | 1028 |
| 1000 get data() | |
| 1001 { | |
| 1002 var data = { object: this._name }; | |
| 1003 data["count"] = Number.withThousandsSeparator(this._count); | |
| 1004 data["distance"] = this._distance; | |
| 1005 data["shallowSize"] = Number.withThousandsSeparator(this._shallowSize); | |
| 1006 data["retainedSize"] = Number.withThousandsSeparator(this._retainedSize) ; | |
| 1007 data["count-percent"] = this._toPercentString(this._countPercent); | |
| 1008 data["shallowSize-percent"] = this._toPercentString(this._shallowSizePer cent); | |
| 1009 data["retainedSize-percent"] = this._toPercentString(this._retainedSizeP ercent); | |
| 1010 return data; | |
| 1011 }, | |
| 1012 | |
| 1013 get _countPercent() | |
| 1014 { | |
| 1015 return this._count / this.dataGrid.snapshot.nodeCount * 100.0; | |
| 1016 }, | |
| 1017 | |
| 1018 get _retainedSizePercent() | |
| 1019 { | |
| 1020 return this._retainedSize / this.dataGrid.snapshot.totalSize * 100.0; | |
| 1021 }, | |
| 1022 | |
| 1023 get _shallowSizePercent() | |
| 1024 { | |
| 1025 return this._shallowSize / this.dataGrid.snapshot.totalSize * 100.0; | |
| 1026 }, | |
| 1027 | |
| 1028 __proto__: WebInspector.HeapSnapshotGridNode.prototype | 1029 __proto__: WebInspector.HeapSnapshotGridNode.prototype |
| 1029 } | 1030 } |
| 1030 | 1031 |
| 1031 | 1032 |
| 1032 /** | 1033 /** |
| 1033 * @constructor | 1034 * @constructor |
| 1034 * @implements {WebInspector.HeapSnapshotGridNode.ChildrenProvider} | 1035 * @implements {WebInspector.HeapSnapshotGridNode.ChildrenProvider} |
| 1035 * @param {!WebInspector.HeapSnapshotProviderProxy} addedNodesProvider | 1036 * @param {!WebInspector.HeapSnapshotProviderProxy} addedNodesProvider |
| 1036 * @param {!WebInspector.HeapSnapshotProviderProxy} deletedNodesProvider | 1037 * @param {!WebInspector.HeapSnapshotProviderProxy} deletedNodesProvider |
| 1037 */ | 1038 */ |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1139 function afterSort() | 1140 function afterSort() |
| 1140 { | 1141 { |
| 1141 this._deletedNodesProvider.sortAndRewind(comparator, callback); | 1142 this._deletedNodesProvider.sortAndRewind(comparator, callback); |
| 1142 } | 1143 } |
| 1143 this._addedNodesProvider.sortAndRewind(comparator, afterSort.bind(this)) ; | 1144 this._addedNodesProvider.sortAndRewind(comparator, afterSort.bind(this)) ; |
| 1144 } | 1145 } |
| 1145 }; | 1146 }; |
| 1146 | 1147 |
| 1147 /** | 1148 /** |
| 1148 * @constructor | 1149 * @constructor |
| 1150 * @param {!WebInspector.HeapSnapshotDiffDataGrid} dataGrid | |
| 1149 * @param {string} className | 1151 * @param {string} className |
| 1150 * @param {!WebInspector.HeapSnapshotCommon.DiffForClass} diffForClass | 1152 * @param {!WebInspector.HeapSnapshotCommon.DiffForClass} diffForClass |
| 1151 * @extends {WebInspector.HeapSnapshotGridNode} | 1153 * @extends {WebInspector.HeapSnapshotGridNode} |
| 1152 */ | 1154 */ |
| 1153 WebInspector.HeapSnapshotDiffNode = function(tree, className, diffForClass) | 1155 WebInspector.HeapSnapshotDiffNode = function(dataGrid, className, diffForClass) |
| 1154 { | 1156 { |
| 1155 WebInspector.HeapSnapshotGridNode.call(this, tree, true); | 1157 WebInspector.HeapSnapshotGridNode.call(this, dataGrid, true); |
| 1156 this._name = className; | 1158 this._name = className; |
| 1157 | |
| 1158 this._addedCount = diffForClass.addedCount; | 1159 this._addedCount = diffForClass.addedCount; |
| 1159 this._removedCount = diffForClass.removedCount; | 1160 this._removedCount = diffForClass.removedCount; |
| 1160 this._countDelta = diffForClass.countDelta; | 1161 this._countDelta = diffForClass.countDelta; |
|
loislo
2014/03/26 08:36:04
looks like we don't need _countDelta, _addedSize,
| |
| 1161 this._addedSize = diffForClass.addedSize; | 1162 this._addedSize = diffForClass.addedSize; |
| 1162 this._removedSize = diffForClass.removedSize; | 1163 this._removedSize = diffForClass.removedSize; |
| 1163 this._sizeDelta = diffForClass.sizeDelta; | 1164 this._sizeDelta = diffForClass.sizeDelta; |
| 1164 this._deletedIndexes = diffForClass.deletedIndexes; | 1165 this._deletedIndexes = diffForClass.deletedIndexes; |
| 1166 this.data = { | |
| 1167 "object": className, | |
| 1168 "addedCount": Number.withThousandsSeparator(this._addedCount), | |
| 1169 "removedCount": Number.withThousandsSeparator(this._removedCount), | |
| 1170 "countDelta": this._signForDelta(this._countDelta) + Number.withThousan dsSeparator(Math.abs(this._countDelta)), | |
| 1171 "addedSize": Number.withThousandsSeparator(this._addedSize), | |
| 1172 "removedSize": Number.withThousandsSeparator(this._removedSize), | |
| 1173 "sizeDelta": this._signForDelta(this._sizeDelta) + Number.withThousandsS eparator(Math.abs(this._sizeDelta)) | |
| 1174 }; | |
| 1165 } | 1175 } |
| 1166 | 1176 |
| 1167 WebInspector.HeapSnapshotDiffNode.prototype = { | 1177 WebInspector.HeapSnapshotDiffNode.prototype = { |
| 1168 /** | 1178 /** |
| 1169 * @override | 1179 * @override |
| 1170 * @return {!WebInspector.HeapSnapshotDiffNodesProvider} | 1180 * @return {!WebInspector.HeapSnapshotDiffNodesProvider} |
| 1171 */ | 1181 */ |
| 1172 createProvider: function() | 1182 createProvider: function() |
| 1173 { | 1183 { |
| 1174 var tree = this._dataGrid; | 1184 var tree = this._dataGrid; |
| 1175 return new WebInspector.HeapSnapshotDiffNodesProvider( | 1185 return new WebInspector.HeapSnapshotDiffNodesProvider( |
| 1176 tree.snapshot.createAddedNodesProvider(tree.baseSnapshot.uid, this._ name), | 1186 tree.snapshot.createAddedNodesProvider(tree.baseSnapshot.uid, this._ name), |
| 1177 tree.baseSnapshot.createDeletedNodesProvider(this._deletedIndexes), | 1187 tree.baseSnapshot.createDeletedNodesProvider(this._deletedIndexes), |
| 1178 this._addedCount, | 1188 this._addedCount, |
| 1179 this._removedCount); | 1189 this._removedCount); |
| 1180 }, | 1190 }, |
| 1181 | 1191 |
| 1182 _createChildNode: function(item) | 1192 _createChildNode: function(item) |
| 1183 { | 1193 { |
| 1184 if (item.isAddedNotRemoved) | 1194 if (item.isAddedNotRemoved) |
| 1185 return new WebInspector.HeapSnapshotInstanceNode(this._dataGrid, nul l, this._dataGrid.snapshot, item); | 1195 return new WebInspector.HeapSnapshotInstanceNode(this._dataGrid, thi s._dataGrid.snapshot, item, false); |
| 1186 else | 1196 else |
| 1187 return new WebInspector.HeapSnapshotInstanceNode(this._dataGrid, thi s._dataGrid.baseSnapshot, null, item); | 1197 return new WebInspector.HeapSnapshotInstanceNode(this._dataGrid, thi s._dataGrid.baseSnapshot, item, true); |
| 1188 }, | 1198 }, |
| 1189 | 1199 |
| 1190 _childHashForEntity: function(node) | 1200 _childHashForEntity: function(node) |
| 1191 { | 1201 { |
| 1192 return node.id; | 1202 return node.id; |
| 1193 }, | 1203 }, |
| 1194 | 1204 |
| 1195 _childHashForNode: function(childNode) | 1205 _childHashForNode: function(childNode) |
| 1196 { | 1206 { |
| 1197 return childNode.snapshotNodeId; | 1207 return childNode.snapshotNodeId; |
| (...skipping 29 matching lines...) Expand all Loading... | |
| 1227 _signForDelta: function(delta) | 1237 _signForDelta: function(delta) |
| 1228 { | 1238 { |
| 1229 if (delta === 0) | 1239 if (delta === 0) |
| 1230 return ""; | 1240 return ""; |
| 1231 if (delta > 0) | 1241 if (delta > 0) |
| 1232 return "+"; | 1242 return "+"; |
| 1233 else | 1243 else |
| 1234 return "\u2212"; // Math minus sign, same width as plus. | 1244 return "\u2212"; // Math minus sign, same width as plus. |
| 1235 }, | 1245 }, |
| 1236 | 1246 |
| 1237 get data() | |
| 1238 { | |
| 1239 var data = {object: this._name}; | |
| 1240 | |
| 1241 data["addedCount"] = Number.withThousandsSeparator(this._addedCount); | |
| 1242 data["removedCount"] = Number.withThousandsSeparator(this._removedCount) ; | |
| 1243 data["countDelta"] = this._signForDelta(this._countDelta) + Number.withT housandsSeparator(Math.abs(this._countDelta)); | |
| 1244 data["addedSize"] = Number.withThousandsSeparator(this._addedSize); | |
| 1245 data["removedSize"] = Number.withThousandsSeparator(this._removedSize); | |
| 1246 data["sizeDelta"] = this._signForDelta(this._sizeDelta) + Number.withTho usandsSeparator(Math.abs(this._sizeDelta)); | |
| 1247 | |
| 1248 return data; | |
| 1249 }, | |
| 1250 | |
| 1251 __proto__: WebInspector.HeapSnapshotGridNode.prototype | 1247 __proto__: WebInspector.HeapSnapshotGridNode.prototype |
| 1252 } | 1248 } |
| 1253 | 1249 |
| 1254 | 1250 |
| 1255 /** | 1251 /** |
| 1256 * @constructor | 1252 * @constructor |
| 1257 * @extends {WebInspector.HeapSnapshotGenericObjectNode} | 1253 * @extends {WebInspector.HeapSnapshotGenericObjectNode} |
| 1254 * @param {!WebInspector.HeapSnapshotSortableDataGrid} dataGrid | |
| 1258 */ | 1255 */ |
| 1259 WebInspector.HeapSnapshotDominatorObjectNode = function(tree, node) | 1256 WebInspector.HeapSnapshotDominatorObjectNode = function(dataGrid, node) |
| 1260 { | 1257 { |
| 1261 WebInspector.HeapSnapshotGenericObjectNode.call(this, tree, node); | 1258 WebInspector.HeapSnapshotGenericObjectNode.call(this, dataGrid, node); |
| 1262 this.updateHasChildren(); | 1259 this.updateHasChildren(); |
| 1263 }; | 1260 }; |
| 1264 | 1261 |
| 1265 WebInspector.HeapSnapshotDominatorObjectNode.prototype = { | 1262 WebInspector.HeapSnapshotDominatorObjectNode.prototype = { |
| 1266 /** | 1263 /** |
| 1267 * @override | 1264 * @override |
| 1268 * @return {!WebInspector.HeapSnapshotProviderProxy} | 1265 * @return {!WebInspector.HeapSnapshotProviderProxy} |
| 1269 */ | 1266 */ |
| 1270 createProvider: function() | 1267 createProvider: function() |
| 1271 { | 1268 { |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1336 var sortAscending = this._dataGrid.isSortOrderAscending(); | 1333 var sortAscending = this._dataGrid.isSortOrderAscending(); |
| 1337 var sortColumnIdentifier = this._dataGrid.sortColumnIdentifier(); | 1334 var sortColumnIdentifier = this._dataGrid.sortColumnIdentifier(); |
| 1338 var sortFields = { | 1335 var sortFields = { |
| 1339 object: ["id", sortAscending, "retainedSize", false], | 1336 object: ["id", sortAscending, "retainedSize", false], |
| 1340 shallowSize: ["selfSize", sortAscending, "id", true], | 1337 shallowSize: ["selfSize", sortAscending, "id", true], |
| 1341 retainedSize: ["retainedSize", sortAscending, "id", true] | 1338 retainedSize: ["retainedSize", sortAscending, "id", true] |
| 1342 }[sortColumnIdentifier]; | 1339 }[sortColumnIdentifier]; |
| 1343 return WebInspector.HeapSnapshotGridNode.createComparator(sortFields); | 1340 return WebInspector.HeapSnapshotGridNode.createComparator(sortFields); |
| 1344 }, | 1341 }, |
| 1345 | 1342 |
| 1346 _emptyData: function() | |
| 1347 { | |
| 1348 return {}; | |
| 1349 }, | |
| 1350 | |
| 1351 __proto__: WebInspector.HeapSnapshotGenericObjectNode.prototype | 1343 __proto__: WebInspector.HeapSnapshotGenericObjectNode.prototype |
| 1352 } | 1344 } |
| 1353 | 1345 |
| 1354 | 1346 |
| 1355 /** | 1347 /** |
| 1356 * @constructor | 1348 * @constructor |
| 1357 * @extends {WebInspector.DataGridNode} | 1349 * @extends {WebInspector.DataGridNode} |
| 1358 * @param {!WebInspector.AllocationDataGrid} dataGrid | 1350 * @param {!WebInspector.AllocationDataGrid} dataGrid |
| 1359 * @param {!WebInspector.HeapSnapshotCommon.SerializedAllocationNode} data | 1351 * @param {!WebInspector.HeapSnapshotCommon.SerializedAllocationNode} data |
| 1360 */ | 1352 */ |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1432 /** | 1424 /** |
| 1433 * @return {number} | 1425 * @return {number} |
| 1434 */ | 1426 */ |
| 1435 allocationNodeId: function() | 1427 allocationNodeId: function() |
| 1436 { | 1428 { |
| 1437 return this.data.id; | 1429 return this.data.id; |
| 1438 }, | 1430 }, |
| 1439 | 1431 |
| 1440 __proto__: WebInspector.DataGridNode.prototype | 1432 __proto__: WebInspector.DataGridNode.prototype |
| 1441 } | 1433 } |
| OLD | NEW |