Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(89)

Unified Diff: Source/devtools/front_end/LayerTreeModel.js

Issue 224843014: DevTools: support importing layer tree from trace snapshots. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: rebased, removed redundant transform handling code Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | Source/devtools/front_end/LayersPanel.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/devtools/front_end/LayerTreeModel.js
diff --git a/Source/devtools/front_end/LayerTreeModel.js b/Source/devtools/front_end/LayerTreeModel.js
index 47004f9ab04e93ac92c047379e32c69849e6bcdf..7c2c65e1b6c36843b7db1586884759e6fc9a61ae 100644
--- a/Source/devtools/front_end/LayerTreeModel.js
+++ b/Source/devtools/front_end/LayerTreeModel.js
@@ -28,6 +28,19 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+/** @typedef {!{
+ bounds: {height: number, width: number},
+ children: Array.<!WebInspector.TracingLayerPayload>,
+ layer_id: number,
+ position: Array.<number>,
+ scroll_offset: Array.<number>,
+ layer_quad: Array.<number>,
+ draws_content: number,
+ transform: Array.<number>
+ }}
+*/
+WebInspector.TracingLayerPayload;
+
/**
* @constructor
* @extends {WebInspector.TargetAwareObject}
@@ -80,6 +93,15 @@ WebInspector.LayerTreeModel.prototype = {
},
/**
+ * @param {!WebInspector.TracingLayerSnapshot} snapshot
+ */
+ setTracingSnapshot: function(snapshot)
+ {
+ this.disable();
+ this._importTracingLayers(snapshot.root);
+ },
+
+ /**
* @return {?WebInspector.Layer}
*/
root: function()
@@ -156,7 +178,7 @@ WebInspector.LayerTreeModel.prototype = {
if (layer)
layer._reset(layers[i]);
else
- layer = new WebInspector.Layer(layers[i]);
+ layer = new WebInspector.AgentLayer(layers[i]);
this._layersById[layerId] = layer;
if (layers[i].backendNodeId) {
layer._setNode(this._target.domModel.nodeForId(this._backendNodeIdToNodeId[layers[i].backendNodeId]));
@@ -183,6 +205,31 @@ WebInspector.LayerTreeModel.prototype = {
},
/**
+ * @param {!WebInspector.TracingLayerPayload} root
+ */
+ _importTracingLayers: function(root)
+ {
+ this._layersById = {};
+ this._contentRoot = null;
+ this._root = this._innerImportTracingLayers(root);
+ this.dispatchEventToListeners(WebInspector.LayerTreeModel.Events.LayerTreeChanged);
+ },
+
+ /**
+ * @param {!WebInspector.TracingLayerPayload} payload
+ * @return {!WebInspector.TracingLayer}
+ */
+ _innerImportTracingLayers: function(payload)
+ {
+ var layer = new WebInspector.TracingLayer(payload);
+ if (!this._contentRoot && payload.draws_content)
+ this._contentRoot = layer;
+ for (var i = 0; i < payload.children.length; ++i)
+ layer.addChild(this._innerImportTracingLayers(payload.children[i]));
+ return layer;
+ },
+
+ /**
* @param {!Array.<!LayerTreeAgent.Layer>=} layers
*/
_layerTreeChanged: function(layers)
@@ -257,16 +304,131 @@ WebInspector.LayerTreeModel.prototype = {
}
/**
+ * @interface
+ */
+WebInspector.Layer = function()
+{
+}
+
+WebInspector.Layer.prototype = {
+ /**
+ * @return {string}
+ */
+ id: function() { },
+
+ /**
+ * @return {?string}
+ */
+ parentId: function() { },
+
+ /**
+ * @return {?WebInspector.Layer}
+ */
+ parent: function() { },
+
+ /**
+ * @return {boolean}
+ */
+ isRoot: function() { },
+
+ /**
+ * @return {!Array.<!WebInspector.Layer>}
+ */
+ children: function() { },
+
+ /**
+ * @param {!WebInspector.Layer} child
+ */
+ addChild: function(child) { },
+
+ /**
+ * @return {?WebInspector.DOMNode}
+ */
+ node: function() { },
+
+ /**
+ * @return {?WebInspector.DOMNode}
+ */
+ nodeForSelfOrAncestor: function() { },
+
+ /**
+ * @return {number}
+ */
+ offsetX: function() { },
+
+ /**
+ * @return {number}
+ */
+ offsetY: function() { },
+
+ /**
+ * @return {number}
+ */
+ width: function() { },
+
+ /**
+ * @return {number}
+ */
+ height: function() { },
+
+ /**
+ * @return {?Array.<number>}
+ */
+ transform: function() { },
+
+ /**
+ * @return {?Array.<number>}
+ */
+ quad: function() { },
+
+ /**
+ * @return {!Array.<number>}
+ */
+ anchorPoint: function() { },
+
+ /**
+ * @return {boolean}
+ */
+ invisible: function() { },
+
+ /**
+ * @return {number}
+ */
+ paintCount: function() { },
+
+ /**
+ * @return {?DOMAgent.Rect}
+ */
+ lastPaintRect: function() { },
+
+ /**
+ * @return {!Array.<!LayerTreeAgent.ScrollRect>}
+ */
+ scrollRects: function() { },
+
+ /**
+ * @param {function(!Array.<string>)} callback
+ */
+ requestCompositingReasons: function(callback) { },
+
+ /**
+ * @param {function(!WebInspector.PaintProfilerSnapshot=)} callback
+ */
+ requestSnapshot: function(callback) { },
+}
+
+/**
* @constructor
+ * @implements {WebInspector.Layer}
* @param {!LayerTreeAgent.Layer} layerPayload
*/
-WebInspector.Layer = function(layerPayload)
+WebInspector.AgentLayer = function(layerPayload)
{
this._scrollRects = [];
this._reset(layerPayload);
}
-WebInspector.Layer.prototype = {
+WebInspector.AgentLayer.prototype = {
/**
* @return {string}
*/
@@ -276,7 +438,7 @@ WebInspector.Layer.prototype = {
},
/**
- * @return {string}
+ * @return {?string}
*/
parentId: function()
{
@@ -284,7 +446,7 @@ WebInspector.Layer.prototype = {
},
/**
- * @return {!WebInspector.Layer}
+ * @return {?WebInspector.Layer}
*/
parent: function()
{
@@ -379,7 +541,7 @@ WebInspector.Layer.prototype = {
},
/**
- * @return {!Array.<number>}
+ * @return {?Array.<number>}
*/
transform: function()
{
@@ -387,6 +549,14 @@ WebInspector.Layer.prototype = {
},
/**
+ * @return {?Array.<number>}
+ */
+ quad: function()
+ {
+ return this._quad;
+ },
+
+ /**
* @return {!Array.<number>}
*/
anchorPoint: function()
@@ -532,13 +702,199 @@ WebInspector.Layer.prototype = {
this._children.forEach(calculateQuadForLayer);
},
+}
+/**
+ * @constructor
+ * @param {!WebInspector.TracingLayerPayload} payload
+ * @implements {WebInspector.Layer}
+ */
+WebInspector.TracingLayer = function(payload)
+{
+ this._layerId = String(payload.layer_id);
+ this._offsetX = payload.position[0];
+ this._offsetY = payload.position[1];
+ this._width = payload.bounds.width;
+ this._height = payload.bounds.height;
+ this._children = [];
+ this._parentLayerId = null;
+ this._parent = null;
+ this._quad = payload.layer_quad;
+}
+
+WebInspector.TracingLayer.prototype = {
/**
- * @return {!Array.<number>}
+ * @return {string}
+ */
+ id: function()
+ {
+ return this._layerId;
+ },
+
+ /**
+ * @return {?string}
+ */
+ parentId: function()
+ {
+ return this._parentLayerId;
+ },
+
+ /**
+ * @return {?WebInspector.Layer}
+ */
+ parent: function()
+ {
+ return this._parent;
+ },
+
+ /**
+ * @return {boolean}
+ */
+ isRoot: function()
+ {
+ return !this.parentId();
+ },
+
+ /**
+ * @return {!Array.<!WebInspector.Layer>}
+ */
+ children: function()
+ {
+ return this._children;
+ },
+
+ /**
+ * @param {!WebInspector.Layer} child
+ */
+ addChild: function(child)
+ {
+ if (child._parent)
+ console.assert(false, "Child already has a parent");
+ this._children.push(child);
+ child._parent = this;
+ child._parentLayerId = this._layerId;
+ },
+
+ /**
+ * @return {?WebInspector.DOMNode}
+ */
+ node: function()
+ {
+ return null;
+ },
+
+ /**
+ * @return {?WebInspector.DOMNode}
+ */
+ nodeForSelfOrAncestor: function()
+ {
+ return null;
+ },
+
+ /**
+ * @return {number}
+ */
+ offsetX: function()
+ {
+ return this._offsetX;
+ },
+
+ /**
+ * @return {number}
+ */
+ offsetY: function()
+ {
+ return this._offsetY;
+ },
+
+ /**
+ * @return {number}
+ */
+ width: function()
+ {
+ return this._width;
+ },
+
+ /**
+ * @return {number}
+ */
+ height: function()
+ {
+ return this._height;
+ },
+
+ /**
+ * @return {?Array.<number>}
+ */
+ transform: function()
+ {
+ return null;
+ },
+
+ /**
+ * @return {?Array.<number>}
*/
quad: function()
{
return this._quad;
+ },
+
+ /**
+ * @return {!Array.<number>}
+ */
+ anchorPoint: function()
+ {
+ return [0.5, 0.5, 0];
+ },
+
+ /**
+ * @return {boolean}
+ */
+ invisible: function()
+ {
+ return false;
+ },
+
+ /**
+ * @return {number}
+ */
+ paintCount: function()
+ {
+ return 0;
+ },
+
+ /**
+ * @return {?DOMAgent.Rect}
+ */
+ lastPaintRect: function()
+ {
+ return null;
+ },
+
+ /**
+ * @return {!Array.<!LayerTreeAgent.ScrollRect>}
+ */
+ scrollRects: function()
+ {
+ return [];
+ },
+
+ /**
+ * @param {function(!Array.<string>)} callback
+ */
+ requestCompositingReasons: function(callback)
+ {
+ var wrappedCallback = InspectorBackend.wrapClientCallback(callback, "LayerTreeAgent.reasonsForCompositingLayer(): ", undefined, []);
+ LayerTreeAgent.compositingReasons(this.id(), wrappedCallback);
+ },
+
+ /**
+ * @param {function(!WebInspector.PaintProfilerSnapshot=)} callback
+ */
+ requestSnapshot: function(callback)
+ {
+ var wrappedCallback = InspectorBackend.wrapClientCallback(callback, "LayerTreeAgent.makeSnapshot(): ", WebInspector.PaintProfilerSnapshot);
+ LayerTreeAgent.makeSnapshot(this.id(), wrappedCallback);
}
}
@@ -553,6 +909,15 @@ WebInspector.LayerTreeSnapshot = function(layers)
/**
* @constructor
+ * @param {!WebInspector.TracingLayerPayload} root
+ */
+WebInspector.TracingLayerSnapshot = function(root)
+{
+ this.root = root;
+}
+
+/**
+ * @constructor
* @implements {LayerTreeAgent.Dispatcher}
* @param {!WebInspector.LayerTreeModel} layerTreeModel
*/
« no previous file with comments | « no previous file | Source/devtools/front_end/LayersPanel.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698