Changeset 106665 in webkit


Ignore:
Timestamp:
Feb 3, 2012 8:50:16 AM (12 years ago)
Author:
commit-queue@webkit.org
Message:

Web Inspector: Retained size for classes is too conservative in heap profiler
https://bugs.webkit.org/show_bug.cgi?id=77726

Patch by Alexei Filippov <alexeif@chromium.org> on 2012-02-03
Reviewed by Yury Semikhatsky.

Makes retained size of all objects of particular class show correct value
in Summary view of heap profiler.

  • inspector/front-end/DetailedHeapshotGridNodes.js:

(WebInspector.HeapSnapshotConstructorNode.prototype.get data):

  • inspector/front-end/HeapSnapshot.js:

(WebInspector.HeapSnapshot.prototype._buildAggregates):
(WebInspector.HeapSnapshot.prototype._buildAggregates.forDominatedNodes):

Location:
trunk/Source/WebCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r106664 r106665  
     12012-02-03  Alexei Filippov  <alexeif@chromium.org>
     2
     3        Web Inspector: Retained size for classes is too conservative in heap profiler
     4        https://bugs.webkit.org/show_bug.cgi?id=77726
     5
     6        Reviewed by Yury Semikhatsky.
     7
     8        Makes retained size of all objects of particular class show correct value
     9        in Summary view of heap profiler.
     10
     11        * inspector/front-end/DetailedHeapshotGridNodes.js:
     12        (WebInspector.HeapSnapshotConstructorNode.prototype.get data):
     13        * inspector/front-end/HeapSnapshot.js:
     14        (WebInspector.HeapSnapshot.prototype._buildAggregates):
     15        (WebInspector.HeapSnapshot.prototype._buildAggregates.forDominatedNodes):
     16
    1172012-02-02  Alexander Pavlov  <apavlov@chromium.org>
    218
  • trunk/Source/WebCore/inspector/front-end/DetailedHeapshotGridNodes.js

    r106633 r106665  
    608608        data["count"] =  Number.withThousandsSeparator(this._count);
    609609        data["shallowSize"] = Number.withThousandsSeparator(this._shallowSize);
    610         data["retainedSize"] = Number.withThousandsSeparator(this._retainedSize) + "+";
     610        data["retainedSize"] = Number.withThousandsSeparator(this._retainedSize);
    611611        if (view._showPercentage) {
    612612            data["shallowSize-percent"] = this._toPercentString(this._shallowSizePercent);
  • trunk/Source/WebCore/inspector/front-end/HeapSnapshot.js

    r105865 r106665  
    916916    _buildAggregates: function(filter)
    917917    {
     918        function shouldSkip(node)
     919        {
     920            if (filter && !filter(node))
     921                return true;
     922            if (node.type !== "native" && node.selfSize === 0)
     923                return true;
     924            var className = node.className;
     925            if (className === "Document DOM tree")
     926                return true;
     927            if (className === "Detached DOM tree")
     928                return true;
     929            return false;
     930        }
     931
    918932        var aggregates = {};
    919933        for (var iter = this._allNodes; iter.hasNext(); iter.next()) {
    920934            var node = iter.node;
    921             if (filter && !filter(node))
    922                 continue;
    923             if (node.type !== "native" && node.selfSize === 0)
     935            if (shouldSkip(node))
    924936                continue;
    925937            var className = node.className;
    926             if (className === "Document DOM tree")
    927                 continue;
    928             if (className === "Detached DOM tree")
    929                 continue;
    930938            var nameMatters = node.type === "object" || node.type === "native";
    931939            if (!aggregates.hasOwnProperty(className))
     
    934942            ++clss.count;
    935943            clss.self += node.selfSize;
    936             if (node.retainedSize > clss.maxRet)
    937                 clss.maxRet = node.retainedSize;
    938944            clss.idxs.push(node.nodeIndex);
    939945        }
     946
     947        // Recursively visit dominators tree and sum up retained sizes
     948        // of topmost objects in each class.
     949        // This gives us retained sizes for classes.
     950        var seenClasses = {};
     951        var snapshot = this;
     952        function forDominatedNodes(nodeIndex)
     953        {
     954            var node = new WebInspector.HeapSnapshotNode(snapshot, nodeIndex);
     955            var className = node.className;
     956            var seen = !!seenClasses[className];
     957            if (!seen && className in aggregates && !shouldSkip(node)) {
     958                aggregates[className].maxRet += node.retainedSize;
     959                seenClasses[className] = true;
     960            }
     961            var dominatedNodes = snapshot._dominatedNodesOfNode(node);
     962            for (var i = 0; i < dominatedNodes.length; i++)
     963                forDominatedNodes(dominatedNodes.item(i));
     964            seenClasses[className] = seen;
     965        }
     966        forDominatedNodes(this._rootNodeIndex);
     967
    940968        // Shave off provisionally allocated space.
    941969        for (var className in aggregates)
Note: See TracChangeset for help on using the changeset viewer.