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

Side by Side 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2013 Google Inc. All rights reserved. 2 * Copyright (C) 2013 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 return this.element; 72 return this.element;
73 }, 73 },
74 74
75 /** 75 /**
76 * @param {!Element} anchor 76 * @param {!Element} anchor
77 * @param {!WebInspector.Popover} popover 77 * @param {!WebInspector.Popover} popover
78 */ 78 */
79 _showPopover: function(anchor, popover) 79 _showPopover: function(anchor, popover)
80 { 80 {
81 this._popover = popover; 81 this._popover = popover;
82 this._popoverContents = createElement("div"); 82 this._buildPopoverContents().then(maybeShowPopover.bind(this));
83 if (!this._populatePopoverContents()) 83 /**
84 return; 84 * @this {WebInspector.TimelineOverviewPane}
85 var content = new WebInspector.TimelineOverviewPane.PopoverContents(); 85 * @param {!DocumentFragment} fragment
86 content.contentElement.appendChild(this._popoverContents); 86 */
87 popover.showView(content, this._currentPositionElement); 87 function maybeShowPopover(fragment)
88 {
89 if (!fragment.firstChild)
90 return;
91 var content = new WebInspector.TimelineOverviewPane.PopoverContents( );
92 this._popoverContents = content.contentElement.createChild("div");
93 this._popoverContents.appendChild(fragment);
94 popover.showView(content, this._currentPositionElement);
95 }
88 }, 96 },
89 97
90 _onHidePopover: function() 98 _onHidePopover: function()
91 { 99 {
92 this._popover = null; 100 this._popover = null;
93 this._popoverContents = null; 101 this._popoverContents = null;
94 }, 102 },
95 103
96 /** 104 /**
97 * @param {!Event} event 105 * @param {!Event} event
98 */ 106 */
99 _onMouseMove: function(event) 107 _onMouseMove: function(event)
100 { 108 {
101 if (!this._cursorEnabled) 109 if (!this._cursorEnabled)
102 return; 110 return;
103 var x = event.offsetX + event.target.offsetLeft; 111 var x = event.offsetX + event.target.offsetLeft;
104 this._currentPositionElement.style.left = x + "px"; 112 this._currentPositionElement.style.left = x + "px";
105 this._currentPositionElement.style.visibility = "visible"; 113 this._currentPositionElement.style.visibility = "visible";
106 if (!this._popover) 114 if (!this._popover)
107 return; 115 return;
108 this._populatePopoverContents(); 116 this._buildPopoverContents().then(updatePopover.bind(this));
109 this._popover.positionElement(this._currentPositionElement); 117 this._popover.positionElement(this._currentPositionElement);
118 /**
119 * @this {WebInspector.TimelineOverviewPane}
120 * @param {!DocumentFragment} fragment
121 */
122 function updatePopover(fragment)
123 {
124 if (!this._popoverContents)
125 return;
126 this._popoverContents.removeChildren();
127 this._popoverContents.appendChild(fragment);
128 }
129
110 }, 130 },
111 131
112 _populatePopoverContents: function() 132 /**
133 * @return {!Promise<!DocumentFragment>}
134 */
135 _buildPopoverContents: function()
113 { 136 {
114 var cursor = this._currentPositionElement; 137 var cursor = this._currentPositionElement;
115 var x = cursor.offsetLeft; 138 var x = cursor.offsetLeft;
116 var elements = []; 139 var promises = [];
117 for (var control of this._overviewControls) { 140 for (var control of this._overviewControls)
118 var element = control.popoverElement(x); 141 promises.push(control.popoverElementPromise(x))
119 if (element) 142
120 elements.push(element); 143 return Promise.all(promises).then(buildFragment);
144
145 /**
146 * @param {!Array<?Element>} elements
147 */
148 function buildFragment(elements)
149 {
150 var fragment = cursor.ownerDocument.createDocumentFragment();
151 for (var element of elements) {
152 if (element)
153 fragment.appendChild(element);
154 }
155 return fragment;
121 } 156 }
122 this._popoverContents.removeChildren();
123 if (!elements.length)
124 return false;
125 elements.forEach(this._popoverContents.appendChild.bind(this._popoverCon tents));
126 return true;
127 }, 157 },
128 158
129 _hideCurrentPosition: function() 159 _hideCurrentPosition: function()
130 { 160 {
131 this._currentPositionElement.style.visibility = "hidden"; 161 this._currentPositionElement.style.visibility = "hidden";
132 }, 162 },
133 163
134 /** 164 /**
135 * @override 165 * @override
136 */ 166 */
(...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after
423 show: function(parentElement, insertBefore) { }, 453 show: function(parentElement, insertBefore) { },
424 454
425 update: function() { }, 455 update: function() { },
426 456
427 dispose: function() { }, 457 dispose: function() { },
428 458
429 reset: function() { }, 459 reset: function() { },
430 460
431 /** 461 /**
432 * @param {number} x 462 * @param {number} x
433 * @return {?Element} 463 * @return {!Promise<?Element>}
alph 2015/06/19 14:22:38 Looks like over complication. Can it just return a
434 */ 464 */
435 popoverElement: function(x) { }, 465 popoverElementPromise: function(x) { },
436 466
437 /** 467 /**
438 * @param {!Event} event 468 * @param {!Event} event
439 * @return {boolean} 469 * @return {boolean}
440 */ 470 */
441 onClick: function(event) { }, 471 onClick: function(event) { },
442 472
443 /** 473 /**
444 * @param {number} windowLeft 474 * @param {number} windowLeft
445 * @param {number} windowRight 475 * @param {number} windowRight
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
493 /** 523 /**
494 * @override 524 * @override
495 */ 525 */
496 reset: function() 526 reset: function()
497 { 527 {
498 }, 528 },
499 529
500 /** 530 /**
501 * @override 531 * @override
502 * @param {number} x 532 * @param {number} x
503 * @return {?Element} 533 * @return {!Promise<?Element>}
504 */ 534 */
505 popoverElement: function(x) 535 popoverElementPromise: function(x)
506 { 536 {
507 return null; 537 return Promise.resolve(/** @type {?Element} */ (null));
508 }, 538 },
509 539
510 /** 540 /**
511 * @override 541 * @override
512 */ 542 */
513 timelineStarted: function() 543 timelineStarted: function()
514 { 544 {
515 }, 545 },
516 546
517 /** 547 /**
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
573 }, 603 },
574 604
575 resetCanvas: function() 605 resetCanvas: function()
576 { 606 {
577 this._canvas.width = this.element.clientWidth * window.devicePixelRatio; 607 this._canvas.width = this.element.clientWidth * window.devicePixelRatio;
578 this._canvas.height = this.element.clientHeight * window.devicePixelRati o; 608 this._canvas.height = this.element.clientHeight * window.devicePixelRati o;
579 }, 609 },
580 610
581 __proto__: WebInspector.VBox.prototype 611 __proto__: WebInspector.VBox.prototype
582 } 612 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698