Changeset 142460 in webkit


Ignore:
Timestamp:
Feb 11, 2013 5:54:01 AM (11 years ago)
Author:
commit-queue@webkit.org
Message:

Web Inspector: Split Profiler domain in protocol into Profiler and HeapProfiler
https://bugs.webkit.org/show_bug.cgi?id=108653

Patch by Alexei Filippov <alph@chromium.org> on 2013-02-11
Reviewed by Yury Semikhatsky.

Currently CPU and heap profilers share the same domain 'Profiler' in the protocol.
In fact these two profile types have not too much in common. So put each into its own domain.
It should also help when Profiles panel gets split into several tools.
This is the phase 1 which adds InspectorHeapProfilerAgent but doesn't
change the original InspectorProfilerAgent.

PerformanceTests:

  • inspector/heap-snapshot-performance-test.js:

(test.performanceTest.cleanup):

Source/WebCore:

  • CMakeLists.txt:
  • GNUmakefile.list.am:
  • Target.pri:
  • WebCore.gypi:
  • WebCore.vcproj/WebCore.vcproj:
  • WebCore.vcxproj/WebCore.vcxproj:
  • WebCore.vcxproj/WebCore.vcxproj.filters:
  • WebCore.xcodeproj/project.pbxproj:
  • inspector/Inspector.json:
  • inspector/InspectorAllInOne.cpp:
  • inspector/InspectorController.cpp:

(WebCore::InspectorController::InspectorController):

  • inspector/InspectorHeapProfilerAgent.cpp: Added.

(WebCore):
(WebCore::InspectorHeapProfilerAgent::create):
(WebCore::InspectorHeapProfilerAgent::InspectorHeapProfilerAgent):
(WebCore::InspectorHeapProfilerAgent::~InspectorHeapProfilerAgent):
(WebCore::InspectorHeapProfilerAgent::resetState):
(WebCore::InspectorHeapProfilerAgent::resetFrontendProfiles):
(WebCore::InspectorHeapProfilerAgent::setFrontend):
(WebCore::InspectorHeapProfilerAgent::clearFrontend):
(WebCore::InspectorHeapProfilerAgent::restore):
(WebCore::InspectorHeapProfilerAgent::collectGarbage):
(WebCore::InspectorHeapProfilerAgent::createSnapshotHeader):
(WebCore::InspectorHeapProfilerAgent::hasHeapProfiler):
(WebCore::InspectorHeapProfilerAgent::getProfileHeaders):
(WebCore::InspectorHeapProfilerAgent::getHeapSnapshot):
(WebCore::InspectorHeapProfilerAgent::removeProfile):
(WebCore::InspectorHeapProfilerAgent::takeHeapSnapshot):
(WebCore::InspectorHeapProfilerAgent::getObjectByHeapObjectId):
(WebCore::InspectorHeapProfilerAgent::getHeapObjectId):
(WebCore::InspectorHeapProfilerAgent::reportMemoryUsage):

  • inspector/InspectorHeapProfilerAgent.h: Added.

(WebCore):
(InspectorHeapProfilerAgent):
(WebCore::InspectorHeapProfilerAgent::clearProfiles):

  • inspector/InspectorInstrumentation.cpp:

(WebCore):
(WebCore::InspectorInstrumentation::didCommitLoadImpl):

  • inspector/InstrumentingAgents.h:

(WebCore):
(InstrumentingAgents):
(WebCore::InstrumentingAgents::inspectorHeapProfilerAgent):
(WebCore::InstrumentingAgents::setInspectorHeapProfilerAgent):

  • inspector/WorkerInspectorController.cpp:

(WebCore::WorkerInspectorController::WorkerInspectorController):

  • inspector/front-end/HeapSnapshotDataGrids.js:
  • inspector/front-end/HeapSnapshotGridNodes.js:

(WebInspector.HeapSnapshotGenericObjectNode.prototype.queryObjectContent):

  • inspector/front-end/HeapSnapshotView.js:

(WebInspector.HeapProfileHeader.prototype.startSnapshotTransfer):
(WebInspector.HeapProfileHeader.prototype.saveToFile.onOpen):
(WebInspector.HeapProfileHeader.prototype.saveToFile):

  • inspector/front-end/ProfilesPanel.js:

(WebInspector.ProfilesPanel):
(WebInspector.ProfilesPanel.prototype._clearProfiles):
(WebInspector.ProfilesPanel.prototype._garbageCollectButtonClicked):
(WebInspector.ProfilesPanel.prototype._removeProfileHeader):
(WebInspector.ProfilesPanel.prototype._populateProfiles.var):
(WebInspector.ProfilesPanel.prototype._populateProfiles.populateCallback):
(WebInspector.ProfilesPanel.prototype._populateProfiles):
(WebInspector.ProfilesPanel.prototype.takeHeapSnapshot):
(WebInspector.ProfilesPanel.prototype.revealInView):
(WebInspector.HeapProfilerDispatcher):
(WebInspector.HeapProfilerDispatcher.prototype.addProfileHeader):
(WebInspector.HeapProfilerDispatcher.prototype.addHeapSnapshotChunk):
(WebInspector.HeapProfilerDispatcher.prototype.finishHeapSnapshot):
(WebInspector.HeapProfilerDispatcher.prototype.resetProfiles):
(WebInspector.HeapProfilerDispatcher.prototype.reportHeapSnapshotProgress):

  • inspector/front-end/TimelinePanel.js:

(WebInspector.TimelinePanel.prototype._garbageCollectButtonClicked):

  • inspector/front-end/inspector.js:

(WebInspector.doLoadedDone):

Source/WebKit/chromium:

  • src/WebDevToolsAgentImpl.cpp:

(WebKit::WebDevToolsAgent::shouldInterruptForMessage):

LayoutTests:

  • inspector-protocol/heap-profiler/resources/heap-snapshot-common.js:

(InspectorTest.takeHeapSnapshot.InspectorTest.eventHandler.string_appeared_here):
(InspectorTest.takeHeapSnapshot):

  • inspector-protocol/nmi-webaudio-leak-test.html:
  • inspector/profiler/heap-snapshot-get-profile-crash.html:
  • inspector/profiler/heap-snapshot-inspect-dom-wrapper.html:
  • inspector/profiler/heap-snapshot-loader.html:
  • inspector/profiler/heap-snapshot-test.js:

(initialize_HeapSnapshotTest):

Location:
trunk
Files:
2 added
32 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r142458 r142460  
     12013-02-11  Alexei Filippov  <alph@chromium.org>
     2
     3        Web Inspector: Split Profiler domain in protocol into Profiler and HeapProfiler
     4        https://bugs.webkit.org/show_bug.cgi?id=108653
     5
     6        Reviewed by Yury Semikhatsky.
     7
     8        Currently CPU and heap profilers share the same domain 'Profiler' in the protocol.
     9        In fact these two profile types have not too much in common. So put each into its own domain.
     10        It should also help when Profiles panel gets split into several tools.
     11        This is the phase 1 which adds InspectorHeapProfilerAgent but doesn't
     12        change the original InspectorProfilerAgent.
     13
     14        * inspector-protocol/heap-profiler/resources/heap-snapshot-common.js:
     15        (InspectorTest.takeHeapSnapshot.InspectorTest.eventHandler.string_appeared_here):
     16        (InspectorTest.takeHeapSnapshot):
     17        * inspector-protocol/nmi-webaudio-leak-test.html:
     18        * inspector/profiler/heap-snapshot-get-profile-crash.html:
     19        * inspector/profiler/heap-snapshot-inspect-dom-wrapper.html:
     20        * inspector/profiler/heap-snapshot-loader.html:
     21        * inspector/profiler/heap-snapshot-test.js:
     22        (initialize_HeapSnapshotTest):
     23
    1242013-02-11  Christophe Dumez  <ch.dumez@sisa.samsung.com>
    225
  • trunk/LayoutTests/inspector-protocol/heap-profiler/resources/heap-snapshot-common.js

    r141393 r142460  
    1010InspectorTest.takeHeapSnapshot = function(callback)
    1111{
    12     InspectorTest.eventHandler["Profiler.addProfileHeader"] = function(messageObject)
     12    InspectorTest.eventHandler["HeapProfiler.addProfileHeader"] = function(messageObject)
    1313    {
    1414        var profileId = messageObject["params"]["header"]["uid"];
    15         InspectorTest.sendCommand("Profiler.getHeapSnapshot", { "uid": profileId }, didGetHeapSnapshot);
     15        InspectorTest.sendCommand("HeapProfiler.getHeapSnapshot", { "uid": profileId }, didGetHeapSnapshot);
    1616
    1717        function didGetHeapSnapshot(messageObject)
     
    2323
    2424    var chunks = [];
    25     InspectorTest.eventHandler["Profiler.addHeapSnapshotChunk"] = function(messageObject)
     25    InspectorTest.eventHandler["HeapProfiler.addHeapSnapshotChunk"] = function(messageObject)
    2626    {
    2727        chunks.push(messageObject["params"]["chunk"]);
    2828    }
    2929
    30     InspectorTest.eventHandler["Profiler.finishHeapSnapshot"] = function(messageObject)
     30    InspectorTest.eventHandler["HeapProfiler.finishHeapSnapshot"] = function(messageObject)
    3131    {
    3232        var serializedSnapshot = chunks.join("");
     
    3636    }
    3737
    38     InspectorTest.sendCommand("Profiler.takeHeapSnapshot", {});
     38    InspectorTest.sendCommand("HeapProfiler.takeHeapSnapshot", {});
    3939}
  • trunk/LayoutTests/inspector-protocol/nmi-webaudio-leak-test.html

    r142239 r142460  
    6161    function iFrameNavigated(messageObject) {
    6262        InspectorTest.log("PASS: IFrame was navigated to resources/blank.html");
    63         InspectorTest.sendCommand('Profiler.collectGarbage', {}, function() { } );
     63        InspectorTest.sendCommand('HeapProfiler.collectGarbage', {}, function() { } );
    6464        InspectorTest.log("Action: Run GC and check Page.Audio data size");
    6565        InspectorTest.sendCommand('Memory.getProcessMemoryDistribution', {}, noAudioSharedData);
  • trunk/LayoutTests/inspector/profiler/heap-snapshot-get-profile-crash.html

    r139998 r142460  
    1515                next();
    1616            }
    17             ProfilerAgent.getHeapSnapshot(-1, finish);
     17            HeapProfilerAgent.getHeapSnapshot(-1, finish);
    1818        }
    1919    ]);
  • trunk/LayoutTests/inspector/profiler/heap-snapshot-inspect-dom-wrapper.html

    r125966 r142460  
    1515{
    1616    WebInspector.showPanel("profiles");
    17     ProfilerAgent.takeHeapSnapshot(step0);
     17    HeapProfilerAgent.takeHeapSnapshot(step0);
    1818
    1919    function step0()
     
    4343        }
    4444        for (var i = 0; i < bodyWrapperIds.length; i++)
    45             ProfilerAgent.getObjectByHeapObjectId(bodyWrapperIds[i], undefined, didGetObjectByHeapObjectId);
     45            HeapProfilerAgent.getObjectByHeapObjectId(bodyWrapperIds[i], undefined, didGetObjectByHeapObjectId);
    4646
    4747        var resolvedObjectsCount = 0;
     
    7070                return;
    7171
    72             ProfilerAgent.clearProfiles(done);
     72            HeapProfilerAgent.clearProfiles(done);
    7373            WebInspector.panels.profiles._reset();
    7474        }
  • trunk/LayoutTests/inspector/profiler/heap-snapshot-loader.html

    r140306 r142460  
    1818
    1919    function injectMockProfile(overrideGetProfile, callback) {
    20         var dispatcher = InspectorBackend._domainDispatchers["Profiler"];
     20        var dispatcher = InspectorBackend._domainDispatchers["HeapProfiler"];
    2121        var panel = WebInspector.panels.profiles;
    2222        panel._reset();
     
    4040        {
    4141            if (overrideGetProfile)
    42                 InspectorTest.override(ProfilerAgent, "getHeapSnapshot", getHeapSnapshotMock);
     42                InspectorTest.override(HeapProfilerAgent, "getHeapSnapshot", getHeapSnapshotMock);
    4343            callback(profileHeader);
    4444        }
    4545        InspectorTest.addSniffer(profileHeader, "_snapshotReceived", snapshotLoaded);
    4646
    47         InspectorTest.override(ProfilerAgent, "getHeapSnapshot", getHeapSnapshotMock);
     47        InspectorTest.override(HeapProfilerAgent, "getHeapSnapshot", getHeapSnapshotMock);
    4848        panel.showProfile(profileHeader);
    4949    }
  • trunk/LayoutTests/inspector/profiler/heap-snapshot-test.js

    r139998 r142460  
    173173    {
    174174        InspectorTest.addResult("Profiler was enabled.");
    175         // We mock out ProfilerAgent -- as DRT runs in single-process mode, Inspector
     175        // We mock out HeapProfilerAgent -- as DRT runs in single-process mode, Inspector
    176176        // and test share the same heap. Taking a snapshot takes too long for a test,
    177177        // so we provide synthetic snapshots.
     
    736736        WebInspector.panels.profiles._finishHeapSnapshot(uid);
    737737    }
    738     InspectorTest.override(ProfilerAgent, "getHeapSnapshot", pushGeneratedSnapshot);
     738    InspectorTest.override(HeapProfilerAgent, "getHeapSnapshot", pushGeneratedSnapshot);
    739739    InspectorTest._takeAndOpenSnapshotCallback = callback;
    740740    WebInspector.panels.profiles.addProfileHeader(profile);
  • trunk/PerformanceTests/ChangeLog

    r141906 r142460  
     12013-02-11  Alexei Filippov  <alph@chromium.org>
     2
     3        Web Inspector: Split Profiler domain in protocol into Profiler and HeapProfiler
     4        https://bugs.webkit.org/show_bug.cgi?id=108653
     5
     6        Reviewed by Yury Semikhatsky.
     7
     8        Currently CPU and heap profilers share the same domain 'Profiler' in the protocol.
     9        In fact these two profile types have not too much in common. So put each into its own domain.
     10        It should also help when Profiles panel gets split into several tools.
     11        This is the phase 1 which adds InspectorHeapProfilerAgent but doesn't
     12        change the original InspectorProfilerAgent.
     13
     14        * inspector/heap-snapshot-performance-test.js:
     15        (test.performanceTest.cleanup):
     16
    1172013-02-05  Dominik Röttsches  <dominik.rottsches@intel.com>
    218
  • trunk/PerformanceTests/inspector/heap-snapshot-performance-test.js

    r140534 r142460  
    2828        var fullTimerCookie = timer.start("full-summary-snapshot-time");
    2929        var backendTimerCookie = timer.start("take-snapshot");
    30         ProfilerAgent.takeHeapSnapshot(step0);
     30        HeapProfilerAgent.takeHeapSnapshot(step0);
    3131
    3232        function step0()
     
    6060            timer.finish(fullTimerCookie);
    6161            clearTimerCookie = timer.start("clear-snapshot");
    62             ProfilerAgent.clearProfiles(done);
     62            HeapProfilerAgent.clearProfiles(done);
    6363            WebInspector.panels.profiles._reset();
    6464        }
  • trunk/Source/WebCore/CMakeLists.txt

    r142427 r142460  
    16421642    inspector/InspectorFrontendClientLocal.cpp
    16431643    inspector/InspectorFrontendHost.cpp
     1644    inspector/InspectorHeapProfilerAgent.cpp
    16441645    inspector/InspectorHistory.cpp
    16451646    inspector/InspectorIndexedDBAgent.cpp
  • trunk/Source/WebCore/ChangeLog

    r142459 r142460  
     12013-02-11  Alexei Filippov  <alph@chromium.org>
     2
     3        Web Inspector: Split Profiler domain in protocol into Profiler and HeapProfiler
     4        https://bugs.webkit.org/show_bug.cgi?id=108653
     5
     6        Reviewed by Yury Semikhatsky.
     7
     8        Currently CPU and heap profilers share the same domain 'Profiler' in the protocol.
     9        In fact these two profile types have not too much in common. So put each into its own domain.
     10        It should also help when Profiles panel gets split into several tools.
     11        This is the phase 1 which adds InspectorHeapProfilerAgent but doesn't
     12        change the original InspectorProfilerAgent.
     13
     14        * CMakeLists.txt:
     15        * GNUmakefile.list.am:
     16        * Target.pri:
     17        * WebCore.gypi:
     18        * WebCore.vcproj/WebCore.vcproj:
     19        * WebCore.vcxproj/WebCore.vcxproj:
     20        * WebCore.vcxproj/WebCore.vcxproj.filters:
     21        * WebCore.xcodeproj/project.pbxproj:
     22        * inspector/Inspector.json:
     23        * inspector/InspectorAllInOne.cpp:
     24        * inspector/InspectorController.cpp:
     25        (WebCore::InspectorController::InspectorController):
     26        * inspector/InspectorHeapProfilerAgent.cpp: Added.
     27        (WebCore):
     28        (WebCore::InspectorHeapProfilerAgent::create):
     29        (WebCore::InspectorHeapProfilerAgent::InspectorHeapProfilerAgent):
     30        (WebCore::InspectorHeapProfilerAgent::~InspectorHeapProfilerAgent):
     31        (WebCore::InspectorHeapProfilerAgent::resetState):
     32        (WebCore::InspectorHeapProfilerAgent::resetFrontendProfiles):
     33        (WebCore::InspectorHeapProfilerAgent::setFrontend):
     34        (WebCore::InspectorHeapProfilerAgent::clearFrontend):
     35        (WebCore::InspectorHeapProfilerAgent::restore):
     36        (WebCore::InspectorHeapProfilerAgent::collectGarbage):
     37        (WebCore::InspectorHeapProfilerAgent::createSnapshotHeader):
     38        (WebCore::InspectorHeapProfilerAgent::hasHeapProfiler):
     39        (WebCore::InspectorHeapProfilerAgent::getProfileHeaders):
     40        (WebCore::InspectorHeapProfilerAgent::getHeapSnapshot):
     41        (WebCore::InspectorHeapProfilerAgent::removeProfile):
     42        (WebCore::InspectorHeapProfilerAgent::takeHeapSnapshot):
     43        (WebCore::InspectorHeapProfilerAgent::getObjectByHeapObjectId):
     44        (WebCore::InspectorHeapProfilerAgent::getHeapObjectId):
     45        (WebCore::InspectorHeapProfilerAgent::reportMemoryUsage):
     46        * inspector/InspectorHeapProfilerAgent.h: Added.
     47        (WebCore):
     48        (InspectorHeapProfilerAgent):
     49        (WebCore::InspectorHeapProfilerAgent::clearProfiles):
     50        * inspector/InspectorInstrumentation.cpp:
     51        (WebCore):
     52        (WebCore::InspectorInstrumentation::didCommitLoadImpl):
     53        * inspector/InstrumentingAgents.h:
     54        (WebCore):
     55        (InstrumentingAgents):
     56        (WebCore::InstrumentingAgents::inspectorHeapProfilerAgent):
     57        (WebCore::InstrumentingAgents::setInspectorHeapProfilerAgent):
     58        * inspector/WorkerInspectorController.cpp:
     59        (WebCore::WorkerInspectorController::WorkerInspectorController):
     60        * inspector/front-end/HeapSnapshotDataGrids.js:
     61        * inspector/front-end/HeapSnapshotGridNodes.js:
     62        (WebInspector.HeapSnapshotGenericObjectNode.prototype.queryObjectContent):
     63        * inspector/front-end/HeapSnapshotView.js:
     64        (WebInspector.HeapProfileHeader.prototype.startSnapshotTransfer):
     65        (WebInspector.HeapProfileHeader.prototype.saveToFile.onOpen):
     66        (WebInspector.HeapProfileHeader.prototype.saveToFile):
     67        * inspector/front-end/ProfilesPanel.js:
     68        (WebInspector.ProfilesPanel):
     69        (WebInspector.ProfilesPanel.prototype._clearProfiles):
     70        (WebInspector.ProfilesPanel.prototype._garbageCollectButtonClicked):
     71        (WebInspector.ProfilesPanel.prototype._removeProfileHeader):
     72        (WebInspector.ProfilesPanel.prototype._populateProfiles.var):
     73        (WebInspector.ProfilesPanel.prototype._populateProfiles.populateCallback):
     74        (WebInspector.ProfilesPanel.prototype._populateProfiles):
     75        (WebInspector.ProfilesPanel.prototype.takeHeapSnapshot):
     76        (WebInspector.ProfilesPanel.prototype.revealInView):
     77        (WebInspector.HeapProfilerDispatcher):
     78        (WebInspector.HeapProfilerDispatcher.prototype.addProfileHeader):
     79        (WebInspector.HeapProfilerDispatcher.prototype.addHeapSnapshotChunk):
     80        (WebInspector.HeapProfilerDispatcher.prototype.finishHeapSnapshot):
     81        (WebInspector.HeapProfilerDispatcher.prototype.resetProfiles):
     82        (WebInspector.HeapProfilerDispatcher.prototype.reportHeapSnapshotProgress):
     83        * inspector/front-end/TimelinePanel.js:
     84        (WebInspector.TimelinePanel.prototype._garbageCollectButtonClicked):
     85        * inspector/front-end/inspector.js:
     86        (WebInspector.doLoadedDone):
     87
    1882013-02-11  Mike West  <mkwst@chromium.org>
    289
  • trunk/Source/WebCore/GNUmakefile.list.am

    r142427 r142460  
    38343834        Source/WebCore/inspector/InspectorFrontendHost.cpp \
    38353835        Source/WebCore/inspector/InspectorFrontendHost.h \
     3836        Source/WebCore/inspector/InspectorHeapProfilerAgent.cpp \
     3837        Source/WebCore/inspector/InspectorHeapProfilerAgent.h \
    38363838        Source/WebCore/inspector/InspectorHistory.cpp \
    38373839        Source/WebCore/inspector/InspectorHistory.h \
  • trunk/Source/WebCore/Target.pri

    r142427 r142460  
    800800    inspector/InspectorFrontendClientLocal.cpp \
    801801    inspector/InspectorFrontendHost.cpp \
     802    inspector/InspectorHeapProfilerAgent.cpp \
    802803    inspector/InspectorHistory.cpp \
    803804    inspector/InspectorInputAgent.cpp \
     
    19931994    inspector/InspectorFrontendClientLocal.h \
    19941995    inspector/InspectorFrontendHost.h \
     1996    inspector/InspectorHeapProfilerAgent.h \
    19951997    inspector/InspectorHistory.h \
    19961998    inspector/InspectorInstrumentation.h \
  • trunk/Source/WebCore/WebCore.gypi

    r142427 r142460  
    18791879            'inspector/InspectorFrontendHost.cpp',
    18801880            'inspector/InspectorFrontendHost.h',
     1881            'inspector/InspectorHeapProfilerAgent.cpp',
     1882            'inspector/InspectorHeapProfilerAgent.h',
    18811883            'inspector/InspectorHistory.cpp',
    18821884            'inspector/InspectorHistory.h',
  • trunk/Source/WebCore/WebCore.vcproj/WebCore.vcproj

    r142427 r142460  
    7605276052                        </File>
    7605376053                        <File
     76054                                RelativePath="..\inspector\InspectorHeapProfilerAgent.cpp"
     76055                                >
     76056                                <FileConfiguration
     76057                                        Name="Release|Win32"
     76058                                        ExcludedFromBuild="true"
     76059                                        >
     76060                                        <Tool
     76061                                                Name="VCCLCompilerTool"
     76062                                        />
     76063                                </FileConfiguration>
     76064                                <FileConfiguration
     76065                                        Name="Production|Win32"
     76066                                        ExcludedFromBuild="true"
     76067                                        >
     76068                                        <Tool
     76069                                                Name="VCCLCompilerTool"
     76070                                        />
     76071                                </FileConfiguration>
     76072                        </File>
     76073                        <File
     76074                                RelativePath="..\inspector\InspectorHeapProfilerAgent.h"
     76075                                >
     76076                        </File>
     76077                        <File
    7605476078                                RelativePath="..\inspector\InspectorHistory.cpp"
    7605576079                                >
  • trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj

    r142427 r142460  
    56915691    </ClCompile>
    56925692    <ClCompile Include="..\inspector\InspectorFrontendHost.cpp">
     5693      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
     5694    </ClCompile>
     5695    <ClCompile Include="..\inspector\InspectorHeapProfilerAgent.cpp">
    56935696      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
    56945697    </ClCompile>
     
    83718374    <ClInclude Include="..\inspector\InspectorFrontendClientLocal.h" />
    83728375    <ClInclude Include="..\inspector\InspectorFrontendHost.h" />
     8376    <ClInclude Include="..\inspector\InspectorHeapProfilerAgent.h" />
    83738377    <ClInclude Include="..\inspector\InspectorHistory.h" />
    83748378    <ClInclude Include="..\inspector\InspectorIndexedDBAgent.h" />
  • trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj.filters

    r142193 r142460  
    64936493      <Filter>inspector</Filter>
    64946494    </ClCompile>
     6495    <ClCompile Include="..\inspector\InspectorHeapProfilerAgent.cpp">
     6496      <Filter>inspector</Filter>
     6497    </ClCompile>
    64956498    <ClCompile Include="..\inspector\InspectorHistory.cpp">
    64966499      <Filter>inspector</Filter>
     
    1377813781    </ClInclude>
    1377913782    <ClInclude Include="..\inspector\InspectorFrontendHost.h">
     13783      <Filter>inspector</Filter>
     13784    </ClInclude>
     13785    <ClInclude Include="..\inspector\InspectorHeapProfilerAgent.h">
    1378013786      <Filter>inspector</Filter>
    1378113787    </ClInclude>
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r142427 r142460  
    38163816                9F0D6B2E121BFEBA006C0288 /* InspectorProfilerAgent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9F0D6B2C121BFEBA006C0288 /* InspectorProfilerAgent.cpp */; };
    38173817                9F0D6B2F121BFEBA006C0288 /* InspectorProfilerAgent.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F0D6B2D121BFEBA006C0288 /* InspectorProfilerAgent.h */; };
     3818                5112935F3D54B4B52FAF973F /* InspectorHeapProfilerAgent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 511293613D6DB4B52FAF973F /* InspectorHeapProfilerAgent.cpp */; };
     3819                511293603D60B4B52FAF973F /* InspectorHeapProfilerAgent.h in Headers */ = {isa = PBXBuildFile; fileRef = 511293623D85B4B52FAF973F /* InspectorHeapProfilerAgent.h */; };
    38183820                9F3B947E12241758005304E7 /* ScriptHeapSnapshot.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F3B947D12241758005304E7 /* ScriptHeapSnapshot.h */; };
    38193821                9F6FC1961122E82A00E80196 /* ScriptDebugServer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9F6FC1941122E82A00E80196 /* ScriptDebugServer.cpp */; };
     
    1128111283                9F0D6B2C121BFEBA006C0288 /* InspectorProfilerAgent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InspectorProfilerAgent.cpp; sourceTree = "<group>"; };
    1128211284                9F0D6B2D121BFEBA006C0288 /* InspectorProfilerAgent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InspectorProfilerAgent.h; sourceTree = "<group>"; };
     11285                511293613D6DB4B52FAF973F /* InspectorHeapProfilerAgent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InspectorHeapProfilerAgent.cpp; sourceTree = "<group>"; };
     11286                511293623D85B4B52FAF973F /* InspectorHeapProfilerAgent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InspectorHeapProfilerAgent.h; sourceTree = "<group>"; };
    1128311287                9F3B947D12241758005304E7 /* ScriptHeapSnapshot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScriptHeapSnapshot.h; sourceTree = "<group>"; };
    1128411288                9F6FC1941122E82A00E80196 /* ScriptDebugServer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScriptDebugServer.cpp; sourceTree = "<group>"; };
     
    1521615220                                7A0E770C10C00A8800A0276E /* InspectorFrontendHost.h */,
    1521715221                                7A0E770D10C00A8800A0276E /* InspectorFrontendHost.idl */,
     15222                                511293613D6DB4B52FAF973F /* InspectorHeapProfilerAgent.cpp */,
     15223                                511293623D85B4B52FAF973F /* InspectorHeapProfilerAgent.h */,
    1521815224                                7A54857D14E02D51006AE05A /* InspectorHistory.cpp */,
    1521915225                                7A54857E14E02D51006AE05A /* InspectorHistory.h */,
     
    2466324669                                F344C75311294D9D00F26EEE /* InspectorFrontendClientLocal.h in Headers */,
    2466424670                                7A0E770F10C00A8800A0276E /* InspectorFrontendHost.h in Headers */,
     24671                                511293603D60B4B52FAF973F /* InspectorHeapProfilerAgent.h in Headers */,
    2466524672                                7A54858014E02D51006AE05A /* InspectorHistory.h in Headers */,
    2466624673                                7ACD88D414C08BD60084EDD2 /* InspectorIndexedDBAgent.h in Headers */,
     
    2794127948                                F344C75811294FF600F26EEE /* InspectorFrontendClientLocal.cpp in Sources */,
    2794227949                                7A0E770E10C00A8800A0276E /* InspectorFrontendHost.cpp in Sources */,
     27950                                5112935F3D54B4B52FAF973F /* InspectorHeapProfilerAgent.cpp in Sources */,
    2794327951                                7A54857F14E02D51006AE05A /* InspectorHistory.cpp in Sources */,
    2794427952                                7ACD88D314C08BD60084EDD2 /* InspectorIndexedDBAgent.cpp in Sources */,
  • trunk/Source/WebCore/inspector/Inspector.json

    r142281 r142460  
    32473247    },
    32483248    {
     3249        "domain": "HeapProfiler",
     3250        "hidden": true,
     3251        "types": [
     3252            {
     3253                "id": "ProfileHeader",
     3254                "type": "object",
     3255                "description": "Profile header.",
     3256                "properties": [
     3257                    { "name": "title", "type": "string", "description": "Profile title." },
     3258                    { "name": "uid", "type": "integer", "description": "Unique identifier of the profile." },
     3259                    { "name": "maxJSObjectId", "type": "integer", "optional": true, "description": "Last seen JS object Id." }
     3260                ]
     3261            },
     3262            {
     3263                "id": "HeapSnapshotObjectId",
     3264                "type": "string",
     3265                "description": "Heap snashot object id."
     3266            }
     3267        ],
     3268        "commands": [
     3269            {
     3270                "name": "hasHeapProfiler",
     3271                "returns": [
     3272                    { "name": "result", "type": "boolean" }
     3273                ]
     3274            },
     3275            {
     3276                "name": "getProfileHeaders",
     3277                "returns": [
     3278                    { "name": "headers", "type": "array", "items": { "$ref": "ProfileHeader"} }
     3279                ]
     3280            },
     3281            {
     3282                "name": "getHeapSnapshot",
     3283                "parameters": [
     3284                    { "name": "uid", "type": "integer" }
     3285                ]
     3286            },
     3287            {
     3288                "name": "removeProfile",
     3289                "parameters": [
     3290                    { "name": "uid", "type": "integer" }
     3291                ]
     3292            },
     3293            {
     3294                "name": "clearProfiles"
     3295            },
     3296            {
     3297                "name": "takeHeapSnapshot",
     3298                "parameters": [
     3299                    { "name": "reportProgress", "type": "boolean", "optional": true, "description": "If true 'reportHeapSnapshotProgress' events will be generated while snapshot is being taken." }
     3300                ]
     3301            },
     3302            {
     3303                "name": "collectGarbage"
     3304            },
     3305            {
     3306                "name": "getObjectByHeapObjectId",
     3307                "parameters": [
     3308                    { "name": "objectId", "$ref": "HeapSnapshotObjectId" },
     3309                    { "name": "objectGroup", "type": "string", "optional": true, "description": "Symbolic group name that can be used to release multiple objects." }
     3310                ],
     3311                "returns": [
     3312                    { "name": "result", "$ref": "Runtime.RemoteObject", "description": "Evaluation result." }
     3313                ]
     3314            },
     3315            {
     3316                "name": "getHeapObjectId",
     3317                "parameters": [
     3318                    { "name": "objectId", "$ref": "Runtime.RemoteObjectId", "description": "Identifier of the object to get heap object id for." }
     3319                ],
     3320                "returns": [
     3321                    { "name": "heapSnapshotObjectId", "$ref": "HeapSnapshotObjectId", "description": "Id of the heap snapshot object corresponding to the passed remote object id." }
     3322                ]
     3323            }
     3324        ],
     3325        "events": [
     3326            {
     3327                "name": "addProfileHeader",
     3328                "parameters": [
     3329                    { "name": "header", "$ref": "ProfileHeader" }
     3330                ]
     3331            },
     3332            {
     3333                "name": "addHeapSnapshotChunk",
     3334                "parameters": [
     3335                    { "name": "uid", "type": "integer" },
     3336                    { "name": "chunk", "type": "string" }
     3337                ]
     3338            },
     3339            {
     3340                "name": "finishHeapSnapshot",
     3341                "parameters": [
     3342                    { "name": "uid", "type": "integer" }
     3343                ]
     3344            },
     3345            {
     3346                "name": "resetProfiles"
     3347            },
     3348            {
     3349                "name": "reportHeapSnapshotProgress",
     3350                "parameters": [
     3351                    { "name": "done", "type": "integer" },
     3352                    { "name": "total", "type": "integer" }
     3353                ]
     3354            }
     3355        ]
     3356    },
     3357    {
    32493358        "domain": "Worker",
    32503359        "hidden": true,
  • trunk/Source/WebCore/inspector/InspectorAllInOne.cpp

    r137732 r142460  
    5757#include "InspectorFrontendClientLocal.cpp"
    5858#include "InspectorFrontendHost.cpp"
     59#include "InspectorHeapProfilerAgent.cpp"
    5960#include "InspectorHistory.cpp"
    6061#include "InspectorIndexedDBAgent.cpp"
  • trunk/Source/WebCore/inspector/InspectorController.cpp

    r142074 r142460  
    5555#include "InspectorFrontend.h"
    5656#include "InspectorFrontendClient.h"
     57#include "InspectorHeapProfilerAgent.h"
    5758#include "InspectorIndexedDBAgent.h"
    5859#include "InspectorInputAgent.h"
     
    153154    m_profilerAgent = profilerAgentPtr.get();
    154155    m_agents.append(profilerAgentPtr.release());
     156
     157    m_agents.append(InspectorHeapProfilerAgent::create(m_instrumentingAgents.get(), m_state.get(), m_injectedScriptManager.get()));
     158
    155159#endif
    156160
  • trunk/Source/WebCore/inspector/InspectorInstrumentation.cpp

    r141555 r142460  
    5757#include "InspectorDOMStorageAgent.h"
    5858#include "InspectorDebuggerAgent.h"
     59#include "InspectorHeapProfilerAgent.h"
    5960#include "InspectorLayerTreeAgent.h"
    6061#include "InspectorPageAgent.h"
     
    925926        if (InspectorProfilerAgent* profilerAgent = instrumentingAgents->inspectorProfilerAgent())
    926927            profilerAgent->resetState();
     928        if (InspectorHeapProfilerAgent* heapProfilerAgent = instrumentingAgents->inspectorHeapProfilerAgent())
     929            heapProfilerAgent->resetState();
    927930#endif
    928931        if (InspectorCSSAgent* cssAgent = instrumentingAgents->inspectorCSSAgent())
  • trunk/Source/WebCore/inspector/InstrumentingAgents.h

    r140127 r142460  
    5050class InspectorDebuggerAgent;
    5151class InspectorFileSystemAgent;
     52class InspectorHeapProfilerAgent;
    5253class InspectorLayerTreeAgent;
    5354class InspectorPageAgent;
     
    128129    InspectorProfilerAgent* inspectorProfilerAgent() const { return m_inspectorProfilerAgent; }
    129130    void setInspectorProfilerAgent(InspectorProfilerAgent* agent) { m_inspectorProfilerAgent = agent; }
     131
     132    InspectorHeapProfilerAgent* inspectorHeapProfilerAgent() const { return m_inspectorHeapProfilerAgent; }
     133    void setInspectorHeapProfilerAgent(InspectorHeapProfilerAgent* agent) { m_inspectorHeapProfilerAgent = agent; }
    130134#endif
    131135
     
    171175    InspectorDOMDebuggerAgent* m_inspectorDOMDebuggerAgent;
    172176    InspectorProfilerAgent* m_inspectorProfilerAgent;
     177    InspectorHeapProfilerAgent* m_inspectorHeapProfilerAgent;
    173178#endif
    174179#if ENABLE(WORKERS)
  • trunk/Source/WebCore/inspector/WorkerInspectorController.cpp

    r140127 r142460  
    4242#include "InspectorFrontend.h"
    4343#include "InspectorFrontendChannel.h"
     44#include "InspectorHeapProfilerAgent.h"
    4445#include "InspectorProfilerAgent.h"
    4546#include "InspectorState.h"
     
    111112
    112113    m_agents.append(InspectorProfilerAgent::create(m_instrumentingAgents.get(), consoleAgent.get(), workerContext, m_state.get(), m_injectedScriptManager.get()));
     114    m_agents.append(InspectorHeapProfilerAgent::create(m_instrumentingAgents.get(), m_state.get(), m_injectedScriptManager.get()));
    113115#endif
    114116    m_agents.append(InspectorTimelineAgent::create(m_instrumentingAgents.get(), 0, m_state.get(), InspectorTimelineAgent::WorkerInspector, 0));
  • trunk/Source/WebCore/inspector/front-end/HeapSnapshotDataGrids.js

    r138528 r142460  
    135135
    136136    /**
    137      * @param {ProfilerAgent.HeapSnapshotObjectId} heapSnapshotObjectId
     137     * @param {HeapProfilerAgent.HeapSnapshotObjectId} heapSnapshotObjectId
    138138     */
    139139    highlightObjectByHeapSnapshotId: function(heapSnapshotObjectId)
     
    529529    /**
    530530     * @override
    531      * @param {ProfilerAgent.HeapSnapshotObjectId} id
     531     * @param {HeapProfilerAgent.HeapSnapshotObjectId} id
    532532     */
    533533    highlightObjectByHeapSnapshotId: function(id)
     
    735735    /**
    736736     * @override
    737      * @param {ProfilerAgent.HeapSnapshotObjectId} id
     737     * @param {HeapProfilerAgent.HeapSnapshotObjectId} id
    738738     */
    739739    highlightObjectByHeapSnapshotId: function(id)
  • trunk/Source/WebCore/inspector/front-end/HeapSnapshotGridNodes.js

    r140953 r142460  
    466466                    callback(WebInspector.RemoteObject.fromPrimitiveValue(WebInspector.UIString("Not available")));
    467467            }
    468             ProfilerAgent.getObjectByHeapObjectId(String(this.snapshotNodeId), objectGroupName, formatResult);
     468            HeapProfilerAgent.getObjectByHeapObjectId(String(this.snapshotNodeId), objectGroupName, formatResult);
    469469        }
    470470    },
  • trunk/Source/WebCore/inspector/front-end/HeapSnapshotView.js

    r142243 r142460  
    802802    /**
    803803     * @override
    804      * @param {ProfilerAgent.ProfileHeader} profile
     804     * @param {HeapProfilerAgent.ProfileHeader} profile
    805805     * @return {WebInspector.ProfileHeader}
    806806     */
     
    880880    startSnapshotTransfer: function()
    881881    {
    882         ProfilerAgent.getHeapSnapshot(this.uid);
     882        HeapProfilerAgent.getHeapSnapshot(this.uid);
    883883    },
    884884
     
    987987            this._savedChunks = 0;
    988988            this._updateTransferProgress(0, this._totalNumberOfChunks);
    989             ProfilerAgent.getHeapSnapshot(this.uid);
     989            HeapProfilerAgent.getHeapSnapshot(this.uid);
    990990        }
    991991        this._savingToFile = true;
  • trunk/Source/WebCore/inspector/front-end/ProfilesPanel.js

    r142243 r142460  
    307307
    308308    InspectorBackend.registerProfilerDispatcher(new WebInspector.ProfilerDispatcher(this));
     309    InspectorBackend.registerHeapProfilerDispatcher(new WebInspector.HeapProfilerDispatcher(this));
    309310    InspectorBackend.registerMemoryDispatcher(new WebInspector.MemoryDispatcher(this));
    310311
     
    468469    {
    469470        ProfilerAgent.clearProfiles();
     471        HeapProfilerAgent.clearProfiles();
    470472        this._reset();
    471473    },
     
    473475    _garbageCollectButtonClicked: function()
    474476    {
    475         ProfilerAgent.collectGarbage();
     477        HeapProfilerAgent.collectGarbage();
    476478    },
    477479
     
    626628        sidebarParent.removeChild(profile._profilesTreeElement);
    627629
    628         if (!profile.isTemporary)
    629             ProfilerAgent.removeProfile(profile.profileType().id, profile.uid);
     630        if (!profile.isTemporary) {
     631            if (profile.profileType().id == WebInspector.HeapSnapshotProfileType.TypeId)
     632                HeapProfilerAgent.removeProfile(profile.uid);
     633            else
     634                ProfilerAgent.removeProfile(profile.profileType().id, profile.uid);
     635        }
    630636
    631637        // No other item will be selected if there aren't any other profiles, so
     
    685691
    686692    /**
    687      * @param {ProfilerAgent.HeapSnapshotObjectId} snapshotObjectId
     693     * @param {HeapProfilerAgent.HeapSnapshotObjectId} snapshotObjectId
    688694     * @param {string} viewName
    689695     */
     
    10881094
    10891095        /**
     1096         * @param {?string} type
    10901097         * @param {?string} error
    10911098         * @param {Array.<ProfilerAgent.ProfileHeader>} profileHeaders
    10921099         */
    1093         function populateCallback(error, profileHeaders) {
     1100        function populateCallback(type, error, profileHeaders) {
    10941101            if (error)
    10951102                return;
     
    10981105            for (var i = 0; i < profileHeadersLength; ++i) {
    10991106                var profileHeader = profileHeaders[i];
    1100                 var profileType = this.getProfileType(profileHeader.typeId);
     1107                var profileType = this.getProfileType(type || profileHeader.typeId);
    11011108                this.addProfileHeader(profileType.createProfile(profileHeader));
    11021109            }
    11031110        }
    11041111
    1105         ProfilerAgent.getProfileHeaders(populateCallback.bind(this));
     1112        ProfilerAgent.getProfileHeaders(populateCallback.bind(this, null));
     1113        HeapProfilerAgent.getProfileHeaders(populateCallback.bind(this, WebInspector.HeapSnapshotProfileType.TypeId));
    11061114
    11071115        this._profilesWereRequested = true;
     
    11651173            this._launcherView.profileFinished();
    11661174        }
    1167         ProfilerAgent.takeHeapSnapshot(true, done.bind(this));
     1175        HeapProfilerAgent.takeHeapSnapshot(true, done.bind(this));
    11681176        WebInspector.userMetrics.ProfilesHeapProfileTaken.record();
    11691177    },
     
    12041212        function revealInView(viewName)
    12051213        {
    1206             ProfilerAgent.getHeapObjectId(objectId, didReceiveHeapObjectId.bind(this, viewName));
     1214            HeapProfilerAgent.getHeapObjectId(objectId, didReceiveHeapObjectId.bind(this, viewName));
    12071215        }
    12081216
     
    12941302    {
    12951303        this._profilesPanel.setRecordingProfile(WebInspector.CPUProfileType.TypeId, isProfiling);
     1304    },
     1305
     1306    /**
     1307     * @override
     1308     */
     1309    resetProfiles: function()
     1310    {
     1311        this._profilesPanel._reset();
     1312    },
     1313
     1314    /**
     1315     * @override
     1316     * @param {number} done
     1317     * @param {number} total
     1318     */
     1319    reportHeapSnapshotProgress: function(done, total)
     1320    {
     1321        this._profilesPanel._reportHeapSnapshotProgress(done, total);
     1322    }
     1323}
     1324
     1325/**
     1326 * @constructor
     1327 * @implements {HeapProfilerAgent.Dispatcher}
     1328 * @param {WebInspector.ProfilesPanel} profilesPanel
     1329 */
     1330WebInspector.HeapProfilerDispatcher = function(profilesPanel)
     1331{
     1332    this._profilesPanel = profilesPanel;
     1333}
     1334
     1335WebInspector.HeapProfilerDispatcher.prototype = {
     1336    /**
     1337     * @param {HeapProfilerAgent.ProfileHeader} profile
     1338     */
     1339    addProfileHeader: function(profile)
     1340    {
     1341        var profileType = this._profilesPanel.getProfileType(WebInspector.HeapSnapshotProfileType.TypeId);
     1342        this._profilesPanel.addProfileHeader(profileType.createProfile(profile));
     1343    },
     1344
     1345    /**
     1346     * @override
     1347     * @param {number} uid
     1348     * @param {string} chunk
     1349     */
     1350    addHeapSnapshotChunk: function(uid, chunk)
     1351    {
     1352        this._profilesPanel._addHeapSnapshotChunk(uid, chunk);
     1353    },
     1354
     1355    /**
     1356     * @override
     1357     * @param {number} uid
     1358     */
     1359    finishHeapSnapshot: function(uid)
     1360    {
     1361        this._profilesPanel._finishHeapSnapshot(uid);
    12961362    },
    12971363
  • trunk/Source/WebCore/inspector/front-end/TimelinePanel.js

    r138564 r142460  
    581581    _garbageCollectButtonClicked: function()
    582582    {
    583         ProfilerAgent.collectGarbage();
     583        HeapProfilerAgent.collectGarbage();
    584584    },
    585585
  • trunk/Source/WebCore/inspector/front-end/inspector.js

    r142445 r142460  
    369369    ProfilerAgent.causesRecompilation(WebInspector._initializeCapability.bind(WebInspector, "profilerCausesRecompilation", null));
    370370    ProfilerAgent.isSampling(WebInspector._initializeCapability.bind(WebInspector, "samplingCPUProfiler", null));
    371     ProfilerAgent.hasHeapProfiler(WebInspector._initializeCapability.bind(WebInspector, "heapProfilerPresent", null));
     371    HeapProfilerAgent.hasHeapProfiler(WebInspector._initializeCapability.bind(WebInspector, "heapProfilerPresent", null));
    372372    TimelineAgent.supportsFrameInstrumentation(WebInspector._initializeCapability.bind(WebInspector, "timelineSupportsFrameInstrumentation", null));
    373373    TimelineAgent.canMonitorMainThread(WebInspector._initializeCapability.bind(WebInspector, "timelineCanMonitorMainThread", null));
  • trunk/Source/WebKit/chromium/ChangeLog

    r142434 r142460  
     12013-02-11  Alexei Filippov  <alph@chromium.org>
     2
     3        Web Inspector: Split Profiler domain in protocol into Profiler and HeapProfiler
     4        https://bugs.webkit.org/show_bug.cgi?id=108653
     5
     6        Reviewed by Yury Semikhatsky.
     7
     8        Currently CPU and heap profilers share the same domain 'Profiler' in the protocol.
     9        In fact these two profile types have not too much in common. So put each into its own domain.
     10        It should also help when Profiles panel gets split into several tools.
     11        This is the phase 1 which adds InspectorHeapProfilerAgent but doesn't
     12        change the original InspectorProfilerAgent.
     13
     14        * src/WebDevToolsAgentImpl.cpp:
     15        (WebKit::WebDevToolsAgent::shouldInterruptForMessage):
     16
    1172013-02-11  Abhishek Arya  <inferno@chromium.org>
    218
  • trunk/Source/WebKit/chromium/src/WebDevToolsAgentImpl.cpp

    r141555 r142460  
    779779        || commandName == InspectorBackendDispatcher::commandNames[InspectorBackendDispatcher::kProfiler_stopCmd]
    780780        || commandName == InspectorBackendDispatcher::commandNames[InspectorBackendDispatcher::kProfiler_getCPUProfileCmd]
    781         || commandName == InspectorBackendDispatcher::commandNames[InspectorBackendDispatcher::kProfiler_getHeapSnapshotCmd];
     781        || commandName == InspectorBackendDispatcher::commandNames[InspectorBackendDispatcher::kHeapProfiler_getHeapSnapshotCmd];
    782782}
    783783
Note: See TracChangeset for help on using the changeset viewer.