| Index: third_party/WebKit/Source/devtools/front_end/timeline/TimelineUIUtils.js
|
| diff --git a/third_party/WebKit/Source/devtools/front_end/timeline/TimelineUIUtils.js b/third_party/WebKit/Source/devtools/front_end/timeline/TimelineUIUtils.js
|
| index 8cc06a91535a3f19c683323b7615a33516abee09..6d4b53e8b2961c68ff48004acf440e6116347dab 100644
|
| --- a/third_party/WebKit/Source/devtools/front_end/timeline/TimelineUIUtils.js
|
| +++ b/third_party/WebKit/Source/devtools/front_end/timeline/TimelineUIUtils.js
|
| @@ -673,25 +673,28 @@ Timeline.TimelineUIUtils = class {
|
| * @param {!TimelineModel.TimelineModel} model
|
| * @param {!Components.Linkifier} linkifier
|
| * @param {boolean} detailed
|
| - * @param {function(!DocumentFragment)} callback
|
| + * @return {!Promise<!DocumentFragment>}
|
| */
|
| - static buildTraceEventDetails(event, model, linkifier, detailed, callback) {
|
| - var target = model.targetByEvent(event);
|
| - if (!target) {
|
| - callbackWrapper();
|
| - return;
|
| + static async buildTraceEventDetails(event, model, linkifier, detailed) {
|
| + var maybeTarget = model.targetByEvent(event);
|
| + if (!maybeTarget) {
|
| + return Timeline.TimelineUIUtils._buildTraceEventDetailsSynchronously(
|
| + event, model, linkifier, detailed, null);
|
| }
|
| - var relatedNodes = null;
|
| - var barrier = new CallbackBarrier();
|
| +
|
| + var target = /** @type {!SDK.Target} */ (maybeTarget);
|
| if (!event[Timeline.TimelineUIUtils._previewElementSymbol]) {
|
| var url = TimelineModel.TimelineData.forEvent(event).url;
|
| - if (url) {
|
| - Components.DOMPresentationUtils.buildImagePreviewContents(
|
| - target, url, false, barrier.createCallback(saveImage));
|
| - } else if (TimelineModel.TimelineData.forEvent(event).picture) {
|
| - Timeline.TimelineUIUtils.buildPicturePreviewContent(event, target, barrier.createCallback(saveImage));
|
| - }
|
| + event[Timeline.TimelineUIUtils._previewElementSymbol] = await new Promise(fulfill => {
|
| + if (url)
|
| + Components.DOMPresentationUtils.buildImagePreviewContents(target, url, false, fulfill);
|
| + else if (TimelineModel.TimelineData.forEvent(event).picture)
|
| + Timeline.TimelineUIUtils.buildPicturePreviewContent(event, target, fulfill);
|
| + else
|
| + fulfill();
|
| + }) || null;
|
| }
|
| +
|
| var nodeIdsToResolve = new Set();
|
| var timelineData = TimelineModel.TimelineData.forEvent(event);
|
| if (timelineData.backendNodeId)
|
| @@ -699,31 +702,17 @@ Timeline.TimelineUIUtils = class {
|
| var invalidationTrackingEvents = TimelineModel.InvalidationTracker.invalidationEventsFor(event);
|
| if (invalidationTrackingEvents)
|
| Timeline.TimelineUIUtils._collectInvalidationNodeIds(nodeIdsToResolve, invalidationTrackingEvents);
|
| + var relatedNodes = null;
|
| if (nodeIdsToResolve.size) {
|
| var domModel = SDK.DOMModel.fromTarget(target);
|
| - if (domModel)
|
| - domModel.pushNodesByBackendIdsToFrontend(nodeIdsToResolve, barrier.createCallback(setRelatedNodeMap));
|
| - }
|
| - barrier.callWhenDone(callbackWrapper);
|
| -
|
| - /**
|
| - * @param {!Element=} element
|
| - */
|
| - function saveImage(element) {
|
| - event[Timeline.TimelineUIUtils._previewElementSymbol] = element || null;
|
| - }
|
| -
|
| - /**
|
| - * @param {?Map<number, ?SDK.DOMNode>} nodeMap
|
| - */
|
| - function setRelatedNodeMap(nodeMap) {
|
| - relatedNodes = nodeMap;
|
| + if (domModel) {
|
| + relatedNodes = await new Promise(fulfill =>
|
| + domModel.pushNodesByBackendIdsToFrontend(nodeIdsToResolve, fulfill));
|
| + }
|
| }
|
|
|
| - function callbackWrapper() {
|
| - callback(Timeline.TimelineUIUtils._buildTraceEventDetailsSynchronously(
|
| - event, model, linkifier, detailed, relatedNodes));
|
| - }
|
| + return Timeline.TimelineUIUtils._buildTraceEventDetailsSynchronously(
|
| + event, model, linkifier, detailed, relatedNodes);
|
| }
|
|
|
| /**
|
|
|