UNPKG

strong-arc

Version:

A visual suite for the StrongLoop API Platform

189 lines (175 loc) 6.42 kB
/* * Copyright (C) 2013 Google Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the following disclaimer * in the documentation and/or other materials provided with the * distribution. * * Neither the name of Google Inc. nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * @constructor * @param {!WebInspector.Target} target * @param {string} snapshotId */ WebInspector.PaintProfilerSnapshot = function(target, snapshotId) { this._target = target; this._id = snapshotId; } /** * @param {!WebInspector.Target} target * @param {string} encodedPicture * @param {function(?WebInspector.PaintProfilerSnapshot)} callback */ WebInspector.PaintProfilerSnapshot.load = function(target, encodedPicture, callback) { var wrappedCallback = InspectorBackend.wrapClientCallback(callback, "LayerTreeAgent.loadSnapshot(): ", WebInspector.PaintProfilerSnapshot.bind(null, target)); target.layerTreeAgent().loadSnapshot(encodedPicture, wrappedCallback); } /** * @param {!Array.<!WebInspector.RawPaintProfilerLogItem>} log * @return {!Array.<!WebInspector.PaintProfilerLogItem>} */ WebInspector.PaintProfilerSnapshot._processAnnotations = function(log) { var result = []; /** @type {!Array.<!Object.<string, string>>} */ var commentGroupStack = []; for (var i = 0; i < log.length; ++i) { var method = log[i].method; switch (method) { case "beginCommentGroup": commentGroupStack.push({}); break; case "addComment": var group = commentGroupStack.peekLast(); if (!group) { console.assert(false, "Stray comment without a group"); break; } var key = String(log[i].params["key"]); var value = String(log[i].params["value"]); if (!key || typeof value === "undefined") { console.assert(false, "Missing key or value in addComment() params"); break; } if (key in group) { console.assert(false, "Duplicate key in comment group"); break; } group[key] = value; break; case "endCommentGroup": if (!commentGroupStack.length) console.assert(false, "Unbalanced commentGroupEnd call"); else commentGroupStack.pop(); break; default: result.push(new WebInspector.PaintProfilerLogItem(log[i], i, commentGroupStack.peekLast())); } } return result; } WebInspector.PaintProfilerSnapshot.prototype = { dispose: function() { this._target.layerTreeAgent().releaseSnapshot(this._id); }, /** * @return {!WebInspector.Target} */ target: function() { return this._target; }, /** * @param {?number} firstStep * @param {?number} lastStep * @param {?number} scale * @param {function(string=)} callback */ requestImage: function(firstStep, lastStep, scale, callback) { var wrappedCallback = InspectorBackend.wrapClientCallback(callback, "LayerTreeAgent.replaySnapshot(): "); this._target.layerTreeAgent().replaySnapshot(this._id, firstStep || undefined, lastStep || undefined, scale || 1.0, wrappedCallback); }, /** * @param {function(!Array.<!LayerTreeAgent.PaintProfile>=)} callback */ profile: function(callback) { var wrappedCallback = InspectorBackend.wrapClientCallback(callback, "LayerTreeAgent.profileSnapshot(): "); this._target.layerTreeAgent().profileSnapshot(this._id, 5, 1, wrappedCallback); }, /** * @param {function(!Array.<!WebInspector.PaintProfilerLogItem>=)} callback */ commandLog: function(callback) { /** * @param {?string} error * @param {!Array.<!WebInspector.RawPaintProfilerLogItem>} log */ function callbackWrapper(error, log) { if (error) { console.error("LayerTreeAgent.snapshotCommandLog(): " + error); callback(); return; } callback(WebInspector.PaintProfilerSnapshot._processAnnotations(log)); } this._target.layerTreeAgent().snapshotCommandLog(this._id, callbackWrapper); } }; /** * @typedef {!{method: string, params: Array.<Object.<string, *>>}} */ WebInspector.RawPaintProfilerLogItem; /** * @constructor * @param {!WebInspector.RawPaintProfilerLogItem} rawEntry * @param {number} commandIndex * @param {!Object.<string, string>=} annotations */ WebInspector.PaintProfilerLogItem = function(rawEntry, commandIndex, annotations) { this.method = rawEntry.method; this.params = rawEntry.params; this.annotations = annotations; this.commandIndex = commandIndex; } WebInspector.PaintProfilerLogItem.prototype = { /** * @return {number} */ nodeId: function() { if (!this.annotations) return 0; var inspectorId = this.annotations["INSPECTOR_ID"]; return Number(inspectorId); } }