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

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: . 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 var relatedNodesMap = null;
allada 2017/05/05 01:27:38 nit: When you assign null to a variable like this
alph 2017/05/05 21:46:41 Done.
692 return Timeline.TimelineUIUtils._buildTraceEventDetailsSynchronously( 692 if (maybeTarget) {
693 event, model, linkifier, detailed, null); 693 var target = /** @type {!SDK.Target} */ (maybeTarget);
694 } 694 if (typeof event[Timeline.TimelineUIUtils._previewElementSymbol] === 'unde fined') {
695 var previewElement = null;
696 var url = TimelineModel.TimelineData.forEvent(event).url;
697 if (url)
698 previewElement = await Components.DOMPresentationUtils.buildImagePrevi ewContents(target, url, false);
699 else if (TimelineModel.TimelineData.forEvent(event).picture)
700 previewElement = await Timeline.TimelineUIUtils.buildPicturePreviewCon tent(event, target);
701 event[Timeline.TimelineUIUtils._previewElementSymbol] = previewElement;
702 }
695 703
696 var target = /** @type {!SDK.Target} */ (maybeTarget); 704 var nodeIdsToResolve = new Set();
allada 2017/05/05 01:27:38 nit: also here, closure only knows it's a set, but
alph 2017/05/05 21:46:40 Done. Though I just moved the code. ;-)
697 if (typeof event[Timeline.TimelineUIUtils._previewElementSymbol] === 'undefi ned') { 705 var timelineData = TimelineModel.TimelineData.forEvent(event);
698 var previewElement = null; 706 if (timelineData.backendNodeId)
699 var url = TimelineModel.TimelineData.forEvent(event).url; 707 nodeIdsToResolve.add(timelineData.backendNodeId);
700 if (url) 708 var invalidationTrackingEvents = TimelineModel.InvalidationTracker.invalid ationEventsFor(event);
701 previewElement = await Components.DOMPresentationUtils.buildImagePreview Contents(target, url, false); 709 if (invalidationTrackingEvents)
702 else if (TimelineModel.TimelineData.forEvent(event).picture) 710 Timeline.TimelineUIUtils._collectInvalidationNodeIds(nodeIdsToResolve, i nvalidationTrackingEvents);
703 previewElement = await Timeline.TimelineUIUtils.buildPicturePreviewConte nt(event, target); 711 if (nodeIdsToResolve.size) {
704 event[Timeline.TimelineUIUtils._previewElementSymbol] = previewElement; 712 var domModel = target.model(SDK.DOMModel);
705 } 713 if (domModel) {
706 714 relatedNodesMap =
707 var nodeIdsToResolve = new Set(); 715 await new Promise(fulfill => domModel.pushNodesByBackendIdsToFront end(nodeIdsToResolve, fulfill));
708 var timelineData = TimelineModel.TimelineData.forEvent(event); 716 }
709 if (timelineData.backendNodeId)
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 } 717 }
721 } 718 }
722 719
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; 720 var recordTypes = TimelineModel.TimelineModel.RecordType;
737 // This message may vary per event.name; 721 // This message may vary per event.name;
738 var relatedNodeLabel; 722 var relatedNodeLabel;
739 723
740 var contentHelper = new Timeline.TimelineDetailsContentHelper(model.targetBy Event(event), linkifier); 724 var contentHelper = new Timeline.TimelineDetailsContentHelper(model.targetBy Event(event), linkifier);
741 contentHelper.addSection( 725 contentHelper.addSection(
742 Timeline.TimelineUIUtils.eventTitle(event), Timeline.TimelineUIUtils.eve ntStyle(event).category.color); 726 Timeline.TimelineUIUtils.eventTitle(event), Timeline.TimelineUIUtils.eve ntStyle(event).category.color);
743 727
744 var eventData = event.args['data']; 728 var eventData = event.args['data'];
745 var timelineData = TimelineModel.TimelineData.forEvent(event); 729 var timelineData = TimelineModel.TimelineData.forEvent(event);
746 var initiator = timelineData.initiator(); 730 var initiator = timelineData.initiator();
731 var url = null;
747 732
748 if (timelineData.warning) 733 if (timelineData.warning)
749 contentHelper.appendWarningRow(event); 734 contentHelper.appendWarningRow(event);
750 if (event.name === recordTypes.JSFrame && eventData['deoptReason']) 735 if (event.name === recordTypes.JSFrame && eventData['deoptReason'])
751 contentHelper.appendWarningRow(event, TimelineModel.TimelineModel.WarningT ype.V8Deopt); 736 contentHelper.appendWarningRow(event, TimelineModel.TimelineModel.WarningT ype.V8Deopt);
752 737
753 if (detailed) { 738 if (detailed) {
754 contentHelper.appendTextRow(Common.UIString('Self Time'), Number.millisToS tring(event.selfTime, true)); 739 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)); 740 contentHelper.appendTextRow(Common.UIString('Total Time'), Number.millisTo String(event.duration || 0, true));
756 } 741 }
(...skipping 21 matching lines...) Expand all
778 contentHelper.appendTextRow(Common.UIString('Repeats'), !eventData['si ngleShot']); 763 contentHelper.appendTextRow(Common.UIString('Repeats'), !eventData['si ngleShot']);
779 } 764 }
780 break; 765 break;
781 case recordTypes.FireAnimationFrame: 766 case recordTypes.FireAnimationFrame:
782 contentHelper.appendTextRow(Common.UIString('Callback ID'), eventData['i d']); 767 contentHelper.appendTextRow(Common.UIString('Callback ID'), eventData['i d']);
783 break; 768 break;
784 case recordTypes.ResourceSendRequest: 769 case recordTypes.ResourceSendRequest:
785 case recordTypes.ResourceReceiveResponse: 770 case recordTypes.ResourceReceiveResponse:
786 case recordTypes.ResourceReceivedData: 771 case recordTypes.ResourceReceivedData:
787 case recordTypes.ResourceFinish: 772 case recordTypes.ResourceFinish:
788 var url = timelineData.url; 773 url = timelineData.url;
789 if (url) 774 if (url)
790 contentHelper.appendElementRow(Common.UIString('Resource'), Components .Linkifier.linkifyURL(url)); 775 contentHelper.appendElementRow(Common.UIString('Resource'), Components .Linkifier.linkifyURL(url));
791 if (eventData['requestMethod']) 776 if (eventData['requestMethod'])
792 contentHelper.appendTextRow(Common.UIString('Request Method'), eventDa ta['requestMethod']); 777 contentHelper.appendTextRow(Common.UIString('Request Method'), eventDa ta['requestMethod']);
793 if (typeof eventData['statusCode'] === 'number') 778 if (typeof eventData['statusCode'] === 'number')
794 contentHelper.appendTextRow(Common.UIString('Status Code'), eventData[ 'statusCode']); 779 contentHelper.appendTextRow(Common.UIString('Status Code'), eventData[ 'statusCode']);
795 if (eventData['mimeType']) 780 if (eventData['mimeType'])
796 contentHelper.appendTextRow(Common.UIString('MIME Type'), eventData['m imeType']); 781 contentHelper.appendTextRow(Common.UIString('MIME Type'), eventData['m imeType']);
797 if ('priority' in eventData) { 782 if ('priority' in eventData) {
798 var priority = NetworkConditions.uiLabelForPriority(eventData['priorit y']); 783 var priority = NetworkConditions.uiLabelForPriority(eventData['priorit y']);
799 contentHelper.appendTextRow(Common.UIString('Priority'), priority); 784 contentHelper.appendTextRow(Common.UIString('Priority'), priority);
800 } 785 }
801 if (eventData['encodedDataLength']) { 786 if (eventData['encodedDataLength']) {
802 contentHelper.appendTextRow( 787 contentHelper.appendTextRow(
803 Common.UIString('Encoded Data'), Common.UIString('%d Bytes', event Data['encodedDataLength'])); 788 Common.UIString('Encoded Data'), Common.UIString('%d Bytes', event Data['encodedDataLength']));
804 } 789 }
805 if (eventData['decodedBodyLength']) { 790 if (eventData['decodedBodyLength']) {
806 contentHelper.appendTextRow( 791 contentHelper.appendTextRow(
807 Common.UIString('Decoded Body'), Common.UIString('%d Bytes', event Data['decodedBodyLength'])); 792 Common.UIString('Decoded Body'), Common.UIString('%d Bytes', event Data['decodedBodyLength']));
808 } 793 }
809 break; 794 break;
810 case recordTypes.CompileScript: 795 case recordTypes.CompileScript:
811 case recordTypes.EvaluateScript: 796 case recordTypes.EvaluateScript:
812 var url = eventData && eventData['url']; 797 url = eventData && eventData['url'];
813 if (url) { 798 if (url) {
814 contentHelper.appendLocationRow( 799 contentHelper.appendLocationRow(
815 Common.UIString('Script'), url, eventData['lineNumber'], eventData ['columnNumber']); 800 Common.UIString('Script'), url, eventData['lineNumber'], eventData ['columnNumber']);
816 } 801 }
817 break; 802 break;
818 case recordTypes.Paint: 803 case recordTypes.Paint:
819 var clip = eventData['clip']; 804 var clip = eventData['clip'];
820 contentHelper.appendTextRow(Common.UIString('Location'), Common.UIString ('(%d, %d)', clip[0], clip[1])); 805 contentHelper.appendTextRow(Common.UIString('Location'), Common.UIString ('(%d, %d)', clip[0], clip[1]));
821 var clipWidth = Timeline.TimelineUIUtils.quadWidth(clip); 806 var clipWidth = Timeline.TimelineUIUtils.quadWidth(clip);
822 var clipHeight = Timeline.TimelineUIUtils.quadHeight(clip); 807 var clipHeight = Timeline.TimelineUIUtils.quadHeight(clip);
823 contentHelper.appendTextRow(Common.UIString('Dimensions'), Common.UIStri ng('%d × %d', clipWidth, clipHeight)); 808 contentHelper.appendTextRow(Common.UIString('Dimensions'), Common.UIStri ng('%d × %d', clipWidth, clipHeight));
824 // Fall-through intended. 809 // Fall-through intended.
825 810
826 case recordTypes.PaintSetup: 811 case recordTypes.PaintSetup:
827 case recordTypes.Rasterize: 812 case recordTypes.Rasterize:
828 case recordTypes.ScrollLayer: 813 case recordTypes.ScrollLayer:
829 relatedNodeLabel = Common.UIString('Layer Root'); 814 relatedNodeLabel = Common.UIString('Layer Root');
830 break; 815 break;
831 case recordTypes.PaintImage: 816 case recordTypes.PaintImage:
832 case recordTypes.DecodeLazyPixelRef: 817 case recordTypes.DecodeLazyPixelRef:
833 case recordTypes.DecodeImage: 818 case recordTypes.DecodeImage:
834 case recordTypes.ResizeImage: 819 case recordTypes.ResizeImage:
835 case recordTypes.DrawLazyPixelRef: 820 case recordTypes.DrawLazyPixelRef:
836 relatedNodeLabel = Common.UIString('Owner Element'); 821 relatedNodeLabel = Common.UIString('Owner Element');
837 if (timelineData.url) { 822 url = timelineData.url;
838 contentHelper.appendElementRow( 823 if (url)
839 Common.UIString('Image URL'), Components.Linkifier.linkifyURL(time lineData.url)); 824 contentHelper.appendElementRow(Common.UIString('Image URL'), Component s.Linkifier.linkifyURL(url));
840 }
841 break; 825 break;
842 case recordTypes.ParseAuthorStyleSheet: 826 case recordTypes.ParseAuthorStyleSheet:
843 var url = eventData['styleSheetUrl']; 827 url = eventData['styleSheetUrl'];
844 if (url) 828 if (url)
845 contentHelper.appendElementRow(Common.UIString('Stylesheet URL'), Comp onents.Linkifier.linkifyURL(url)); 829 contentHelper.appendElementRow(Common.UIString('Stylesheet URL'), Comp onents.Linkifier.linkifyURL(url));
846 break; 830 break;
847 case recordTypes.UpdateLayoutTree: // We don't want to see default detail s. 831 case recordTypes.UpdateLayoutTree: // We don't want to see default detail s.
848 case recordTypes.RecalculateStyles: 832 case recordTypes.RecalculateStyles:
849 contentHelper.appendTextRow(Common.UIString('Elements Affected'), event. args['elementCount']); 833 contentHelper.appendTextRow(Common.UIString('Elements Affected'), event. args['elementCount']);
850 break; 834 break;
851 case recordTypes.Layout: 835 case recordTypes.Layout:
852 var beginData = event.args['beginData']; 836 var beginData = event.args['beginData'];
853 contentHelper.appendTextRow( 837 contentHelper.appendTextRow(
(...skipping 18 matching lines...) Expand all
872 break; 856 break;
873 case recordTypes.EmbedderCallback: 857 case recordTypes.EmbedderCallback:
874 contentHelper.appendTextRow(Common.UIString('Callback Function'), eventD ata['callbackName']); 858 contentHelper.appendTextRow(Common.UIString('Callback Function'), eventD ata['callbackName']);
875 break; 859 break;
876 case recordTypes.Animation: 860 case recordTypes.Animation:
877 if (event.phase === SDK.TracingModel.Phase.NestableAsyncInstant) 861 if (event.phase === SDK.TracingModel.Phase.NestableAsyncInstant)
878 contentHelper.appendTextRow(Common.UIString('State'), eventData['state ']); 862 contentHelper.appendTextRow(Common.UIString('State'), eventData['state ']);
879 break; 863 break;
880 case recordTypes.ParseHTML: 864 case recordTypes.ParseHTML:
881 var beginData = event.args['beginData']; 865 var beginData = event.args['beginData'];
882 var url = beginData['url'];
883 var startLine = beginData['startLine'] - 1; 866 var startLine = beginData['startLine'] - 1;
884 var endLine = event.args['endData'] ? event.args['endData']['endLine'] - 1 : undefined; 867 var endLine = event.args['endData'] ? event.args['endData']['endLine'] - 1 : undefined;
868 url = beginData['url'];
885 if (url) 869 if (url)
886 contentHelper.appendLocationRange(Common.UIString('Range'), url, start Line, endLine); 870 contentHelper.appendLocationRange(Common.UIString('Range'), url, start Line, endLine);
887 break; 871 break;
888 872
889 case recordTypes.FireIdleCallback: 873 case recordTypes.FireIdleCallback:
890 contentHelper.appendTextRow( 874 contentHelper.appendTextRow(
891 Common.UIString('Allotted Time'), Number.millisToString(eventData['a llottedMilliseconds'])); 875 Common.UIString('Allotted Time'), Number.millisToString(eventData['a llottedMilliseconds']));
892 contentHelper.appendTextRow(Common.UIString('Invoked by Timeout'), event Data['timedOut']); 876 contentHelper.appendTextRow(Common.UIString('Invoked by Timeout'), event Data['timedOut']);
893 // Fall-through intended. 877 // Fall-through intended.
894 878
895 case recordTypes.RequestIdleCallback: 879 case recordTypes.RequestIdleCallback:
896 case recordTypes.CancelIdleCallback: 880 case recordTypes.CancelIdleCallback:
897 contentHelper.appendTextRow(Common.UIString('Callback ID'), eventData['i d']); 881 contentHelper.appendTextRow(Common.UIString('Callback ID'), eventData['i d']);
898 break; 882 break;
899 case recordTypes.EventDispatch: 883 case recordTypes.EventDispatch:
900 contentHelper.appendTextRow(Common.UIString('Type'), eventData['type']); 884 contentHelper.appendTextRow(Common.UIString('Type'), eventData['type']);
901 break; 885 break;
902 886
903 default: 887 default:
904 var detailsNode = 888 var detailsNode =
905 Timeline.TimelineUIUtils.buildDetailsNodeForTraceEvent(event, model. targetByEvent(event), linkifier); 889 Timeline.TimelineUIUtils.buildDetailsNodeForTraceEvent(event, model. targetByEvent(event), linkifier);
906 if (detailsNode) 890 if (detailsNode)
907 contentHelper.appendElementRow(Common.UIString('Details'), detailsNode ); 891 contentHelper.appendElementRow(Common.UIString('Details'), detailsNode );
908 break; 892 break;
909 } 893 }
910 894
895 await Timeline.TimelineUIUtils._appendProductToDetails(contentHelper, url || eventData && eventData['url']);
896
911 if (timelineData.timeWaitingForMainThread) { 897 if (timelineData.timeWaitingForMainThread) {
912 contentHelper.appendTextRow( 898 contentHelper.appendTextRow(
913 Common.UIString('Time Waiting for Main Thread'), 899 Common.UIString('Time Waiting for Main Thread'),
914 Number.millisToString(timelineData.timeWaitingForMainThread, true)); 900 Number.millisToString(timelineData.timeWaitingForMainThread, true));
915 } 901 }
916 902
917 var relatedNode = relatedNodesMap && relatedNodesMap.get(timelineData.backen dNodeId); 903 var relatedNode = relatedNodesMap && relatedNodesMap.get(timelineData.backen dNodeId);
918 if (relatedNode) { 904 if (relatedNode) {
919 contentHelper.appendElementRow( 905 contentHelper.appendElementRow(
920 relatedNodeLabel || Common.UIString('Related Node'), 906 relatedNodeLabel || Common.UIString('Related Node'),
(...skipping 15 matching lines...) Expand all
936 contentHelper.addSection(Common.UIString('Aggregated Time')); 922 contentHelper.addSection(Common.UIString('Aggregated Time'));
937 var pieChart = Timeline.TimelineUIUtils.generatePieChart( 923 var pieChart = Timeline.TimelineUIUtils.generatePieChart(
938 stats, Timeline.TimelineUIUtils.eventStyle(event).category, event.self Time); 924 stats, Timeline.TimelineUIUtils.eventStyle(event).category, event.self Time);
939 contentHelper.appendElementRow('', pieChart); 925 contentHelper.appendElementRow('', pieChart);
940 } 926 }
941 927
942 return contentHelper.fragment; 928 return contentHelper.fragment;
943 } 929 }
944 930
945 /** 931 /**
932 * @param {!Timeline.TimelineDetailsContentHelper} contentHelper
933 * @param {?string} url
934 * @return {!Promise}
935 */
936 static async _appendProductToDetails(contentHelper, url) {
937 var parsedURL = url && url.asParsedURL();
938 if (!parsedURL)
caseq 2017/05/05 00:58:15 _maybeAppend... then?
alph 2017/05/05 21:46:40 Done.
939 return;
940 var productNode = createElement('div');
941 contentHelper.appendElementRow(Common.UIString('Product'), productNode);
942 var registry = await ProductRegistry.instance();
943 var name = registry.nameForUrl(parsedURL);
allada 2017/05/05 01:27:38 If we do not find a name here, shouldn't we have n
alph 2017/05/05 21:46:40 Done.
944 if (name)
945 productNode.textContent = 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._appendProductToDetails(contentHelper, reques t.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 var preview = request.previewElement;
caseq 2017/05/05 00:58:15 let's drop preview and inline request.previewEleme
alph 2017/05/05 21:46:40 Done.
1135 * @param {function(?Element)} fulfill 1139 if (!preview && request.url && target) {
1136 */ 1140 preview = await Components.DOMPresentationUtils.buildImagePreviewContents( target, request.url, false);
1137 function action(fulfill) { 1141 request.previewElement = preview;
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 } 1142 }
1150 var previewPromise; 1143 if (preview)
1151 if (request.previewElement) 1144 contentHelper.appendElementRow(Common.UIString('Preview'), request.preview Element);
1152 previewPromise = Promise.resolve(request.previewElement); 1145 return contentHelper.fragment;
1153 else
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 } 1146 }
1166 1147
1167 /** 1148 /**
1168 * @param {!Array<!Protocol.Runtime.CallFrame>} callFrames 1149 * @param {!Array<!Protocol.Runtime.CallFrame>} callFrames
1169 * @return {!Protocol.Runtime.StackTrace} 1150 * @return {!Protocol.Runtime.StackTrace}
1170 */ 1151 */
1171 static _stackTraceFromCallFrames(callFrames) { 1152 static _stackTraceFromCallFrames(callFrames) {
1172 return /** @type {!Protocol.Runtime.StackTrace} */ ({callFrames: callFrames} ); 1153 return /** @type {!Protocol.Runtime.StackTrace} */ ({callFrames: callFrames} );
1173 } 1154 }
1174 1155
(...skipping 1114 matching lines...) Expand 10 before | Expand all | Expand 10 after
2289 * @param {string=} warningType 2270 * @param {string=} warningType
2290 */ 2271 */
2291 appendWarningRow(event, warningType) { 2272 appendWarningRow(event, warningType) {
2292 var warning = Timeline.TimelineUIUtils.eventWarning(event, warningType); 2273 var warning = Timeline.TimelineUIUtils.eventWarning(event, warningType);
2293 if (warning) 2274 if (warning)
2294 this.appendElementRow(Common.UIString('Warning'), warning, true); 2275 this.appendElementRow(Common.UIString('Warning'), warning, true);
2295 } 2276 }
2296 }; 2277 };
2297 2278
2298 Timeline.TimelineUIUtils._categoryBreakdownCacheSymbol = Symbol('categoryBreakdo wnCache'); 2279 Timeline.TimelineUIUtils._categoryBreakdownCacheSymbol = Symbol('categoryBreakdo wnCache');
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698