15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2011 Google Inc. All rights reserved.
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions are
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * met:
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     * Redistributions of source code must retain the above copyrightdd
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer.
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     * Redistributions in binary form must reproduce the above
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * in the documentation and/or other materials provided with the
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * distribution.
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     * Neither the name of Google Inc. nor the names of its
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * contributors may be used to endorse or promote products derived from
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * this software without specific prior written permission.
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor
338abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) * @param {function(string, *)} eventHandler
345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @extends {WebInspector.Object}
355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
368abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)WebInspector.HeapSnapshotWorkerProxy = function(eventHandler)
375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
388abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)    this._eventHandler = eventHandler;
395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._nextObjectId = 1;
405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._nextCallId = 1;
415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._callbacks = [];
425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._previousCallbacks = [];
43f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    this._worker = new Worker("profiler/heap_snapshot_worker/HeapSnapshotWorker.js");
4409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    this._worker.onmessage = this._messageReceived.bind(this);
455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
478abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)WebInspector.HeapSnapshotWorkerProxy.prototype = {
48a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    /**
4909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @param {number} profileUid
5009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @param {function(!WebInspector.HeapSnapshotProxy)} snapshotReceivedCallback
51a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {!WebInspector.HeapSnapshotLoaderProxy}
52a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     */
5309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    createLoader: function(profileUid, snapshotReceivedCallback)
545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var objectId = this._nextObjectId++;
5609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        var proxy = new WebInspector.HeapSnapshotLoaderProxy(this, objectId, profileUid, snapshotReceivedCallback);
57926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._postMessage({callId: this._nextCallId++, disposition: "create", objectId: objectId, methodName: "WebInspector.HeapSnapshotLoader"});
585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return proxy;
595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    dispose: function()
625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._worker.terminate();
645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this._interval)
655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            clearInterval(this._interval);
665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    disposeObject: function(objectId)
695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._postMessage({callId: this._nextCallId++, disposition: "dispose", objectId: objectId});
715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    evaluateForTest: function(script, callback)
7409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    {
7509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        var callId = this._nextCallId++;
7609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        this._callbacks[callId] = callback;
7709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        this._postMessage({callId: callId, disposition: "evaluateForTest", source: script});
7809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    },
7909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
8009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    /**
8109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @param {?function(...[?])} callback
8209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @param {string} objectId
8309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @param {string} methodName
8409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @param {function(new:T, ...[?])} proxyConstructor
8509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @return {?Object}
8609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @template T
8709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     */
88926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    callFactoryMethod: function(callback, objectId, methodName, proxyConstructor)
895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var callId = this._nextCallId++;
915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var methodArguments = Array.prototype.slice.call(arguments, 4);
925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var newObjectId = this._nextObjectId++;
93a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)
9409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        /**
9509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)         * @this {WebInspector.HeapSnapshotWorkerProxy}
9609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)         */
97a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        function wrapCallback(remoteResult)
98a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        {
99a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)            callback(remoteResult ? new proxyConstructor(this, newObjectId) : null);
100a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        }
101a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)
1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (callback) {
1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._callbacks[callId] = wrapCallback.bind(this);
1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._postMessage({callId: callId, disposition: "factory", objectId: objectId, methodName: methodName, methodArguments: methodArguments, newObjectId: newObjectId});
1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return null;
1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        } else {
1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._postMessage({callId: callId, disposition: "factory", objectId: objectId, methodName: methodName, methodArguments: methodArguments, newObjectId: newObjectId});
108926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            return new proxyConstructor(this, newObjectId);
1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
11209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    /**
11309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @param {function(*)} callback
11409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @param {string} objectId
11509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @param {string} methodName
11609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     */
1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    callMethod: function(callback, objectId, methodName)
1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var callId = this._nextCallId++;
1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var methodArguments = Array.prototype.slice.call(arguments, 3);
1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (callback)
1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._callbacks[callId] = callback;
1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._postMessage({callId: callId, disposition: "method", objectId: objectId, methodName: methodName, methodArguments: methodArguments});
1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    startCheckingForLongRunningCalls: function()
1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this._interval)
1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._checkLongRunningCalls();
1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._interval = setInterval(this._checkLongRunningCalls.bind(this), 300);
1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _checkLongRunningCalls: function()
1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        for (var callId in this._previousCallbacks)
1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (!(callId in this._callbacks))
1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                delete this._previousCallbacks[callId];
1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var hasLongRunningCalls = false;
1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        for (callId in this._previousCallbacks) {
1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            hasLongRunningCalls = true;
1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            break;
1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.dispatchEventToListeners("wait", hasLongRunningCalls);
1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        for (callId in this._callbacks)
1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._previousCallbacks[callId] = true;
1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
14909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    /**
15009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @param {!MessageEvent} event
15109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     */
1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _messageReceived: function(event)
1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var data = event.data;
1558abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)        if (data.eventName) {
1568abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)            if (this._eventHandler)
1578abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)                this._eventHandler(data.eventName, data.data);
1588abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)            return;
1598abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)        }
1608abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)        if (data.error) {
1618abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)            if (data.errorMethodName)
162f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)                WebInspector.messageSink.addMessage(WebInspector.UIString("An error occurred when a call to method '%s' was requested", data.errorMethodName));
163f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)            WebInspector.messageSink.addMessage(data["errorCallStack"]);
1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            delete this._callbacks[data.callId];
1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!this._callbacks[data.callId])
1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var callback = this._callbacks[data.callId];
1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        delete this._callbacks[data.callId];
1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        callback(data.result);
1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _postMessage: function(message)
1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._worker.postMessage(message);
1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    __proto__: WebInspector.Object.prototype
1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor
185f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) * @param {!WebInspector.HeapSnapshotWorkerProxy} worker
18609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @param {number} objectId
1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.HeapSnapshotProxyObject = function(worker, objectId)
1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._worker = worker;
1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._objectId = objectId;
1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.HeapSnapshotProxyObject.prototype = {
19509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    /**
19609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @param {string} workerMethodName
19709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @param {!Array.<*>} args
19809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     */
1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _callWorker: function(workerMethodName, args)
2005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        args.splice(1, 0, this._objectId);
2025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._worker[workerMethodName].apply(this._worker, args);
2035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    dispose: function()
2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._worker.disposeObject(this._objectId);
2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    disposeWorker: function()
2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._worker.dispose();
2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
21609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @param {?function(...[?])} callback
21709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @param {string} methodName
21809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @param {function (new:T, ...[?])} proxyConstructor
2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {...*} var_args
22007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch     * @return {!T}
22109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @template T
2225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
223926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    callFactoryMethod: function(callback, methodName, proxyConstructor, var_args)
2245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._callWorker("callFactoryMethod", Array.prototype.slice.call(arguments, 0));
2265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
22809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    /**
22909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @param {function(T)|undefined} callback
23009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @param {string} methodName
2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {...*} var_args
23209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @return {*}
23309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @template T
2345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
2355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    callMethod: function(callback, methodName, var_args)
2365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._callWorker("callMethod", Array.prototype.slice.call(arguments, 0));
2385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
2395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)};
2405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
2425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor
2435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @extends {WebInspector.HeapSnapshotProxyObject}
2445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @implements {WebInspector.OutputStream}
245f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) * @param {!WebInspector.HeapSnapshotWorkerProxy} worker
24609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @param {number} objectId
24709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @param {number} profileUid
24809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @param {function(!WebInspector.HeapSnapshotProxy)} snapshotReceivedCallback
2495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
25009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)WebInspector.HeapSnapshotLoaderProxy = function(worker, objectId, profileUid, snapshotReceivedCallback)
2515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
2525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    WebInspector.HeapSnapshotProxyObject.call(this, worker, objectId);
25309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    this._profileUid = profileUid;
25409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    this._snapshotReceivedCallback = snapshotReceivedCallback;
2555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
2565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.HeapSnapshotLoaderProxy.prototype = {
2585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
2595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} chunk
260a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {function(!WebInspector.OutputStream)=} callback
2615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
2625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    write: function(chunk, callback)
2635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.callMethod(callback, "write", chunk);
2655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2678abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)    /**
2688abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)     * @param {function()=} callback
2698abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)     */
2708abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)    close: function(callback)
2715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
27209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        /**
27309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)         * @this {WebInspector.HeapSnapshotLoaderProxy}
27409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)         */
2755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        function buildSnapshot()
2765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
2778abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)            if (callback)
2788abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)                callback();
27907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch            var showHiddenData = WebInspector.settings.showAdvancedHeapSnapshotProperties.get();
28007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch            this.callFactoryMethod(updateStaticData.bind(this), "buildSnapshot", WebInspector.HeapSnapshotProxy, showHiddenData);
2815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
28209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
28309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        /**
28409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)         * @param {!WebInspector.HeapSnapshotProxy} snapshotProxy
28509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)         * @this {WebInspector.HeapSnapshotLoaderProxy}
28609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)         */
2875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        function updateStaticData(snapshotProxy)
2885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
2895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this.dispose();
29009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)            snapshotProxy.setProfileUid(this._profileUid);
29109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)            snapshotProxy.updateStaticData(this._snapshotReceivedCallback.bind(this));
2925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
29309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
2945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.callMethod(buildSnapshot.bind(this), "close");
2955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    __proto__: WebInspector.HeapSnapshotProxyObject.prototype
2985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
2995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
3025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor
3035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @extends {WebInspector.HeapSnapshotProxyObject}
30409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @param {!WebInspector.HeapSnapshotWorkerProxy} worker
30509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @param {number} objectId
3065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
3075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.HeapSnapshotProxy = function(worker, objectId)
3085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
3095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    WebInspector.HeapSnapshotProxyObject.call(this, worker, objectId);
31009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    /** @type {?WebInspector.HeapSnapshotCommon.StaticData} */
31109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    this._staticData = null;
3125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.HeapSnapshotProxy.prototype = {
315d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    /**
316d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     * @param {!WebInspector.HeapSnapshotCommon.NodeFilter} filter
317d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     * @param {function(!Object.<string, !WebInspector.HeapSnapshotCommon.Aggregate>)} callback
318d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     */
319d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    aggregatesWithFilter: function(filter, callback)
3205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
321d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        this.callMethod(callback, "aggregatesWithFilter", filter);
3225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    aggregatesForDiff: function(callback)
3255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
3265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.callMethod(callback, "aggregatesForDiff");
3275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    calculateSnapshotDiff: function(baseSnapshotId, baseSnapshotAggregates, callback)
3305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
3315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.callMethod(callback, "calculateSnapshotDiff", baseSnapshotId, baseSnapshotAggregates);
3325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    nodeClassName: function(snapshotObjectId, callback)
3355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
3365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.callMethod(callback, "nodeClassName", snapshotObjectId);
3375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    dominatorIdsForNode: function(nodeIndex, callback)
3405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
3415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.callMethod(callback, "dominatorIdsForNode", nodeIndex);
3425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
34409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    /**
34509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @param {number} nodeIndex
34607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch     * @return {!WebInspector.HeapSnapshotProviderProxy}
34709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     */
34807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch    createEdgesProvider: function(nodeIndex)
3495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
35007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        return this.callFactoryMethod(null, "createEdgesProvider", WebInspector.HeapSnapshotProviderProxy, nodeIndex);
3515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
35309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    /**
35409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @param {number} nodeIndex
35507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch     * @return {!WebInspector.HeapSnapshotProviderProxy}
35609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     */
35707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch    createRetainingEdgesProvider: function(nodeIndex)
3585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
35907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        return this.callFactoryMethod(null, "createRetainingEdgesProvider", WebInspector.HeapSnapshotProviderProxy, nodeIndex);
3605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
36209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    /**
36309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @param {string} baseSnapshotId
36409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @param {string} className
36509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @return {?WebInspector.HeapSnapshotProviderProxy}
36609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     */
3675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    createAddedNodesProvider: function(baseSnapshotId, className)
3685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
369926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return this.callFactoryMethod(null, "createAddedNodesProvider", WebInspector.HeapSnapshotProviderProxy, baseSnapshotId, className);
3705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
37209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    /**
37309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @param {!Array.<number>} nodeIndexes
37409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @return {?WebInspector.HeapSnapshotProviderProxy}
37509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     */
3765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    createDeletedNodesProvider: function(nodeIndexes)
3775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
378926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return this.callFactoryMethod(null, "createDeletedNodesProvider", WebInspector.HeapSnapshotProviderProxy, nodeIndexes);
3795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
38109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    /**
38209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @param {function(*):boolean} filter
38309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @return {?WebInspector.HeapSnapshotProviderProxy}
38409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     */
3855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    createNodesProvider: function(filter)
3865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
387926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return this.callFactoryMethod(null, "createNodesProvider", WebInspector.HeapSnapshotProviderProxy, filter);
3885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
39009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    /**
39109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @param {string} className
392d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     * @param {!WebInspector.HeapSnapshotCommon.NodeFilter} nodeFilter
39309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @return {?WebInspector.HeapSnapshotProviderProxy}
39409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     */
395d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    createNodesProviderForClass: function(className, nodeFilter)
3965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
397d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        return this.callFactoryMethod(null, "createNodesProviderForClass", WebInspector.HeapSnapshotProviderProxy, className, nodeFilter);
3985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
40009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    /**
40109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @param {number} nodeIndex
40209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @return {?WebInspector.HeapSnapshotProviderProxy}
40309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     */
4045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    createNodesProviderForDominator: function(nodeIndex)
4055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
406926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return this.callFactoryMethod(null, "createNodesProviderForDominator", WebInspector.HeapSnapshotProviderProxy, nodeIndex);
4075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
40906f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    allocationTracesTops: function(callback)
41006f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    {
41106f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        this.callMethod(callback, "allocationTracesTops");
41206f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    },
41306f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)
41443e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles)    /**
41543e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles)     * @param {number} nodeId
41643e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles)     * @param {function(!WebInspector.HeapSnapshotCommon.AllocationNodeCallers)} callback
41743e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles)     */
41806f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    allocationNodeCallers: function(nodeId, callback)
41906f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    {
42006f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        this.callMethod(callback, "allocationNodeCallers", nodeId);
42106f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    },
42206f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)
423a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch    /**
424a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch     * @param {number} nodeIndex
425a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch     * @param {function(?Array.<!WebInspector.HeapSnapshotCommon.AllocationStackFrame>)} callback
426a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch     */
427a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch    allocationStack: function(nodeIndex, callback)
428a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch    {
429a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        this.callMethod(callback, "allocationStack", nodeIndex);
430a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch    },
431a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch
4325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    dispose: function()
4335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
43409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        throw new Error("Should never be called");
4355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get nodeCount()
4385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
4395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._staticData.nodeCount;
4405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get rootNodeIndex()
4435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
4445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._staticData.rootNodeIndex;
4455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    updateStaticData: function(callback)
4485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
44909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        /**
45009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)         * @param {!WebInspector.HeapSnapshotCommon.StaticData} staticData
45109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)         * @this {WebInspector.HeapSnapshotProxy}
45209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)         */
4535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        function dataReceived(staticData)
4545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
4555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._staticData = staticData;
4565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            callback(this);
4575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
4585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.callMethod(dataReceived.bind(this), "updateStaticData");
4595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
461d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    /**
462d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     * @param {!function(!WebInspector.HeapSnapshotCommon.Statistics):void} callback
463d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     */
464d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    getStatistics: function(callback)
465d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    {
466d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        this.callMethod(callback, "getStatistics");
467d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    },
468d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
4695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get totalSize()
4705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
4715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._staticData.totalSize;
4725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get uid()
4755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
47609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        return this._profileUid;
47709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    },
47809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
47909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    setProfileUid: function(profileUid)
48009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    {
48109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        this._profileUid = profileUid;
48209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    },
48309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
48409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    /**
48509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @return {number}
48609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     */
48709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    maxJSObjectId: function()
48809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    {
48909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        return this._staticData.maxJSObjectId;
4905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    __proto__: WebInspector.HeapSnapshotProxyObject.prototype
4935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
4945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
4975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor
4985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @extends {WebInspector.HeapSnapshotProxyObject}
499d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @implements {WebInspector.HeapSnapshotGridNode.ChildrenProvider}
50009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @param {!WebInspector.HeapSnapshotWorkerProxy} worker
50109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @param {number} objectId
5025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
5035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.HeapSnapshotProviderProxy = function(worker, objectId)
5045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
5055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    WebInspector.HeapSnapshotProxyObject.call(this, worker, objectId);
5065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
5075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.HeapSnapshotProviderProxy.prototype = {
509d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    /**
510d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     * @override
511d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     * @param {number} snapshotObjectId
512d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     * @param {function(number)} callback
513d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     */
5145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    nodePosition: function(snapshotObjectId, callback)
5155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
5165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.callMethod(callback, "nodePosition", snapshotObjectId);
5175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
5185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
519d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    /**
520d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     * @override
521d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     * @param {function(boolean)} callback
522d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     */
5235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    isEmpty: function(callback)
5245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
5255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.callMethod(callback, "isEmpty");
5265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
5275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
52809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    /**
529d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     * @override
53009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @param {number} startPosition
53109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @param {number} endPosition
53209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @param {function(!WebInspector.HeapSnapshotCommon.ItemsRange)} callback
53309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     */
5345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    serializeItemsRange: function(startPosition, endPosition, callback)
5355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
5365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.callMethod(callback, "serializeItemsRange", startPosition, endPosition);
5375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
5385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
539d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    /**
540d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     * @override
541d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     * @param {!WebInspector.HeapSnapshotCommon.ComparatorConfig} comparator
542d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     * @param {function()} callback
543d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     */
5445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    sortAndRewind: function(comparator, callback)
5455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
5465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.callMethod(callback, "sortAndRewind", comparator);
5475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
5485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    __proto__: WebInspector.HeapSnapshotProxyObject.prototype
5505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
551