Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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'); |
| OLD | NEW |