UNPKG

atom-nuclide

Version:

A unified developer experience for web and mobile development, built as a suite of features on top of Atom to provide hackability and the support of an active community.

91 lines (79 loc) 2.65 kB
var convert = require('./convert'); var injection = require.resolve('./Injections/HeapProfilerAgent'); /** * @param {{inject}} config * @param {DebuggerClient} debuggerClient * @param {InjectorClient} injectorClient * @param {FrontendClient} frontendClient * @param {HeapProfilerClient} heapProfilerClient */ function HeapProfilerAgent(config, session) { try { this._noInject = config.inject === false || config.inject.profiles === false; } catch (e) { this._noInject = false; } this._injected = false; this._debuggerClient = session.debuggerClient; this._injectorClient = session.injectorClient; this._frontendClient = session.frontendClient; this._heapProfilerClient = session.heapProfilerClient; this._translateCommandToInjection( 'takeHeapSnapshot', 'getObjectByHeapObjectId', 'startTrackingHeapObjects', 'stopTrackingHeapObjects' ); if (!this._noInject) { this._injectorClient.on('inject', this._inject.bind(this)); } } HeapProfilerAgent.prototype._inject = function() { this._translateEventToFrontend( 'reportHeapSnapshotProgress', 'addHeapSnapshotChunk', 'heapStatsUpdate', 'lastSeenObjectId' ); this._injectorClient.injection( function(require, debug, options) { require(options.injection)(require, debug, options); }, { injection: injection, 'v8-profiler': require.resolve('v8-profiler') }, function(error, result) { this._injected = !error; if (error) return this._frontendClient.sendLogToConsole('error', error.message || error); }.bind(this) ); }; /** * @param {...string} eventNames */ HeapProfilerAgent.prototype._translateEventToFrontend = function(eventNames) { Array.prototype.forEach.call(arguments, function(event) { event = 'HeapProfiler.' + event; this._debuggerClient.on(event, function(message) { this._frontendClient.sendEvent(event, message); }.bind(this)); }, this); }; /** * @param {...string} commandNames */ HeapProfilerAgent.prototype._translateCommandToInjection = function(commandNames) { Array.prototype.forEach.call(arguments, function(command) { this[command] = function(params, done) { this._debuggerClient.request('HeapProfiler.' + command, params, function(error, result) { if (command == 'getObjectByHeapObjectId' && result && result.result) { this._heapProfilerClient.convertHandleToHeapHandle(result.result); result.result = convert.v8ResultToInspectorResult(result.result); } done(error, result); }.bind(this)); }; }, this); }; exports.HeapProfilerAgent = HeapProfilerAgent;