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

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: fix tests Created 3 years, 9 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 barrier = new CallbackBarrier(); 685 var target = /** @type {!SDK.Target} */ (maybeTarget);
686 if (!event[Timeline.TimelineUIUtils._previewElementSymbol]) { 686 if (!event[Timeline.TimelineUIUtils._previewElementSymbol]) {
687 var url = TimelineModel.TimelineData.forEvent(event).url; 687 var url = TimelineModel.TimelineData.forEvent(event).url;
688 if (url) { 688 event[Timeline.TimelineUIUtils._previewElementSymbol] = await new Promise( fulfill => {
689 Components.DOMPresentationUtils.buildImagePreviewContents( 689 if (url)
690 target, url, false, barrier.createCallback(saveImage)); 690 Components.DOMPresentationUtils.buildImagePreviewContents(target, url, false, fulfill);
691 } else if (TimelineModel.TimelineData.forEvent(event).picture) { 691 else if (TimelineModel.TimelineData.forEvent(event).picture)
692 Timeline.TimelineUIUtils.buildPicturePreviewContent(event, target, barri er.createCallback(saveImage)); 692 Timeline.TimelineUIUtils.buildPicturePreviewContent(event, target, ful fill);
693 } 693 else
694 fulfill();
695 }) || null;
694 } 696 }
697
695 var nodeIdsToResolve = new Set(); 698 var nodeIdsToResolve = new Set();
696 var timelineData = TimelineModel.TimelineData.forEvent(event); 699 var timelineData = TimelineModel.TimelineData.forEvent(event);
697 if (timelineData.backendNodeId) 700 if (timelineData.backendNodeId)
698 nodeIdsToResolve.add(timelineData.backendNodeId); 701 nodeIdsToResolve.add(timelineData.backendNodeId);
699 var invalidationTrackingEvents = TimelineModel.InvalidationTracker.invalidat ionEventsFor(event); 702 var invalidationTrackingEvents = TimelineModel.InvalidationTracker.invalidat ionEventsFor(event);
700 if (invalidationTrackingEvents) 703 if (invalidationTrackingEvents)
701 Timeline.TimelineUIUtils._collectInvalidationNodeIds(nodeIdsToResolve, inv alidationTrackingEvents); 704 Timeline.TimelineUIUtils._collectInvalidationNodeIds(nodeIdsToResolve, inv alidationTrackingEvents);
705 var relatedNodes = null;
702 if (nodeIdsToResolve.size) { 706 if (nodeIdsToResolve.size) {
703 var domModel = SDK.DOMModel.fromTarget(target); 707 var domModel = SDK.DOMModel.fromTarget(target);
704 if (domModel) 708 if (domModel) {
705 domModel.pushNodesByBackendIdsToFrontend(nodeIdsToResolve, barrier.creat eCallback(setRelatedNodeMap)); 709 relatedNodes = await new Promise(fulfill =>
706 } 710 domModel.pushNodesByBackendIdsToFrontend(nodeIdsToResolve, fulfill)) ;
707 barrier.callWhenDone(callbackWrapper); 711 }
708
709 /**
710 * @param {!Element=} element
711 */
712 function saveImage(element) {
713 event[Timeline.TimelineUIUtils._previewElementSymbol] = element || null;
714 } 712 }
715 713
716 /** 714 return Timeline.TimelineUIUtils._buildTraceEventDetailsSynchronously(
717 * @param {?Map<number, ?SDK.DOMNode>} nodeMap 715 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 } 716 }
728 717
729 /** 718 /**
730 * @param {!SDK.TracingModel.Event} event 719 * @param {!SDK.TracingModel.Event} event
731 * @param {!TimelineModel.TimelineModel} model 720 * @param {!TimelineModel.TimelineModel} model
732 * @param {!Components.Linkifier} linkifier 721 * @param {!Components.Linkifier} linkifier
733 * @param {boolean} detailed 722 * @param {boolean} detailed
734 * @param {?Map<number, ?SDK.DOMNode>} relatedNodesMap 723 * @param {?Map<number, ?SDK.DOMNode>} relatedNodesMap
735 * @return {!DocumentFragment} 724 * @return {!DocumentFragment}
736 */ 725 */
(...skipping 1565 matching lines...) Expand 10 before | Expand all | Expand 10 after
2302 * @param {string=} warningType 2291 * @param {string=} warningType
2303 */ 2292 */
2304 appendWarningRow(event, warningType) { 2293 appendWarningRow(event, warningType) {
2305 var warning = Timeline.TimelineUIUtils.eventWarning(event, warningType); 2294 var warning = Timeline.TimelineUIUtils.eventWarning(event, warningType);
2306 if (warning) 2295 if (warning)
2307 this.appendElementRow(Common.UIString('Warning'), warning, true); 2296 this.appendElementRow(Common.UIString('Warning'), warning, true);
2308 } 2297 }
2309 }; 2298 };
2310 2299
2311 Timeline.TimelineUIUtils._categoryBreakdownCacheSymbol = Symbol('categoryBreakdo wnCache'); 2300 Timeline.TimelineUIUtils._categoryBreakdownCacheSymbol = Symbol('categoryBreakdo wnCache');
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698