Index: Source/devtools/front_end/timeline/TimelinePanel.js |
diff --git a/Source/devtools/front_end/timeline/TimelinePanel.js b/Source/devtools/front_end/timeline/TimelinePanel.js |
index 7325975dba24818d6cdba85c7a833e52a74f1c3a..81bfb2aebbdbcfb90ebdc4a35f0612e8352d0d15 100644 |
--- a/Source/devtools/front_end/timeline/TimelinePanel.js |
+++ b/Source/devtools/front_end/timeline/TimelinePanel.js |
@@ -1820,6 +1820,7 @@ WebInspector.TimelineFilmStripOverview = function(tracingModel) |
this._filmStripView = new WebInspector.FilmStripView(); |
this._filmStripView.show(this.element); |
this._lastFrame = null; |
+ /** @type {?Element} */ |
this._lastElement = null; |
} |
@@ -1837,20 +1838,31 @@ WebInspector.TimelineFilmStripOverview.prototype = { |
/** |
* @override |
* @param {number} x |
- * @return {?Element} |
+ * @return {!Promise<?Element>} |
*/ |
- popoverElement: function(x) |
+ popoverElementPromise: function(x) |
{ |
if (!this._filmStripModel || !this._filmStripModel.frames().length) |
- return null; |
+ return Promise.resolve(/** @type {?Element} */ (null)); |
+ |
var time = this._calculator.positionToTime(x); |
var frame = this._filmStripView.frameByTime(time); |
- if (frame !== this._lastFrame) { |
+ if (frame === this._lastFrame) |
+ return Promise.resolve(this._lastElement); |
+ |
+ return /** @type {!Promise<?Element>} */ (this._filmStripView.createFrameElement(frame).then(onElementCreated.bind(this))); |
+ /** |
+ * @this {WebInspector.TimelineFilmStripOverview} |
+ * @param {!Element} frameElement |
+ * @return {!Element} |
+ */ |
+ function onElementCreated(frameElement) |
+ { |
this._lastFrame = frame; |
- this._lastElement = this._filmStripView.createFrameElement(frame); |
+ this._lastElement = frameElement; |
this._lastElement.appendChild(WebInspector.Widget.createStyleElement("timeline/timelinePanel.css")); |
+ return this._lastElement; |
} |
- return this._lastElement; |
}, |
/** |