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

Unified Diff: Source/devtools/front_end/ui_lazy/TimelineOverviewPane.js

Issue 1184383002: DevTools: adopt FilmStripModel to new screenshot recorder trace format (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: made popover generation async Created 5 years, 6 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
Index: Source/devtools/front_end/ui_lazy/TimelineOverviewPane.js
diff --git a/Source/devtools/front_end/ui_lazy/TimelineOverviewPane.js b/Source/devtools/front_end/ui_lazy/TimelineOverviewPane.js
index 9ec0dae79af96d8f648772ffbdc528bd4d376d17..a337256f4488cb7b54d7b0631b8ddc4d1aaadc21 100644
--- a/Source/devtools/front_end/ui_lazy/TimelineOverviewPane.js
+++ b/Source/devtools/front_end/ui_lazy/TimelineOverviewPane.js
@@ -79,12 +79,20 @@ WebInspector.TimelineOverviewPane.prototype = {
_showPopover: function(anchor, popover)
{
this._popover = popover;
- this._popoverContents = createElement("div");
- if (!this._populatePopoverContents())
- return;
- var content = new WebInspector.TimelineOverviewPane.PopoverContents();
- content.contentElement.appendChild(this._popoverContents);
- popover.showView(content, this._currentPositionElement);
+ this._buildPopoverContents().then(maybeShowPopover.bind(this));
+ /**
+ * @this {WebInspector.TimelineOverviewPane}
+ * @param {!DocumentFragment} fragment
+ */
+ function maybeShowPopover(fragment)
+ {
+ if (!fragment.firstChild)
+ return;
+ var content = new WebInspector.TimelineOverviewPane.PopoverContents();
+ this._popoverContents = content.contentElement.createChild("div");
+ this._popoverContents.appendChild(fragment);
+ popover.showView(content, this._currentPositionElement);
+ }
},
_onHidePopover: function()
@@ -105,25 +113,47 @@ WebInspector.TimelineOverviewPane.prototype = {
this._currentPositionElement.style.visibility = "visible";
if (!this._popover)
return;
- this._populatePopoverContents();
+ this._buildPopoverContents().then(updatePopover.bind(this));
this._popover.positionElement(this._currentPositionElement);
+ /**
+ * @this {WebInspector.TimelineOverviewPane}
+ * @param {!DocumentFragment} fragment
+ */
+ function updatePopover(fragment)
+ {
+ if (!this._popoverContents)
+ return;
+ this._popoverContents.removeChildren();
+ this._popoverContents.appendChild(fragment);
+ }
+
},
- _populatePopoverContents: function()
+ /**
+ * @return {!Promise<!DocumentFragment>}
+ */
+ _buildPopoverContents: function()
{
var cursor = this._currentPositionElement;
var x = cursor.offsetLeft;
- var elements = [];
- for (var control of this._overviewControls) {
- var element = control.popoverElement(x);
- if (element)
- elements.push(element);
+ var promises = [];
+ for (var control of this._overviewControls)
+ promises.push(control.popoverElementPromise(x))
+
+ return Promise.all(promises).then(buildFragment);
+
+ /**
+ * @param {!Array<?Element>} elements
+ */
+ function buildFragment(elements)
+ {
+ var fragment = cursor.ownerDocument.createDocumentFragment();
+ for (var element of elements) {
+ if (element)
+ fragment.appendChild(element);
+ }
+ return fragment;
}
- this._popoverContents.removeChildren();
- if (!elements.length)
- return false;
- elements.forEach(this._popoverContents.appendChild.bind(this._popoverContents));
- return true;
},
_hideCurrentPosition: function()
@@ -430,9 +460,9 @@ WebInspector.TimelineOverview.prototype = {
/**
* @param {number} x
- * @return {?Element}
+ * @return {!Promise<?Element>}
alph 2015/06/19 14:22:38 Looks like over complication. Can it just return a
*/
- popoverElement: function(x) { },
+ popoverElementPromise: function(x) { },
/**
* @param {!Event} event
@@ -500,11 +530,11 @@ WebInspector.TimelineOverviewBase.prototype = {
/**
* @override
* @param {number} x
- * @return {?Element}
+ * @return {!Promise<?Element>}
*/
- popoverElement: function(x)
+ popoverElementPromise: function(x)
{
- return null;
+ return Promise.resolve(/** @type {?Element} */ (null));
},
/**

Powered by Google App Engine
This is Rietveld 408576698