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

Side by Side Diff: third_party/WebKit/Source/devtools/front_end/timeline/TimelineUIUtils.js

Issue 2713363002: DevTools: Highlight DOM node on hover in flamechart. (Closed)
Patch Set: Created 3 years, 10 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2013 Google Inc. All rights reserved. 2 * Copyright (C) 2013 Google Inc. All rights reserved.
3 * Copyright (C) 2012 Intel Inc. All rights reserved. 3 * Copyright (C) 2012 Intel Inc. All rights reserved.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are 6 * modification, are permitted provided that the following conditions are
7 * met: 7 * met:
8 * 8 *
9 * * Redistributions of source code must retain the above copyright 9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer. 10 * notice, this list of conditions and the following disclaimer.
(...skipping 655 matching lines...) Expand 10 before | Expand all | Expand 10 after
666 var frame = TimelineModel.TimelineData.forEvent(event).topFrame(); 666 var frame = TimelineModel.TimelineData.forEvent(event).topFrame();
667 return frame ? linkifier.maybeLinkifyConsoleCallFrame(target, frame, 'time line-details') : null; 667 return frame ? linkifier.maybeLinkifyConsoleCallFrame(target, frame, 'time line-details') : null;
668 } 668 }
669 } 669 }
670 670
671 /** 671 /**
672 * @param {!SDK.TracingModel.Event} event 672 * @param {!SDK.TracingModel.Event} event
673 * @param {!TimelineModel.TimelineModel} model 673 * @param {!TimelineModel.TimelineModel} model
674 * @param {!Components.Linkifier} linkifier 674 * @param {!Components.Linkifier} linkifier
675 * @param {boolean} detailed 675 * @param {boolean} detailed
676 * @param {function(!DocumentFragment)} callback 676 * @return {!Promise<!DocumentFragment>}
677 */ 677 */
678 static buildTraceEventDetails(event, model, linkifier, detailed, callback) { 678 static async buildTraceEventDetails(event, model, linkifier, detailed) {
679 var target = model.targetByEvent(event); 679 var maybeTarget = model.targetByEvent(event);
680 if (!target) { 680 if (!maybeTarget) {
681 callbackWrapper(); 681 return Timeline.TimelineUIUtils._buildTraceEventDetailsSynchronously(
682 return; 682 event, model, linkifier, detailed, null);
683 } 683 }
684 var relatedNodes = null; 684
685 var target = /** @type {!SDK.Target} */ (maybeTarget);
685 var barrier = new CallbackBarrier(); 686 var barrier = new CallbackBarrier();
686 if (!event[Timeline.TimelineUIUtils._previewElementSymbol]) { 687 if (!event[Timeline.TimelineUIUtils._previewElementSymbol]) {
687 var url = TimelineModel.TimelineData.forEvent(event).url; 688 var url = TimelineModel.TimelineData.forEvent(event).url;
688 if (url) { 689 event[Timeline.TimelineUIUtils._previewElementSymbol] = await new Promise( fulfill => {
689 Components.DOMPresentationUtils.buildImagePreviewContents( 690 if (url)
690 target, url, false, barrier.createCallback(saveImage)); 691 Components.DOMPresentationUtils.buildImagePreviewContents(target, url, false, fulfill);
691 } else if (TimelineModel.TimelineData.forEvent(event).picture) { 692 else if (TimelineModel.TimelineData.forEvent(event).picture)
692 Timeline.TimelineUIUtils.buildPicturePreviewContent(event, target, barri er.createCallback(saveImage)); 693 Timeline.TimelineUIUtils.buildPicturePreviewContent(event, target, ful fill);
693 } 694 else
695 fulfill();
696 }) || null;
694 } 697 }
698
695 var nodeIdsToResolve = new Set(); 699 var nodeIdsToResolve = new Set();
696 var timelineData = TimelineModel.TimelineData.forEvent(event); 700 var timelineData = TimelineModel.TimelineData.forEvent(event);
697 if (timelineData.backendNodeId) 701 if (timelineData.backendNodeId)
698 nodeIdsToResolve.add(timelineData.backendNodeId); 702 nodeIdsToResolve.add(timelineData.backendNodeId);
699 var invalidationTrackingEvents = TimelineModel.InvalidationTracker.invalidat ionEventsFor(event); 703 var invalidationTrackingEvents = TimelineModel.InvalidationTracker.invalidat ionEventsFor(event);
700 if (invalidationTrackingEvents) 704 if (invalidationTrackingEvents)
701 Timeline.TimelineUIUtils._collectInvalidationNodeIds(nodeIdsToResolve, inv alidationTrackingEvents); 705 Timeline.TimelineUIUtils._collectInvalidationNodeIds(nodeIdsToResolve, inv alidationTrackingEvents);
706 var relatedNodes = null;
702 if (nodeIdsToResolve.size) { 707 if (nodeIdsToResolve.size) {
703 var domModel = SDK.DOMModel.fromTarget(target); 708 var domModel = SDK.DOMModel.fromTarget(target);
704 if (domModel) 709 if (domModel) {
705 domModel.pushNodesByBackendIdsToFrontend(nodeIdsToResolve, barrier.creat eCallback(setRelatedNodeMap)); 710 relatedNodes = await new Promise(fulfill =>
706 } 711 domModel.pushNodesByBackendIdsToFrontend(nodeIdsToResolve, fulfill)) ;
707 barrier.callWhenDone(callbackWrapper); 712 }
708
709 /**
710 * @param {!Element=} element
711 */
712 function saveImage(element) {
713 event[Timeline.TimelineUIUtils._previewElementSymbol] = element || null;
714 } 713 }
715 714
716 /** 715 return Timeline.TimelineUIUtils._buildTraceEventDetailsSynchronously(
717 * @param {?Map<number, ?SDK.DOMNode>} nodeMap 716 event, model, linkifier, detailed, relatedNodes);
718 */
719 function setRelatedNodeMap(nodeMap) {
720 relatedNodes = nodeMap;
721 }
722
723 function callbackWrapper() {
724 callback(Timeline.TimelineUIUtils._buildTraceEventDetailsSynchronously(
725 event, model, linkifier, detailed, relatedNodes));
726 }
727 } 717 }
728 718
729 /** 719 /**
730 * @param {!SDK.TracingModel.Event} event 720 * @param {!SDK.TracingModel.Event} event
731 * @param {!TimelineModel.TimelineModel} model 721 * @param {!TimelineModel.TimelineModel} model
732 * @param {!Components.Linkifier} linkifier 722 * @param {!Components.Linkifier} linkifier
733 * @param {boolean} detailed 723 * @param {boolean} detailed
734 * @param {?Map<number, ?SDK.DOMNode>} relatedNodesMap 724 * @param {?Map<number, ?SDK.DOMNode>} relatedNodesMap
735 * @return {!DocumentFragment} 725 * @return {!DocumentFragment}
736 */ 726 */
(...skipping 1565 matching lines...) Expand 10 before | Expand all | Expand 10 after
2302 * @param {string=} warningType 2292 * @param {string=} warningType
2303 */ 2293 */
2304 appendWarningRow(event, warningType) { 2294 appendWarningRow(event, warningType) {
2305 var warning = Timeline.TimelineUIUtils.eventWarning(event, warningType); 2295 var warning = Timeline.TimelineUIUtils.eventWarning(event, warningType);
2306 if (warning) 2296 if (warning)
2307 this.appendElementRow(Common.UIString('Warning'), warning, true); 2297 this.appendElementRow(Common.UIString('Warning'), warning, true);
2308 } 2298 }
2309 }; 2299 };
2310 2300
2311 Timeline.TimelineUIUtils._categoryBreakdownCacheSymbol = Symbol('categoryBreakdo wnCache'); 2301 Timeline.TimelineUIUtils._categoryBreakdownCacheSymbol = Symbol('categoryBreakdo wnCache');
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698