2 * Copyright 2014 The Chromium Authors. All rights reserved.
3 * Use of this source code is governed by a BSD-style license that can be
4 * found in the LICENSE file.
9 * @extends {WebInspector.VBox}
11 WebInspector.TimelineLayersView = function()
13 WebInspector.VBox.call(this);
15 this._paintTiles = [];
16 this._layers3DView = new WebInspector.Layers3DView();
17 this._layers3DView.addEventListener(WebInspector.Layers3DView.Events.ObjectSelected, this._onObjectSelected, this);
18 this._layers3DView.addEventListener(WebInspector.Layers3DView.Events.ObjectHovered, this._onObjectHovered, this);
19 this._layers3DView.addEventListener(WebInspector.Layers3DView.Events.JumpToPaintEventRequested, this._jumpToPaintEvent, this);
20 this._layers3DView.show(this.element);
23 WebInspector.TimelineLayersView.prototype = {
25 * @param {!WebInspector.DeferredLayerTree} deferredLayerTree
26 * @param {?Array.<!WebInspector.LayerPaintEvent>} paints
28 showLayerTree: function(deferredLayerTree, paints)
31 this._deferredLayerTree = deferredLayerTree;
32 this._paints = paints;
36 this._updateWhenVisible = true;
41 if (this._updateWhenVisible) {
42 this._updateWhenVisible = false;
48 * @param {!WebInspector.TimelineModel} model
49 * @param {!WebInspector.TimelineModeViewDelegate} delegate
51 setTimelineModelAndDelegate: function(model, delegate)
54 this._delegate = delegate;
58 * @param {!WebInspector.Event} event
60 _jumpToPaintEvent: function(event)
62 var traceEvent = event.data;
66 * @param {!WebInspector.TimelineModel.Record} record
69 function findRecordWithEvent(record)
71 if (record.traceEvent() === traceEvent) {
78 this._model.forAllRecords(findRecordWithEvent);
80 var selection = WebInspector.TimelineSelection.fromRecord(eventRecord);
81 this._delegate.select(selection);
89 this._target = this._deferredLayerTree.target();
90 var originalTiles = this._paintTiles;
91 var tilesReadyBarrier = new CallbackBarrier();
92 this._deferredLayerTree.resolve(tilesReadyBarrier.createCallback(onLayersReady));
93 for (var i = 0; this._paints && i < this._paints.length; ++i)
94 this._paints[i].loadPicture(tilesReadyBarrier.createCallback(onSnapshotLoaded.bind(this, this._paints[i])));
95 tilesReadyBarrier.callWhenDone(onLayersAndTilesReady.bind(this));
98 * @param {!WebInspector.LayerTreeBase} resolvedLayerTree
100 function onLayersReady(resolvedLayerTree)
102 layerTree = resolvedLayerTree;
106 * @param {!WebInspector.LayerPaintEvent} paintEvent
107 * @param {?Array.<number>} rect
108 * @param {?WebInspector.PaintProfilerSnapshot} snapshot
109 * @this {WebInspector.TimelineLayersView}
111 function onSnapshotLoaded(paintEvent, rect, snapshot)
113 if (!rect || !snapshot)
115 // We're too late and there's a new generation of tiles being loaded.
116 if (originalTiles !== this._paintTiles) {
120 this._paintTiles.push({layerId: paintEvent.layerId(), rect: rect, snapshot: snapshot, traceEvent: paintEvent.event()});
124 * @this {WebInspector.TimelineLayersView}
126 function onLayersAndTilesReady()
128 this._layers3DView.setLayerTree(layerTree);
129 this._layers3DView.setTiles(this._paintTiles);
134 * @param {?WebInspector.Layers3DView.ActiveObject} activeObject
136 _selectObject: function(activeObject)
138 var layer = activeObject && activeObject.layer;
139 if (this._currentlySelectedLayer === activeObject)
141 this._currentlySelectedLayer = activeObject;
142 this._toggleNodeHighlight(layer ? layer.nodeForSelfOrAncestor() : null);
143 this._layers3DView.selectObject(activeObject);
147 * @param {?WebInspector.Layers3DView.ActiveObject} activeObject
149 _hoverObject: function(activeObject)
151 var layer = activeObject && activeObject.layer;
152 if (this._currentlyHoveredLayer === activeObject)
154 this._currentlyHoveredLayer = activeObject;
155 this._toggleNodeHighlight(layer ? layer.nodeForSelfOrAncestor() : null);
156 this._layers3DView.hoverObject(activeObject);
160 * @param {?WebInspector.DOMNode} node
162 _toggleNodeHighlight: function(node)
165 node.highlightForTwoSeconds();
169 this._target.domModel.hideDOMNodeHighlight();
174 * @param {!WebInspector.Event} event
176 _onObjectSelected: function(event)
178 var activeObject = /** @type {!WebInspector.Layers3DView.ActiveObject} */ (event.data);
179 this._selectObject(activeObject);
183 * @param {!WebInspector.Event} event
185 _onObjectHovered: function(event)
187 var activeObject = /** @type {!WebInspector.Layers3DView.ActiveObject} */ (event.data);
188 this._hoverObject(activeObject);
191 _disposeTiles: function()
193 for (var i = 0; i < this._paintTiles.length; ++i)
194 this._paintTiles[i].snapshot.dispose();
195 this._paintTiles = [];
198 __proto__: WebInspector.VBox.prototype