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

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

Issue 2859343002: DevTools: Add Product field in timeline event details. (Closed)
Patch Set: addressing comments Created 3 years, 7 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 670 matching lines...) Expand 10 before | Expand all | Expand 10 after
681 681
682 /** 682 /**
683 * @param {!SDK.TracingModel.Event} event 683 * @param {!SDK.TracingModel.Event} event
684 * @param {!TimelineModel.TimelineModel} model 684 * @param {!TimelineModel.TimelineModel} model
685 * @param {!Components.Linkifier} linkifier 685 * @param {!Components.Linkifier} linkifier
686 * @param {boolean} detailed 686 * @param {boolean} detailed
687 * @return {!Promise<!DocumentFragment>} 687 * @return {!Promise<!DocumentFragment>}
688 */ 688 */
689 static async buildTraceEventDetails(event, model, linkifier, detailed) { 689 static async buildTraceEventDetails(event, model, linkifier, detailed) {
690 var maybeTarget = model.targetByEvent(event); 690 var maybeTarget = model.targetByEvent(event);
691 if (!maybeTarget) { 691 /** @type {?Map<number, ?SDK.DOMNode>} */
692 return Timeline.TimelineUIUtils._buildTraceEventDetailsSynchronously( 692 var relatedNodesMap = null;
693 event, model, linkifier, detailed, null); 693 if (maybeTarget) {
694 } 694 var target = /** @type {!SDK.Target} */ (maybeTarget);
695 if (typeof event[Timeline.TimelineUIUtils._previewElementSymbol] === 'unde fined') {
696 var previewElement = null;
697 var url = TimelineModel.TimelineData.forEvent(event).url;
698 if (url)
699 previewElement = await Components.DOMPresentationUtils.buildImagePrevi ewContents(target, url, false);
700 else if (TimelineModel.TimelineData.forEvent(event).picture)
701 previewElement = await Timeline.TimelineUIUtils.buildPicturePreviewCon tent(event, target);
702 event[Timeline.TimelineUIUtils._previewElementSymbol] = previewElement;
703 }
695 704
696 var target = /** @type {!SDK.Target} */ (maybeTarget); 705 /** @type {!Set<number>} */
697 if (typeof event[Timeline.TimelineUIUtils._previewElementSymbol] === 'undefi ned') { 706 var nodeIdsToResolve = new Set();
698 var previewElement = null; 707 var timelineData = TimelineModel.TimelineData.forEvent(event);
699 var url = TimelineModel.TimelineData.forEvent(event).url; 708 if (timelineData.backendNodeId)
700 if (url) 709 nodeIdsToResolve.add(timelineData.backendNodeId);
701 previewElement = await Components.DOMPresentationUtils.buildImagePreview Contents(target, url, false); 710 var invalidationTrackingEvents = TimelineModel.InvalidationTracker.invalid ationEventsFor(event);
702 else if (TimelineModel.TimelineData.forEvent(event).picture) 711 if (invalidationTrackingEvents)
703 previewElement = await Timeline.TimelineUIUtils.buildPicturePreviewConte nt(event, target); 712 Timeline.TimelineUIUtils._collectInvalidationNodeIds(nodeIdsToResolve, i nvalidationTrackingEvents);
704 event[Timeline.TimelineUIUtils._previewElementSymbol] = previewElement; 713 if (nodeIdsToResolve.size) {
705 } 714 var domModel = target.model(SDK.DOMModel);
706 715 if (domModel) {
707 var nodeIdsToResolve = new Set(); 716 relatedNodesMap =
708 var timelineData = TimelineModel.TimelineData.forEvent(event); 717 await new Promise(fulfill => domModel.pushNodesByBackendIdsToFront end(nodeIdsToResolve, fulfill));
709 if (timelineData.backendNodeId) 718 }
710 nodeIdsToResolve.add(timelineData.backendNodeId);
711 var invalidationTrackingEvents = TimelineModel.InvalidationTracker.invalidat ionEventsFor(event);
712 if (invalidationTrackingEvents)
713 Timeline.TimelineUIUtils._collectInvalidationNodeIds(nodeIdsToResolve, inv alidationTrackingEvents);
714 var relatedNodes = null;
715 if (nodeIdsToResolve.size) {
716 var domModel = target.model(SDK.DOMModel);
717 if (domModel) {
718 relatedNodes = await new Promise(fulfill =>
719 domModel.pushNodesByBackendIdsToFrontend(nodeIdsToResolve, fulfill)) ;
720 } 719 }
721 } 720 }
722 721
723 return Timeline.TimelineUIUtils._buildTraceEventDetailsSynchronously(
724 event, model, linkifier, detailed, relatedNodes);
725 }
726
727 /**
728 * @param {!SDK.TracingModel.Event} event
729 * @param {!TimelineModel.TimelineModel} model
730 * @param {!Components.Linkifier} linkifier
731 * @param {boolean} detailed
732 * @param {?Map<number, ?SDK.DOMNode>} relatedNodesMap
733 * @return {!DocumentFragment}
734 */
735 static _buildTraceEventDetailsSynchronously(event, model, linkifier, detailed, relatedNodesMap) {
736 var recordTypes = TimelineModel.TimelineModel.RecordType; 722 var recordTypes = TimelineModel.TimelineModel.RecordType;
737 // This message may vary per event.name; 723 // This message may vary per event.name;
738 var relatedNodeLabel; 724 var relatedNodeLabel;
739 725
740 var contentHelper = new Timeline.TimelineDetailsContentHelper(model.targetBy Event(event), linkifier); 726 var contentHelper = new Timeline.TimelineDetailsContentHelper(model.targetBy Event(event), linkifier);
741 contentHelper.addSection( 727 contentHelper.addSection(
742 Timeline.TimelineUIUtils.eventTitle(event), Timeline.TimelineUIUtils.eve ntStyle(event).category.color); 728 Timeline.TimelineUIUtils.eventTitle(event), Timeline.TimelineUIUtils.eve ntStyle(event).category.color);
743 729
744 var eventData = event.args['data']; 730 var eventData = event.args['data'];
745 var timelineData = TimelineModel.TimelineData.forEvent(event); 731 var timelineData = TimelineModel.TimelineData.forEvent(event);
746 var initiator = timelineData.initiator(); 732 var initiator = timelineData.initiator();
733 var url = null;
747 734
748 if (timelineData.warning) 735 if (timelineData.warning)
749 contentHelper.appendWarningRow(event); 736 contentHelper.appendWarningRow(event);
750 if (event.name === recordTypes.JSFrame && eventData['deoptReason']) 737 if (event.name === recordTypes.JSFrame && eventData['deoptReason'])
751 contentHelper.appendWarningRow(event, TimelineModel.TimelineModel.WarningT ype.V8Deopt); 738 contentHelper.appendWarningRow(event, TimelineModel.TimelineModel.WarningT ype.V8Deopt);
752 739
753 if (detailed) { 740 if (detailed) {
741 contentHelper.appendTextRow(Common.UIString('Total Time'), Number.millisTo String(event.duration || 0, true));
754 contentHelper.appendTextRow(Common.UIString('Self Time'), Number.millisToS tring(event.selfTime, true)); 742 contentHelper.appendTextRow(Common.UIString('Self Time'), Number.millisToS tring(event.selfTime, true));
755 contentHelper.appendTextRow(Common.UIString('Total Time'), Number.millisTo String(event.duration || 0, true));
756 } 743 }
757 744
758 switch (event.name) { 745 switch (event.name) {
759 case recordTypes.GCEvent: 746 case recordTypes.GCEvent:
760 case recordTypes.MajorGC: 747 case recordTypes.MajorGC:
761 case recordTypes.MinorGC: 748 case recordTypes.MinorGC:
762 var delta = event.args['usedHeapSizeBefore'] - event.args['usedHeapSizeA fter']; 749 var delta = event.args['usedHeapSizeBefore'] - event.args['usedHeapSizeA fter'];
763 contentHelper.appendTextRow(Common.UIString('Collected'), Number.bytesTo String(delta)); 750 contentHelper.appendTextRow(Common.UIString('Collected'), Number.bytesTo String(delta));
764 break; 751 break;
765 case recordTypes.JSFrame: 752 case recordTypes.JSFrame:
(...skipping 12 matching lines...) Expand all
778 contentHelper.appendTextRow(Common.UIString('Repeats'), !eventData['si ngleShot']); 765 contentHelper.appendTextRow(Common.UIString('Repeats'), !eventData['si ngleShot']);
779 } 766 }
780 break; 767 break;
781 case recordTypes.FireAnimationFrame: 768 case recordTypes.FireAnimationFrame:
782 contentHelper.appendTextRow(Common.UIString('Callback ID'), eventData['i d']); 769 contentHelper.appendTextRow(Common.UIString('Callback ID'), eventData['i d']);
783 break; 770 break;
784 case recordTypes.ResourceSendRequest: 771 case recordTypes.ResourceSendRequest:
785 case recordTypes.ResourceReceiveResponse: 772 case recordTypes.ResourceReceiveResponse:
786 case recordTypes.ResourceReceivedData: 773 case recordTypes.ResourceReceivedData:
787 case recordTypes.ResourceFinish: 774 case recordTypes.ResourceFinish:
788 var url = timelineData.url; 775 url = timelineData.url;
789 if (url) 776 if (url)
790 contentHelper.appendElementRow(Common.UIString('Resource'), Components .Linkifier.linkifyURL(url)); 777 contentHelper.appendElementRow(Common.UIString('Resource'), Components .Linkifier.linkifyURL(url));
791 if (eventData['requestMethod']) 778 if (eventData['requestMethod'])
792 contentHelper.appendTextRow(Common.UIString('Request Method'), eventDa ta['requestMethod']); 779 contentHelper.appendTextRow(Common.UIString('Request Method'), eventDa ta['requestMethod']);
793 if (typeof eventData['statusCode'] === 'number') 780 if (typeof eventData['statusCode'] === 'number')
794 contentHelper.appendTextRow(Common.UIString('Status Code'), eventData[ 'statusCode']); 781 contentHelper.appendTextRow(Common.UIString('Status Code'), eventData[ 'statusCode']);
795 if (eventData['mimeType']) 782 if (eventData['mimeType'])
796 contentHelper.appendTextRow(Common.UIString('MIME Type'), eventData['m imeType']); 783 contentHelper.appendTextRow(Common.UIString('MIME Type'), eventData['m imeType']);
797 if ('priority' in eventData) { 784 if ('priority' in eventData) {
798 var priority = NetworkConditions.uiLabelForPriority(eventData['priorit y']); 785 var priority = NetworkConditions.uiLabelForPriority(eventData['priorit y']);
799 contentHelper.appendTextRow(Common.UIString('Priority'), priority); 786 contentHelper.appendTextRow(Common.UIString('Priority'), priority);
800 } 787 }
801 if (eventData['encodedDataLength']) { 788 if (eventData['encodedDataLength']) {
802 contentHelper.appendTextRow( 789 contentHelper.appendTextRow(
803 Common.UIString('Encoded Data'), Common.UIString('%d Bytes', event Data['encodedDataLength'])); 790 Common.UIString('Encoded Data'), Common.UIString('%d Bytes', event Data['encodedDataLength']));
804 } 791 }
805 if (eventData['decodedBodyLength']) { 792 if (eventData['decodedBodyLength']) {
806 contentHelper.appendTextRow( 793 contentHelper.appendTextRow(
807 Common.UIString('Decoded Body'), Common.UIString('%d Bytes', event Data['decodedBodyLength'])); 794 Common.UIString('Decoded Body'), Common.UIString('%d Bytes', event Data['decodedBodyLength']));
808 } 795 }
809 break; 796 break;
810 case recordTypes.CompileScript: 797 case recordTypes.CompileScript:
811 case recordTypes.EvaluateScript: 798 case recordTypes.EvaluateScript:
812 var url = eventData && eventData['url']; 799 url = eventData && eventData['url'];
813 if (url) { 800 if (url) {
814 contentHelper.appendLocationRow( 801 contentHelper.appendLocationRow(
815 Common.UIString('Script'), url, eventData['lineNumber'], eventData ['columnNumber']); 802 Common.UIString('Script'), url, eventData['lineNumber'], eventData ['columnNumber']);
816 } 803 }
817 break; 804 break;
818 case recordTypes.Paint: 805 case recordTypes.Paint:
819 var clip = eventData['clip']; 806 var clip = eventData['clip'];
820 contentHelper.appendTextRow(Common.UIString('Location'), Common.UIString ('(%d, %d)', clip[0], clip[1])); 807 contentHelper.appendTextRow(Common.UIString('Location'), Common.UIString ('(%d, %d)', clip[0], clip[1]));
821 var clipWidth = Timeline.TimelineUIUtils.quadWidth(clip); 808 var clipWidth = Timeline.TimelineUIUtils.quadWidth(clip);
822 var clipHeight = Timeline.TimelineUIUtils.quadHeight(clip); 809 var clipHeight = Timeline.TimelineUIUtils.quadHeight(clip);
823 contentHelper.appendTextRow(Common.UIString('Dimensions'), Common.UIStri ng('%d × %d', clipWidth, clipHeight)); 810 contentHelper.appendTextRow(Common.UIString('Dimensions'), Common.UIStri ng('%d × %d', clipWidth, clipHeight));
824 // Fall-through intended. 811 // Fall-through intended.
825 812
826 case recordTypes.PaintSetup: 813 case recordTypes.PaintSetup:
827 case recordTypes.Rasterize: 814 case recordTypes.Rasterize:
828 case recordTypes.ScrollLayer: 815 case recordTypes.ScrollLayer:
829 relatedNodeLabel = Common.UIString('Layer Root'); 816 relatedNodeLabel = Common.UIString('Layer Root');
830 break; 817 break;
831 case recordTypes.PaintImage: 818 case recordTypes.PaintImage:
832 case recordTypes.DecodeLazyPixelRef: 819 case recordTypes.DecodeLazyPixelRef:
833 case recordTypes.DecodeImage: 820 case recordTypes.DecodeImage:
834 case recordTypes.ResizeImage: 821 case recordTypes.ResizeImage:
835 case recordTypes.DrawLazyPixelRef: 822 case recordTypes.DrawLazyPixelRef:
836 relatedNodeLabel = Common.UIString('Owner Element'); 823 relatedNodeLabel = Common.UIString('Owner Element');
837 if (timelineData.url) { 824 url = timelineData.url;
838 contentHelper.appendElementRow( 825 if (url)
839 Common.UIString('Image URL'), Components.Linkifier.linkifyURL(time lineData.url)); 826 contentHelper.appendElementRow(Common.UIString('Image URL'), Component s.Linkifier.linkifyURL(url));
840 }
841 break; 827 break;
842 case recordTypes.ParseAuthorStyleSheet: 828 case recordTypes.ParseAuthorStyleSheet:
843 var url = eventData['styleSheetUrl']; 829 url = eventData['styleSheetUrl'];
844 if (url) 830 if (url)
845 contentHelper.appendElementRow(Common.UIString('Stylesheet URL'), Comp onents.Linkifier.linkifyURL(url)); 831 contentHelper.appendElementRow(Common.UIString('Stylesheet URL'), Comp onents.Linkifier.linkifyURL(url));
846 break; 832 break;
847 case recordTypes.UpdateLayoutTree: // We don't want to see default detail s. 833 case recordTypes.UpdateLayoutTree: // We don't want to see default detail s.
848 case recordTypes.RecalculateStyles: 834 case recordTypes.RecalculateStyles:
849 contentHelper.appendTextRow(Common.UIString('Elements Affected'), event. args['elementCount']); 835 contentHelper.appendTextRow(Common.UIString('Elements Affected'), event. args['elementCount']);
850 break; 836 break;
851 case recordTypes.Layout: 837 case recordTypes.Layout:
852 var beginData = event.args['beginData']; 838 var beginData = event.args['beginData'];
853 contentHelper.appendTextRow( 839 contentHelper.appendTextRow(
(...skipping 18 matching lines...) Expand all
872 break; 858 break;
873 case recordTypes.EmbedderCallback: 859 case recordTypes.EmbedderCallback:
874 contentHelper.appendTextRow(Common.UIString('Callback Function'), eventD ata['callbackName']); 860 contentHelper.appendTextRow(Common.UIString('Callback Function'), eventD ata['callbackName']);
875 break; 861 break;
876 case recordTypes.Animation: 862 case recordTypes.Animation:
877 if (event.phase === SDK.TracingModel.Phase.NestableAsyncInstant) 863 if (event.phase === SDK.TracingModel.Phase.NestableAsyncInstant)
878 contentHelper.appendTextRow(Common.UIString('State'), eventData['state ']); 864 contentHelper.appendTextRow(Common.UIString('State'), eventData['state ']);
879 break; 865 break;
880 case recordTypes.ParseHTML: 866 case recordTypes.ParseHTML:
881 var beginData = event.args['beginData']; 867 var beginData = event.args['beginData'];
882 var url = beginData['url'];
883 var startLine = beginData['startLine'] - 1; 868 var startLine = beginData['startLine'] - 1;
884 var endLine = event.args['endData'] ? event.args['endData']['endLine'] - 1 : undefined; 869 var endLine = event.args['endData'] ? event.args['endData']['endLine'] - 1 : undefined;
870 url = beginData['url'];
885 if (url) 871 if (url)
886 contentHelper.appendLocationRange(Common.UIString('Range'), url, start Line, endLine); 872 contentHelper.appendLocationRange(Common.UIString('Range'), url, start Line, endLine);
887 break; 873 break;
888 874
889 case recordTypes.FireIdleCallback: 875 case recordTypes.FireIdleCallback:
890 contentHelper.appendTextRow( 876 contentHelper.appendTextRow(
891 Common.UIString('Allotted Time'), Number.millisToString(eventData['a llottedMilliseconds'])); 877 Common.UIString('Allotted Time'), Number.millisToString(eventData['a llottedMilliseconds']));
892 contentHelper.appendTextRow(Common.UIString('Invoked by Timeout'), event Data['timedOut']); 878 contentHelper.appendTextRow(Common.UIString('Invoked by Timeout'), event Data['timedOut']);
893 // Fall-through intended. 879 // Fall-through intended.
894 880
895 case recordTypes.RequestIdleCallback: 881 case recordTypes.RequestIdleCallback:
896 case recordTypes.CancelIdleCallback: 882 case recordTypes.CancelIdleCallback:
897 contentHelper.appendTextRow(Common.UIString('Callback ID'), eventData['i d']); 883 contentHelper.appendTextRow(Common.UIString('Callback ID'), eventData['i d']);
898 break; 884 break;
899 case recordTypes.EventDispatch: 885 case recordTypes.EventDispatch:
900 contentHelper.appendTextRow(Common.UIString('Type'), eventData['type']); 886 contentHelper.appendTextRow(Common.UIString('Type'), eventData['type']);
901 break; 887 break;
902 888
903 default: 889 default:
904 var detailsNode = 890 var detailsNode =
905 Timeline.TimelineUIUtils.buildDetailsNodeForTraceEvent(event, model. targetByEvent(event), linkifier); 891 Timeline.TimelineUIUtils.buildDetailsNodeForTraceEvent(event, model. targetByEvent(event), linkifier);
906 if (detailsNode) 892 if (detailsNode)
907 contentHelper.appendElementRow(Common.UIString('Details'), detailsNode ); 893 contentHelper.appendElementRow(Common.UIString('Details'), detailsNode );
908 break; 894 break;
909 } 895 }
910 896
897 await Timeline.TimelineUIUtils._maybeAppendProductToDetails(contentHelper, u rl || eventData && eventData['url']);
898
911 if (timelineData.timeWaitingForMainThread) { 899 if (timelineData.timeWaitingForMainThread) {
912 contentHelper.appendTextRow( 900 contentHelper.appendTextRow(
913 Common.UIString('Time Waiting for Main Thread'), 901 Common.UIString('Time Waiting for Main Thread'),
914 Number.millisToString(timelineData.timeWaitingForMainThread, true)); 902 Number.millisToString(timelineData.timeWaitingForMainThread, true));
915 } 903 }
916 904
917 var relatedNode = relatedNodesMap && relatedNodesMap.get(timelineData.backen dNodeId); 905 var relatedNode = relatedNodesMap && relatedNodesMap.get(timelineData.backen dNodeId);
918 if (relatedNode) { 906 if (relatedNode) {
919 contentHelper.appendElementRow( 907 contentHelper.appendElementRow(
920 relatedNodeLabel || Common.UIString('Related Node'), 908 relatedNodeLabel || Common.UIString('Related Node'),
(...skipping 15 matching lines...) Expand all
936 contentHelper.addSection(Common.UIString('Aggregated Time')); 924 contentHelper.addSection(Common.UIString('Aggregated Time'));
937 var pieChart = Timeline.TimelineUIUtils.generatePieChart( 925 var pieChart = Timeline.TimelineUIUtils.generatePieChart(
938 stats, Timeline.TimelineUIUtils.eventStyle(event).category, event.self Time); 926 stats, Timeline.TimelineUIUtils.eventStyle(event).category, event.self Time);
939 contentHelper.appendElementRow('', pieChart); 927 contentHelper.appendElementRow('', pieChart);
940 } 928 }
941 929
942 return contentHelper.fragment; 930 return contentHelper.fragment;
943 } 931 }
944 932
945 /** 933 /**
934 * @param {!Timeline.TimelineDetailsContentHelper} contentHelper
935 * @param {?string} url
936 * @return {!Promise}
937 */
938 static async _maybeAppendProductToDetails(contentHelper, url) {
939 var parsedURL = url && url.asParsedURL();
940 if (!parsedURL)
941 return;
942 var registry = await ProductRegistry.instance();
943 var name = registry.nameForUrl(parsedURL);
944 if (name)
945 contentHelper.appendTextRow(Common.UIString('Product'), name);
946 }
947
948 /**
946 * @param {!TimelineModel.TimelineModel} model 949 * @param {!TimelineModel.TimelineModel} model
947 * @param {number} startTime 950 * @param {number} startTime
948 * @param {number} endTime 951 * @param {number} endTime
949 * @return {!DocumentFragment} 952 * @return {!DocumentFragment}
950 */ 953 */
951 static buildRangeStats(model, startTime, endTime) { 954 static buildRangeStats(model, startTime, endTime) {
952 var aggregatedStats = Timeline.TimelineUIUtils.statsForTimeRange(model, star tTime, endTime); 955 var aggregatedStats = Timeline.TimelineUIUtils.statsForTimeRange(model, star tTime, endTime);
953 var startOffset = startTime - model.minimumRecordTime(); 956 var startOffset = startTime - model.minimumRecordTime();
954 var endOffset = endTime - model.minimumRecordTime(); 957 var endOffset = endTime - model.minimumRecordTime();
955 958
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
1074 e[Timeline.TimelineUIUtils._categoryBreakdownCacheSymbol] = Object.assig n({}, aggregatedStats); 1077 e[Timeline.TimelineUIUtils._categoryBreakdownCacheSymbol] = Object.assig n({}, aggregatedStats);
1075 } 1078 }
1076 } 1079 }
1077 1080
1078 /** 1081 /**
1079 * @param {!TimelineModel.TimelineModel.NetworkRequest} request 1082 * @param {!TimelineModel.TimelineModel.NetworkRequest} request
1080 * @param {!TimelineModel.TimelineModel} model 1083 * @param {!TimelineModel.TimelineModel} model
1081 * @param {!Components.Linkifier} linkifier 1084 * @param {!Components.Linkifier} linkifier
1082 * @return {!Promise<!DocumentFragment>} 1085 * @return {!Promise<!DocumentFragment>}
1083 */ 1086 */
1084 static buildNetworkRequestDetails(request, model, linkifier) { 1087 static async buildNetworkRequestDetails(request, model, linkifier) {
1085 const target = model.targetByEvent(request.children[0]); 1088 const target = model.targetByEvent(request.children[0]);
1086 const contentHelper = new Timeline.TimelineDetailsContentHelper(target, link ifier); 1089 const contentHelper = new Timeline.TimelineDetailsContentHelper(target, link ifier);
1087 const category = Timeline.TimelineUIUtils.networkRequestCategory(request); 1090 const category = Timeline.TimelineUIUtils.networkRequestCategory(request);
1088 const color = Timeline.TimelineUIUtils.networkCategoryColor(category); 1091 const color = Timeline.TimelineUIUtils.networkCategoryColor(category);
1089 contentHelper.addSection(Common.UIString('Network request'), color); 1092 contentHelper.addSection(Common.UIString('Network request'), color);
1090 1093
1091 const duration = request.endTime - (request.startTime || -Infinity); 1094 const duration = request.endTime - (request.startTime || -Infinity);
1092 if (request.url) 1095 if (request.url)
1093 contentHelper.appendElementRow(Common.UIString('URL'), Components.Linkifie r.linkifyURL(request.url)); 1096 contentHelper.appendElementRow(Common.UIString('URL'), Components.Linkifie r.linkifyURL(request.url));
1097 await Timeline.TimelineUIUtils._maybeAppendProductToDetails(contentHelper, r equest.url);
1094 if (isFinite(duration)) 1098 if (isFinite(duration))
1095 contentHelper.appendTextRow(Common.UIString('Duration'), Number.millisToSt ring(duration, true)); 1099 contentHelper.appendTextRow(Common.UIString('Duration'), Number.millisToSt ring(duration, true));
1096 if (request.requestMethod) 1100 if (request.requestMethod)
1097 contentHelper.appendTextRow(Common.UIString('Request Method'), request.req uestMethod); 1101 contentHelper.appendTextRow(Common.UIString('Request Method'), request.req uestMethod);
1098 if (typeof request.priority === 'string') { 1102 if (typeof request.priority === 'string') {
1099 const priority = 1103 const priority =
1100 NetworkConditions.uiLabelForPriority(/** @type {!Protocol.Network.Reso urcePriority} */ (request.priority)); 1104 NetworkConditions.uiLabelForPriority(/** @type {!Protocol.Network.Reso urcePriority} */ (request.priority));
1101 contentHelper.appendTextRow(Common.UIString('Priority'), priority); 1105 contentHelper.appendTextRow(Common.UIString('Priority'), priority);
1102 } 1106 }
1103 if (request.mimeType) 1107 if (request.mimeType)
(...skipping 20 matching lines...) Expand all
1124 if (initiator) { 1128 if (initiator) {
1125 const initiatorURL = TimelineModel.TimelineData.forEvent(initiator).url; 1129 const initiatorURL = TimelineModel.TimelineData.forEvent(initiator).url;
1126 if (initiatorURL) { 1130 if (initiatorURL) {
1127 const link = linkifier.maybeLinkifyScriptLocation(target, null, initia torURL, 0); 1131 const link = linkifier.maybeLinkifyScriptLocation(target, null, initia torURL, 0);
1128 if (link) 1132 if (link)
1129 contentHelper.appendElementRow(title, link); 1133 contentHelper.appendElementRow(title, link);
1130 } 1134 }
1131 } 1135 }
1132 } 1136 }
1133 1137
1134 /** 1138 if (!request.previewElement && request.url && target) {
1135 * @param {function(?Element)} fulfill 1139 request.previewElement =
1136 */ 1140 await Components.DOMPresentationUtils.buildImagePreviewContents(target , request.url, false);
1137 function action(fulfill) {
1138 Components.DOMPresentationUtils
1139 .buildImagePreviewContents(
1140 /** @type {!SDK.Target} */ (target), request.url, false)
1141 .then(saveImage);
1142 /**
1143 * @param {?Element} element
1144 */
1145 function saveImage(element) {
1146 request.previewElement = element;
1147 fulfill(request.previewElement);
1148 }
1149 } 1141 }
1150 var previewPromise;
1151 if (request.previewElement) 1142 if (request.previewElement)
1152 previewPromise = Promise.resolve(request.previewElement); 1143 contentHelper.appendElementRow(Common.UIString('Preview'), request.preview Element);
1153 else 1144 return contentHelper.fragment;
1154 previewPromise = request.url && target ? new Promise(action) : Promise.res olve(null);
1155 /**
1156 * @param {?Element} element
1157 * @return {!DocumentFragment}
1158 */
1159 function appendPreview(element) {
1160 if (element)
1161 contentHelper.appendElementRow(Common.UIString('Preview'), request.previ ewElement);
1162 return contentHelper.fragment;
1163 }
1164 return previewPromise.then(appendPreview);
1165 } 1145 }
1166 1146
1167 /** 1147 /**
1168 * @param {!Array<!Protocol.Runtime.CallFrame>} callFrames 1148 * @param {!Array<!Protocol.Runtime.CallFrame>} callFrames
1169 * @return {!Protocol.Runtime.StackTrace} 1149 * @return {!Protocol.Runtime.StackTrace}
1170 */ 1150 */
1171 static _stackTraceFromCallFrames(callFrames) { 1151 static _stackTraceFromCallFrames(callFrames) {
1172 return /** @type {!Protocol.Runtime.StackTrace} */ ({callFrames: callFrames} ); 1152 return /** @type {!Protocol.Runtime.StackTrace} */ ({callFrames: callFrames} );
1173 } 1153 }
1174 1154
(...skipping 1114 matching lines...) Expand 10 before | Expand all | Expand 10 after
2289 * @param {string=} warningType 2269 * @param {string=} warningType
2290 */ 2270 */
2291 appendWarningRow(event, warningType) { 2271 appendWarningRow(event, warningType) {
2292 var warning = Timeline.TimelineUIUtils.eventWarning(event, warningType); 2272 var warning = Timeline.TimelineUIUtils.eventWarning(event, warningType);
2293 if (warning) 2273 if (warning)
2294 this.appendElementRow(Common.UIString('Warning'), warning, true); 2274 this.appendElementRow(Common.UIString('Warning'), warning, true);
2295 } 2275 }
2296 }; 2276 };
2297 2277
2298 Timeline.TimelineUIUtils._categoryBreakdownCacheSymbol = Symbol('categoryBreakdo wnCache'); 2278 Timeline.TimelineUIUtils._categoryBreakdownCacheSymbol = Symbol('categoryBreakdo wnCache');
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698