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 563 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
574 /** | 574 /** |
575 * @param {!WebInspector.TracingModel.Event} event | 575 * @param {!WebInspector.TracingModel.Event} event |
576 * @param {!WebInspector.TimelineModel} model | 576 * @param {!WebInspector.TimelineModel} model |
577 * @param {!WebInspector.Linkifier} linkifier | 577 * @param {!WebInspector.Linkifier} linkifier |
578 * @param {boolean} detailed | 578 * @param {boolean} detailed |
579 * @param {?Map<number, ?WebInspector.DOMNode>} relatedNodesMap | 579 * @param {?Map<number, ?WebInspector.DOMNode>} relatedNodesMap |
580 * @return {!DocumentFragment} | 580 * @return {!DocumentFragment} |
581 */ | 581 */ |
582 WebInspector.TimelineUIUtils._buildTraceEventDetailsSynchronously = function(eve
nt, model, linkifier, detailed, relatedNodesMap) | 582 WebInspector.TimelineUIUtils._buildTraceEventDetailsSynchronously = function(eve
nt, model, linkifier, detailed, relatedNodesMap) |
583 { | 583 { |
584 var fragment = createDocumentFragment(); | |
585 var stats = {}; | 584 var stats = {}; |
586 var recordTypes = WebInspector.TimelineModel.RecordType; | 585 var recordTypes = WebInspector.TimelineModel.RecordType; |
587 | 586 |
588 // This message may vary per event.name; | 587 // This message may vary per event.name; |
589 var relatedNodeLabel; | 588 var relatedNodeLabel; |
590 | 589 |
591 var contentHelper = new WebInspector.TimelineDetailsContentHelper(model.targ
et(), linkifier, relatedNodesMap, false); | 590 var contentHelper = new WebInspector.TimelineDetailsContentHelper(model.targ
et(), linkifier, relatedNodesMap); |
592 | 591 contentHelper.addSection(WebInspector.TimelineUIUtils.eventTitle(event), Web
Inspector.TimelineUIUtils.eventStyle(event).category); |
593 if (event.warning) | |
594 contentHelper.appendWarningRow(event); | |
595 | |
596 if (detailed) { | |
597 contentHelper.appendTextRow(WebInspector.UIString("Type"), WebInspector.
TimelineUIUtils.eventTitle(event)); | |
598 contentHelper.appendTextRow(WebInspector.UIString("Total Time"), Number.
millisToString(event.duration || 0, true)); | |
599 contentHelper.appendTextRow(WebInspector.UIString("Self Time"), Number.m
illisToString(event.selfTime, true)); | |
600 } | |
601 if (event.previewElement) | |
602 contentHelper.appendElementRow(WebInspector.UIString("Preview"), event.p
reviewElement); | |
603 | 592 |
604 var eventData = event.args["data"]; | 593 var eventData = event.args["data"]; |
605 var initiator = event.initiator; | 594 var initiator = event.initiator; |
606 | 595 |
| 596 if (event.warning) |
| 597 contentHelper.appendWarningRow(event); |
| 598 if (event.name === recordTypes.JSFrame) { |
| 599 var deoptReason = eventData["deoptReason"]; |
| 600 if (deoptReason && deoptReason != "no reason") |
| 601 contentHelper.appendWarningRow(event, WebInspector.TimelineModel.War
ningType.V8Deopt); |
| 602 } |
| 603 |
| 604 if (detailed) { |
| 605 contentHelper.appendTextRow(WebInspector.UIString("Self Time"), Number.m
illisToString(event.selfTime, true)); |
| 606 contentHelper.appendTextRow(WebInspector.UIString("Total Time"), Number.
millisToString(event.duration || 0, true)); |
| 607 } |
| 608 |
607 switch (event.name) { | 609 switch (event.name) { |
608 case recordTypes.GCEvent: | 610 case recordTypes.GCEvent: |
609 case recordTypes.MajorGC: | 611 case recordTypes.MajorGC: |
610 case recordTypes.MinorGC: | 612 case recordTypes.MinorGC: |
611 var delta = event.args["usedHeapSizeBefore"] - event.args["usedHeapSizeA
fter"]; | 613 var delta = event.args["usedHeapSizeBefore"] - event.args["usedHeapSizeA
fter"]; |
612 contentHelper.appendTextRow(WebInspector.UIString("Collected"), Number.b
ytesToString(delta)); | 614 contentHelper.appendTextRow(WebInspector.UIString("Collected"), Number.b
ytesToString(delta)); |
613 break; | 615 break; |
614 case recordTypes.JSFrame: | 616 case recordTypes.JSFrame: |
615 var detailsNode = WebInspector.TimelineUIUtils.buildDetailsNodeForTraceE
vent(event, model.target(), linkifier); | 617 var detailsNode = WebInspector.TimelineUIUtils.buildDetailsNodeForTraceE
vent(event, model.target(), linkifier); |
616 if (detailsNode) | 618 if (detailsNode) |
617 contentHelper.appendElementRow(WebInspector.UIString("Function"), de
tailsNode); | 619 contentHelper.appendElementRow(WebInspector.UIString("Function"), de
tailsNode); |
618 var deoptReason = eventData["deoptReason"]; | |
619 if (deoptReason && deoptReason != "no reason") | |
620 contentHelper.appendWarningRow(event, WebInspector.TimelineModel.War
ningType.V8Deopt); | |
621 break; | 620 break; |
622 case recordTypes.TimerFire: | 621 case recordTypes.TimerFire: |
623 case recordTypes.TimerInstall: | 622 case recordTypes.TimerInstall: |
624 case recordTypes.TimerRemove: | 623 case recordTypes.TimerRemove: |
625 contentHelper.appendTextRow(WebInspector.UIString("Timer ID"), eventData
["timerId"]); | 624 contentHelper.appendTextRow(WebInspector.UIString("Timer ID"), eventData
["timerId"]); |
626 if (event.name === recordTypes.TimerInstall) { | 625 if (event.name === recordTypes.TimerInstall) { |
627 contentHelper.appendTextRow(WebInspector.UIString("Timeout"), Number
.millisToString(eventData["timeout"])); | 626 contentHelper.appendTextRow(WebInspector.UIString("Timeout"), Number
.millisToString(eventData["timeout"])); |
628 contentHelper.appendTextRow(WebInspector.UIString("Repeats"), !event
Data["singleShot"]); | 627 contentHelper.appendTextRow(WebInspector.UIString("Repeats"), !event
Data["singleShot"]); |
629 } | 628 } |
630 break; | 629 break; |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
688 if (url) | 687 if (url) |
689 contentHelper.appendElementRow(WebInspector.UIString("Stylesheet URL
"), WebInspector.linkifyResourceAsNode(url)); | 688 contentHelper.appendElementRow(WebInspector.UIString("Stylesheet URL
"), WebInspector.linkifyResourceAsNode(url)); |
690 break; | 689 break; |
691 case recordTypes.UpdateLayoutTree: // We don't want to see default details. | 690 case recordTypes.UpdateLayoutTree: // We don't want to see default details. |
692 case recordTypes.RecalculateStyles: | 691 case recordTypes.RecalculateStyles: |
693 contentHelper.appendTextRow(WebInspector.UIString("Elements Affected"),
event.args["elementCount"]); | 692 contentHelper.appendTextRow(WebInspector.UIString("Elements Affected"),
event.args["elementCount"]); |
694 break; | 693 break; |
695 case recordTypes.Layout: | 694 case recordTypes.Layout: |
696 var beginData = event.args["beginData"]; | 695 var beginData = event.args["beginData"]; |
697 contentHelper.appendTextRow(WebInspector.UIString("Nodes That Need Layou
t"), beginData["dirtyObjects"]); | 696 contentHelper.appendTextRow(WebInspector.UIString("Nodes That Need Layou
t"), beginData["dirtyObjects"]); |
698 contentHelper.appendTextRow(WebInspector.UIString("Layout Tree Size"), b
eginData["totalObjects"]); | |
699 contentHelper.appendTextRow(WebInspector.UIString("Layout Scope"), | |
700 beginData["partialLayout"] ? WebInspector.UI
String("Partial") : WebInspector.UIString("Whole document")); | |
701 relatedNodeLabel = WebInspector.UIString("Layout root"); | 697 relatedNodeLabel = WebInspector.UIString("Layout root"); |
702 break; | 698 break; |
703 case recordTypes.ConsoleTime: | 699 case recordTypes.ConsoleTime: |
704 contentHelper.appendTextRow(WebInspector.UIString("Message"), event.name
); | 700 contentHelper.appendTextRow(WebInspector.UIString("Message"), event.name
); |
705 break; | 701 break; |
706 case recordTypes.WebSocketCreate: | 702 case recordTypes.WebSocketCreate: |
707 case recordTypes.WebSocketSendHandshakeRequest: | 703 case recordTypes.WebSocketSendHandshakeRequest: |
708 case recordTypes.WebSocketReceiveHandshakeResponse: | 704 case recordTypes.WebSocketReceiveHandshakeResponse: |
709 case recordTypes.WebSocketDestroy: | 705 case recordTypes.WebSocketDestroy: |
710 var initiatorData = initiator ? initiator.args["data"] : eventData; | 706 var initiatorData = initiator ? initiator.args["data"] : eventData; |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
748 var detailsNode = WebInspector.TimelineUIUtils.buildDetailsNodeForTraceE
vent(event, model.target(), linkifier); | 744 var detailsNode = WebInspector.TimelineUIUtils.buildDetailsNodeForTraceE
vent(event, model.target(), linkifier); |
749 if (detailsNode) | 745 if (detailsNode) |
750 contentHelper.appendElementRow(WebInspector.UIString("Details"), det
ailsNode); | 746 contentHelper.appendElementRow(WebInspector.UIString("Details"), det
ailsNode); |
751 break; | 747 break; |
752 } | 748 } |
753 | 749 |
754 var relatedNode = contentHelper.nodeForBackendId(event.backendNodeId); | 750 var relatedNode = contentHelper.nodeForBackendId(event.backendNodeId); |
755 if (relatedNode) | 751 if (relatedNode) |
756 contentHelper.appendElementRow(relatedNodeLabel || WebInspector.UIString
("Related Node"), WebInspector.DOMPresentationUtils.linkifyNodeReference(related
Node)); | 752 contentHelper.appendElementRow(relatedNodeLabel || WebInspector.UIString
("Related Node"), WebInspector.DOMPresentationUtils.linkifyNodeReference(related
Node)); |
757 | 753 |
758 if (eventData && eventData["scriptName"] && event.name !== recordTypes.Funct
ionCall) | 754 if (event.previewElement) { |
759 contentHelper.appendLocationRow(WebInspector.UIString("Function Call"),
eventData["scriptName"], eventData["scriptLine"]); | 755 contentHelper.addSection(WebInspector.UIString("Preview")); |
| 756 contentHelper.appendElementRow("", event.previewElement); |
| 757 } |
760 | 758 |
761 if (event.stackTrace || (event.initiator && event.initiator.stackTrace) || e
vent.invalidationTrackingEvents) | 759 if (event.stackTrace || (event.initiator && event.initiator.stackTrace) || e
vent.invalidationTrackingEvents) |
762 WebInspector.TimelineUIUtils._generateCauses(event, model.target(), cont
entHelper); | 760 WebInspector.TimelineUIUtils._generateCauses(event, model.target(), cont
entHelper); |
763 | 761 |
764 var showPieChart = detailed && WebInspector.TimelineUIUtils._aggregatedStats
ForTraceEvent(stats, model, event); | 762 var showPieChart = detailed && WebInspector.TimelineUIUtils._aggregatedStats
ForTraceEvent(stats, model, event); |
765 if (showPieChart) { | 763 if (showPieChart) { |
| 764 contentHelper.addSection(WebInspector.UIString("Aggregated Time")); |
766 var pieChart = WebInspector.TimelineUIUtils.generatePieChart(stats, WebI
nspector.TimelineUIUtils.eventStyle(event).category, event.selfTime); | 765 var pieChart = WebInspector.TimelineUIUtils.generatePieChart(stats, WebI
nspector.TimelineUIUtils.eventStyle(event).category, event.selfTime); |
767 contentHelper.appendElementRow(WebInspector.UIString("Aggregated Time"),
pieChart); | 766 contentHelper.appendElementRow("", pieChart); |
768 } | 767 } |
769 | 768 |
770 fragment.appendChild(contentHelper.element); | 769 return contentHelper.fragment; |
771 | |
772 return fragment; | |
773 } | 770 } |
774 | 771 |
775 WebInspector.TimelineUIUtils._aggregatedStatsKey = Symbol("aggregatedStats"); | 772 WebInspector.TimelineUIUtils._aggregatedStatsKey = Symbol("aggregatedStats"); |
776 | 773 |
777 /** | 774 /** |
778 * @param {!WebInspector.TimelineModel} model | 775 * @param {!WebInspector.TimelineModel} model |
779 * @param {number} startTime | 776 * @param {number} startTime |
780 * @param {number} endTime | 777 * @param {number} endTime |
781 * @return {!Element} | 778 * @return {!DocumentFragment} |
782 */ | 779 */ |
783 WebInspector.TimelineUIUtils.buildRangeStats = function(model, startTime, endTim
e) | 780 WebInspector.TimelineUIUtils.buildRangeStats = function(model, startTime, endTim
e) |
784 { | 781 { |
785 var aggregatedStats = {}; | 782 var aggregatedStats = {}; |
786 | 783 |
787 /** | 784 /** |
788 * @param {number} value | 785 * @param {number} value |
789 * @param {!WebInspector.TimelineModel.Record} task | 786 * @param {!WebInspector.TimelineModel.Record} task |
790 * @return {number} | 787 * @return {number} |
791 */ | 788 */ |
(...skipping 20 matching lines...) Expand all Loading... |
812 continue; | 809 continue; |
813 } | 810 } |
814 WebInspector.TimelineUIUtils._collectAggregatedStatsForRecord(task, star
tTime, endTime, aggregatedStats); | 811 WebInspector.TimelineUIUtils._collectAggregatedStatsForRecord(task, star
tTime, endTime, aggregatedStats); |
815 } | 812 } |
816 | 813 |
817 var aggregatedTotal = 0; | 814 var aggregatedTotal = 0; |
818 for (var categoryName in aggregatedStats) | 815 for (var categoryName in aggregatedStats) |
819 aggregatedTotal += aggregatedStats[categoryName]; | 816 aggregatedTotal += aggregatedStats[categoryName]; |
820 aggregatedStats["idle"] = Math.max(0, endTime - startTime - aggregatedTotal)
; | 817 aggregatedStats["idle"] = Math.max(0, endTime - startTime - aggregatedTotal)
; |
821 | 818 |
822 var contentHelper = new WebInspector.TimelineDetailsContentHelper(null, null
, null, false); | |
823 var pieChart = WebInspector.TimelineUIUtils.generatePieChart(aggregatedStats
); | |
824 | |
825 var startOffset = startTime - model.minimumRecordTime(); | 819 var startOffset = startTime - model.minimumRecordTime(); |
826 var endOffset = endTime - model.minimumRecordTime(); | 820 var endOffset = endTime - model.minimumRecordTime(); |
827 contentHelper.appendTextRow(WebInspector.UIString("Range"), WebInspector.UIS
tring("%s \u2013 %s", Number.millisToString(startOffset), Number.millisToString(
endOffset))); | |
828 contentHelper.appendElementRow(WebInspector.UIString("Aggregated Time"), pie
Chart); | |
829 | 821 |
830 return contentHelper.element; | 822 var contentHelper = new WebInspector.TimelineDetailsContentHelper(null, null
, null); |
| 823 contentHelper.addSection(WebInspector.UIString("Range: %s \u2013 %s", Numbe
r.millisToString(startOffset), Number.millisToString(endOffset))); |
| 824 var pieChart = WebInspector.TimelineUIUtils.generatePieChart(aggregatedStats
); |
| 825 contentHelper.appendElementRow("", pieChart); |
| 826 return contentHelper.fragment; |
831 } | 827 } |
832 | 828 |
833 /** | 829 /** |
834 * @param {!WebInspector.TimelineModel.Record} record | 830 * @param {!WebInspector.TimelineModel.Record} record |
835 * @param {number} startTime | 831 * @param {number} startTime |
836 * @param {number} endTime | 832 * @param {number} endTime |
837 * @param {!Object} aggregatedStats | 833 * @param {!Object} aggregatedStats |
838 */ | 834 */ |
839 WebInspector.TimelineUIUtils._collectAggregatedStatsForRecord = function(record,
startTime, endTime, aggregatedStats) | 835 WebInspector.TimelineUIUtils._collectAggregatedStatsForRecord = function(record,
startTime, endTime, aggregatedStats) |
840 { | 836 { |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
881 } | 877 } |
882 | 878 |
883 /** | 879 /** |
884 * @param {!WebInspector.TimelineModel.NetworkRequest} request | 880 * @param {!WebInspector.TimelineModel.NetworkRequest} request |
885 * @param {!WebInspector.TimelineModel} model | 881 * @param {!WebInspector.TimelineModel} model |
886 * @param {!WebInspector.Linkifier} linkifier | 882 * @param {!WebInspector.Linkifier} linkifier |
887 * @return {!Promise<!DocumentFragment>} | 883 * @return {!Promise<!DocumentFragment>} |
888 */ | 884 */ |
889 WebInspector.TimelineUIUtils.buildNetworkRequestDetails = function(request, mode
l, linkifier) | 885 WebInspector.TimelineUIUtils.buildNetworkRequestDetails = function(request, mode
l, linkifier) |
890 { | 886 { |
891 var fragment = createDocumentFragment(); | |
892 var target = model.target(); | 887 var target = model.target(); |
893 var contentHelper = new WebInspector.TimelineDetailsContentHelper(target, li
nkifier, null, true); | 888 var contentHelper = new WebInspector.TimelineDetailsContentHelper(target, li
nkifier, null); |
894 | 889 |
895 var info = WebInspector.TimelineUIUtils.buildNetworkRequestInfo(request); | 890 var info = WebInspector.TimelineUIUtils.buildNetworkRequestInfo(request); |
896 for (var item of info) { | 891 for (var item of info) { |
897 if (typeof item.value === "string") | 892 if (typeof item.value === "string") |
898 contentHelper.appendTextRow(item.title, item.value); | 893 contentHelper.appendTextRow(item.title, item.value); |
899 else | 894 else |
900 contentHelper.appendElementRow(item.title, item.value); | 895 contentHelper.appendElementRow(item.title, item.value); |
901 } | 896 } |
902 | 897 |
903 /** | 898 /** |
(...skipping 17 matching lines...) Expand all Loading... |
921 else | 916 else |
922 previewPromise = request.url && target ? new Promise(action) : Promise.r
esolve(null); | 917 previewPromise = request.url && target ? new Promise(action) : Promise.r
esolve(null); |
923 /** | 918 /** |
924 * @param {?Element} element | 919 * @param {?Element} element |
925 * @return {!DocumentFragment} | 920 * @return {!DocumentFragment} |
926 */ | 921 */ |
927 function appendPreview(element) | 922 function appendPreview(element) |
928 { | 923 { |
929 if (element) | 924 if (element) |
930 contentHelper.appendElementRow(WebInspector.UIString("Preview"), req
uest.previewElement); | 925 contentHelper.appendElementRow(WebInspector.UIString("Preview"), req
uest.previewElement); |
931 fragment.appendChild(contentHelper.element); | 926 return contentHelper.fragment; |
932 return fragment; | |
933 } | 927 } |
934 return previewPromise.then(appendPreview); | 928 return previewPromise.then(appendPreview); |
935 } | 929 } |
936 | 930 |
937 /** | 931 /** |
938 * @param {!WebInspector.TracingModel.Event} event | 932 * @param {!WebInspector.TracingModel.Event} event |
939 * @param {?WebInspector.Target} target | 933 * @param {?WebInspector.Target} target |
940 * @param {!WebInspector.TimelineDetailsContentHelper} contentHelper | 934 * @param {!WebInspector.TimelineDetailsContentHelper} contentHelper |
941 */ | 935 */ |
942 WebInspector.TimelineUIUtils._generateCauses = function(event, target, contentHe
lper) | 936 WebInspector.TimelineUIUtils._generateCauses = function(event, target, contentHe
lper) |
(...skipping 18 matching lines...) Expand all Loading... |
961 case recordTypes.RecalculateStyles: | 955 case recordTypes.RecalculateStyles: |
962 stackLabel = WebInspector.UIString("Recalculation Forced"); | 956 stackLabel = WebInspector.UIString("Recalculation Forced"); |
963 break; | 957 break; |
964 case recordTypes.Layout: | 958 case recordTypes.Layout: |
965 callSiteStackLabel = WebInspector.UIString("First Layout Invalidation"); | 959 callSiteStackLabel = WebInspector.UIString("First Layout Invalidation"); |
966 stackLabel = WebInspector.UIString("Layout Forced"); | 960 stackLabel = WebInspector.UIString("Layout Forced"); |
967 break; | 961 break; |
968 } | 962 } |
969 | 963 |
970 // Direct cause. | 964 // Direct cause. |
971 if (event.stackTrace) | 965 if (event.stackTrace && event.stackTrace.length) { |
| 966 contentHelper.addSection(WebInspector.UIString("Call Stacks")); |
972 contentHelper.appendStackTrace(stackLabel || WebInspector.UIString("Stac
k Trace"), event.stackTrace); | 967 contentHelper.appendStackTrace(stackLabel || WebInspector.UIString("Stac
k Trace"), event.stackTrace); |
| 968 } |
973 | 969 |
974 // Indirect causes. | 970 // Indirect causes. |
975 if (event.invalidationTrackingEvents && target) { // Full invalidation track
ing (experimental). | 971 if (event.invalidationTrackingEvents && target) { // Full invalidation track
ing (experimental). |
976 WebInspector.TimelineUIUtils._generateInvalidations(event, target, conte
ntHelper); | 972 WebInspector.TimelineUIUtils._generateInvalidations(event, target, conte
ntHelper); |
977 } else if (initiator && initiator.stackTrace) { // Partial invalidation trac
king. | 973 } else if (initiator && initiator.stackTrace) { // Partial invalidation trac
king. |
978 contentHelper.appendStackTrace(callSiteStackLabel || WebInspector.UIStri
ng("First Invalidated"), initiator.stackTrace); | 974 contentHelper.appendStackTrace(callSiteStackLabel || WebInspector.UIStri
ng("First Invalidated"), initiator.stackTrace); |
979 } | 975 } |
980 } | 976 } |
981 | 977 |
982 /** | 978 /** |
(...skipping 557 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1540 | 1536 |
1541 /** | 1537 /** |
1542 * @param {!WebInspector.TimelineFrameModelBase} frameModel | 1538 * @param {!WebInspector.TimelineFrameModelBase} frameModel |
1543 * @param {!WebInspector.TimelineFrame} frame | 1539 * @param {!WebInspector.TimelineFrame} frame |
1544 * @param {?WebInspector.FilmStripModel.Frame} filmStripFrame | 1540 * @param {?WebInspector.FilmStripModel.Frame} filmStripFrame |
1545 * @return {!Element} | 1541 * @return {!Element} |
1546 */ | 1542 */ |
1547 WebInspector.TimelineUIUtils.generateDetailsContentForFrame = function(frameMode
l, frame, filmStripFrame) | 1543 WebInspector.TimelineUIUtils.generateDetailsContentForFrame = function(frameMode
l, frame, filmStripFrame) |
1548 { | 1544 { |
1549 var pieChart = WebInspector.TimelineUIUtils.generatePieChart(frame.timeByCat
egory); | 1545 var pieChart = WebInspector.TimelineUIUtils.generatePieChart(frame.timeByCat
egory); |
1550 var contentHelper = new WebInspector.TimelineDetailsContentHelper(null, null
, null, false); | 1546 var contentHelper = new WebInspector.TimelineDetailsContentHelper(null, null
, null); |
| 1547 contentHelper.addSection(WebInspector.UIString("Frame")); |
| 1548 |
1551 var duration = WebInspector.TimelineUIUtils.frameDuration(frame); | 1549 var duration = WebInspector.TimelineUIUtils.frameDuration(frame); |
1552 contentHelper.appendElementRow(WebInspector.UIString("Duration"), duration,
frame.hasWarnings()); | 1550 contentHelper.appendElementRow(WebInspector.UIString("Duration"), duration,
frame.hasWarnings()); |
1553 if (filmStripFrame) { | 1551 if (filmStripFrame) { |
1554 var filmStripPreview = createElementWithClass("img", "timeline-filmstrip
-preview"); | 1552 var filmStripPreview = createElementWithClass("img", "timeline-filmstrip
-preview"); |
1555 filmStripFrame.imageDataPromise().then(onGotImageData.bind(null, filmStr
ipPreview)); | 1553 filmStripFrame.imageDataPromise().then(onGotImageData.bind(null, filmStr
ipPreview)); |
1556 contentHelper.appendElementRow(WebInspector.UIString("Screenshot"), film
StripPreview); | 1554 contentHelper.appendElementRow("", filmStripPreview); |
1557 filmStripPreview.addEventListener("click", frameClicked.bind(null, filmS
tripFrame), false); | 1555 filmStripPreview.addEventListener("click", frameClicked.bind(null, filmS
tripFrame), false); |
1558 } | 1556 } |
1559 var durationInMillis = frame.endTime - frame.startTime; | 1557 var durationInMillis = frame.endTime - frame.startTime; |
1560 contentHelper.appendTextRow(WebInspector.UIString("FPS"), Math.floor(1000 /
durationInMillis)); | 1558 contentHelper.appendTextRow(WebInspector.UIString("FPS"), Math.floor(1000 /
durationInMillis)); |
1561 contentHelper.appendTextRow(WebInspector.UIString("CPU time"), Number.millis
ToString(frame.cpuTime, true)); | 1559 contentHelper.appendTextRow(WebInspector.UIString("CPU time"), Number.millis
ToString(frame.cpuTime, true)); |
1562 contentHelper.appendElementRow(WebInspector.UIString("Aggregated Time"), pie
Chart); | 1560 |
1563 if (Runtime.experiments.isEnabled("layersPanel") && frame.layerTree) { | 1561 if (Runtime.experiments.isEnabled("layersPanel") && frame.layerTree) { |
1564 contentHelper.appendElementRow(WebInspector.UIString("Layer tree"), | 1562 contentHelper.appendElementRow(WebInspector.UIString("Layer tree"), |
1565 WebInspector.Linkifier.linkifyUsingReveal
er(frame.layerTree, WebInspector.UIString("show"))); | 1563 WebInspector.Linkifier.linkifyUsingReveal
er(frame.layerTree, WebInspector.UIString("show"))); |
1566 } | 1564 } |
1567 | 1565 |
1568 /** | 1566 /** |
1569 * @param {!Element} image | 1567 * @param {!Element} image |
1570 * @param {?string} data | 1568 * @param {?string} data |
1571 */ | 1569 */ |
1572 function onGotImageData(image, data) | 1570 function onGotImageData(image, data) |
1573 { | 1571 { |
1574 if (data) | 1572 if (data) |
1575 image.src = "data:image/jpg;base64," + data; | 1573 image.src = "data:image/jpg;base64," + data; |
1576 } | 1574 } |
1577 | 1575 |
1578 /** | 1576 /** |
1579 * @param {!WebInspector.FilmStripModel.Frame} filmStripFrame | 1577 * @param {!WebInspector.FilmStripModel.Frame} filmStripFrame |
1580 */ | 1578 */ |
1581 function frameClicked(filmStripFrame) | 1579 function frameClicked(filmStripFrame) |
1582 { | 1580 { |
1583 new WebInspector.FilmStripView.Dialog(filmStripFrame, 0); | 1581 new WebInspector.FilmStripView.Dialog(filmStripFrame, 0); |
1584 } | 1582 } |
1585 | 1583 |
1586 return contentHelper.element; | 1584 return contentHelper.fragment; |
1587 } | 1585 } |
1588 | 1586 |
1589 /** | 1587 /** |
1590 * @param {!WebInspector.TimelineFrame} frame | 1588 * @param {!WebInspector.TimelineFrame} frame |
1591 * @return {!Element} | 1589 * @return {!Element} |
1592 */ | 1590 */ |
1593 WebInspector.TimelineUIUtils.frameDuration = function(frame) | 1591 WebInspector.TimelineUIUtils.frameDuration = function(frame) |
1594 { | 1592 { |
1595 var durationText = WebInspector.UIString("%s (at %s)", Number.millisToString
(frame.endTime - frame.startTime, true), | 1593 var durationText = WebInspector.UIString("%s (at %s)", Number.millisToString
(frame.endTime - frame.startTime, true), |
1596 Number.millisToString(frame.startTimeOffset, true)); | 1594 Number.millisToString(frame.startTimeOffset, true)); |
(...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1916 row.appendChild(cell); | 1914 row.appendChild(cell); |
1917 this._contentTable.appendChild(row); | 1915 this._contentTable.appendChild(row); |
1918 } | 1916 } |
1919 } | 1917 } |
1920 | 1918 |
1921 /** | 1919 /** |
1922 * @constructor | 1920 * @constructor |
1923 * @param {?WebInspector.Target} target | 1921 * @param {?WebInspector.Target} target |
1924 * @param {?WebInspector.Linkifier} linkifier | 1922 * @param {?WebInspector.Linkifier} linkifier |
1925 * @param {?Map<number, ?WebInspector.DOMNode>} relatedNodesMap | 1923 * @param {?Map<number, ?WebInspector.DOMNode>} relatedNodesMap |
1926 * @param {boolean} monospaceValues | |
1927 */ | 1924 */ |
1928 WebInspector.TimelineDetailsContentHelper = function(target, linkifier, relatedN
odesMap, monospaceValues) | 1925 WebInspector.TimelineDetailsContentHelper = function(target, linkifier, relatedN
odesMap) |
1929 { | 1926 { |
| 1927 this.fragment = createDocumentFragment(); |
| 1928 |
1930 this._linkifier = linkifier; | 1929 this._linkifier = linkifier; |
1931 this._target = target; | 1930 this._target = target; |
1932 this._relatedNodesMap = relatedNodesMap; | 1931 this._relatedNodesMap = relatedNodesMap; |
1933 this.element = createElement("div"); | 1932 |
1934 this.element.className = "timeline-details-view-block"; | 1933 this.element = createElementWithClass("div", "timeline-details-view-block"); |
1935 this._monospaceValues = monospaceValues; | 1934 this._tableElement = this.element.createChild("div", "vbox timeline-details-
chip-body"); |
| 1935 this.fragment.appendChild(this.element); |
1936 } | 1936 } |
1937 | 1937 |
1938 WebInspector.TimelineDetailsContentHelper.prototype = { | 1938 WebInspector.TimelineDetailsContentHelper.prototype = { |
1939 /** | 1939 /** |
| 1940 * @param {string} title |
| 1941 * @param {!WebInspector.TimelineCategory=} category |
| 1942 */ |
| 1943 addSection: function(title, category) |
| 1944 { |
| 1945 if (!this._tableElement.hasChildNodes()) { |
| 1946 this.element.removeChildren(); |
| 1947 } else { |
| 1948 this.element = createElementWithClass("div", "timeline-details-view-
block"); |
| 1949 this.fragment.appendChild(this.element); |
| 1950 } |
| 1951 |
| 1952 if (title) { |
| 1953 var titleElement = this.element.createChild("div", "timeline-details
-chip-title"); |
| 1954 if (category) |
| 1955 titleElement.createChild("div", "timeline-" + category.name); |
| 1956 titleElement.createTextChild(title); |
| 1957 } |
| 1958 |
| 1959 this._tableElement = this.element.createChild("div", "vbox timeline-deta
ils-chip-body"); |
| 1960 this.fragment.appendChild(this.element); |
| 1961 }, |
| 1962 |
| 1963 /** |
1940 * @return {?WebInspector.Linkifier} | 1964 * @return {?WebInspector.Linkifier} |
1941 */ | 1965 */ |
1942 linkifier: function() | 1966 linkifier: function() |
1943 { | 1967 { |
1944 return this._linkifier; | 1968 return this._linkifier; |
1945 }, | 1969 }, |
1946 | 1970 |
1947 /** | 1971 /** |
1948 * @param {?number} backendNodeId | 1972 * @param {?number} backendNodeId |
1949 * @return {?WebInspector.DOMNode} | 1973 * @return {?WebInspector.DOMNode} |
1950 */ | 1974 */ |
1951 nodeForBackendId: function(backendNodeId) | 1975 nodeForBackendId: function(backendNodeId) |
1952 { | 1976 { |
1953 if (!backendNodeId || !this._relatedNodesMap) | 1977 if (!backendNodeId || !this._relatedNodesMap) |
1954 return null; | 1978 return null; |
1955 return this._relatedNodesMap.get(backendNodeId) || null; | 1979 return this._relatedNodesMap.get(backendNodeId) || null; |
1956 }, | 1980 }, |
1957 | 1981 |
1958 /** | 1982 /** |
1959 * @param {string} title | 1983 * @param {string} title |
1960 * @param {string|number|boolean} value | 1984 * @param {string|number|boolean} value |
1961 */ | 1985 */ |
1962 appendTextRow: function(title, value) | 1986 appendTextRow: function(title, value) |
1963 { | 1987 { |
1964 var rowElement = this.element.createChild("div", "timeline-details-view-
row"); | 1988 var rowElement = this._tableElement.createChild("div", "timeline-details
-view-row"); |
1965 rowElement.createChild("div", "timeline-details-view-row-title").textCon
tent = title; | 1989 rowElement.createChild("div", "timeline-details-view-row-title").textCon
tent = title; |
1966 rowElement.createChild("div", "timeline-details-view-row-value" + (this.
_monospaceValues ? " monospace" : "")).textContent = value; | 1990 rowElement.createChild("div", "timeline-details-view-row-value").textCon
tent = value; |
1967 }, | 1991 }, |
1968 | 1992 |
1969 /** | 1993 /** |
1970 * @param {string} title | 1994 * @param {string} title |
1971 * @param {!Node|string} content | 1995 * @param {!Node|string} content |
1972 * @param {boolean=} isWarning | 1996 * @param {boolean=} isWarning |
| 1997 * @param {boolean=} isStacked |
1973 */ | 1998 */ |
1974 appendElementRow: function(title, content, isWarning) | 1999 appendElementRow: function(title, content, isWarning, isStacked) |
1975 { | 2000 { |
1976 var rowElement = this.element.createChild("div", "timeline-details-view-
row"); | 2001 var rowElement = this._tableElement.createChild("div", "timeline-details
-view-row"); |
1977 if (isWarning) | 2002 if (isWarning) |
1978 rowElement.classList.add("timeline-details-warning"); | 2003 rowElement.classList.add("timeline-details-warning"); |
| 2004 if (isStacked) |
| 2005 rowElement.classList.add("timeline-details-stack-values"); |
1979 var titleElement = rowElement.createChild("div", "timeline-details-view-
row-title"); | 2006 var titleElement = rowElement.createChild("div", "timeline-details-view-
row-title"); |
1980 titleElement.textContent = title; | 2007 titleElement.textContent = title; |
1981 var valueElement = rowElement.createChild("div", "timeline-details-view-
row-value" + (this._monospaceValues ? " monospace" : "")); | 2008 var valueElement = rowElement.createChild("div", "timeline-details-view-
row-value"); |
1982 if (content instanceof Node) | 2009 if (content instanceof Node) |
1983 valueElement.appendChild(content); | 2010 valueElement.appendChild(content); |
1984 else | 2011 else |
1985 valueElement.createTextChild(content || ""); | 2012 valueElement.createTextChild(content || ""); |
1986 }, | 2013 }, |
1987 | 2014 |
1988 /** | 2015 /** |
1989 * @param {string} title | 2016 * @param {string} title |
1990 * @param {string} url | 2017 * @param {string} url |
1991 * @param {number} startLine | 2018 * @param {number} startLine |
(...skipping 26 matching lines...) Expand all Loading... |
2018 | 2045 |
2019 /** | 2046 /** |
2020 * @param {string} title | 2047 * @param {string} title |
2021 * @param {!Array.<!ConsoleAgent.CallFrame>} stackTrace | 2048 * @param {!Array.<!ConsoleAgent.CallFrame>} stackTrace |
2022 */ | 2049 */ |
2023 appendStackTrace: function(title, stackTrace) | 2050 appendStackTrace: function(title, stackTrace) |
2024 { | 2051 { |
2025 if (!this._linkifier || !this._target) | 2052 if (!this._linkifier || !this._target) |
2026 return; | 2053 return; |
2027 | 2054 |
2028 var rowElement = this.element.createChild("div", "timeline-details-view-
row"); | 2055 var rowElement = this._tableElement.createChild("div", "timeline-details
-view-row"); |
2029 rowElement.createChild("div", "timeline-details-view-row-title").textCon
tent = title; | 2056 rowElement.createChild("div", "timeline-details-view-row-title").textCon
tent = title; |
2030 this.createChildStackTraceElement(rowElement, stackTrace); | 2057 this.createChildStackTraceElement(rowElement, stackTrace); |
2031 }, | 2058 }, |
2032 | 2059 |
2033 /** | 2060 /** |
2034 * @param {!Element} parentElement | 2061 * @param {!Element} parentElement |
2035 * @param {!Array.<!ConsoleAgent.CallFrame>} stackTrace | 2062 * @param {!Array.<!ConsoleAgent.CallFrame>} stackTrace |
2036 */ | 2063 */ |
2037 createChildStackTraceElement: function(parentElement, stackTrace) | 2064 createChildStackTraceElement: function(parentElement, stackTrace) |
2038 { | 2065 { |
2039 if (!this._linkifier || !this._target) | 2066 if (!this._linkifier || !this._target) |
2040 return; | 2067 return; |
2041 | 2068 parentElement.classList.add("timeline-details-stack-values"); |
2042 var stackTraceElement = parentElement.createChild("div", "timeline-detai
ls-view-row-value timeline-details-view-row-stack-trace monospace"); | 2069 var stackTraceElement = parentElement.createChild("div", "timeline-detai
ls-view-row-value timeline-details-view-row-stack-trace"); |
2043 | |
2044 var callFrameElem = WebInspector.DOMPresentationUtils.buildStackTracePre
viewContents(this._target, this._linkifier, stackTrace); | 2070 var callFrameElem = WebInspector.DOMPresentationUtils.buildStackTracePre
viewContents(this._target, this._linkifier, stackTrace); |
2045 | |
2046 stackTraceElement.appendChild(callFrameElem); | 2071 stackTraceElement.appendChild(callFrameElem); |
2047 }, | 2072 }, |
2048 | 2073 |
2049 /** | 2074 /** |
2050 * @param {!WebInspector.TracingModel.Event} event | 2075 * @param {!WebInspector.TracingModel.Event} event |
2051 * @param {string=} warningType | 2076 * @param {string=} warningType |
2052 */ | 2077 */ |
2053 appendWarningRow: function(event, warningType) | 2078 appendWarningRow: function(event, warningType) |
2054 { | 2079 { |
2055 var warning = WebInspector.TimelineUIUtils.eventWarning(event, warningTy
pe); | 2080 var warning = WebInspector.TimelineUIUtils.eventWarning(event, warningTy
pe); |
(...skipping 30 matching lines...) Expand all Loading... |
2086 case warnings.V8Deopt: | 2111 case warnings.V8Deopt: |
2087 span.appendChild(WebInspector.linkifyURLAsNode("https://github.com/Googl
eChrome/devtools-docs/issues/53", | 2112 span.appendChild(WebInspector.linkifyURLAsNode("https://github.com/Googl
eChrome/devtools-docs/issues/53", |
2088 WebInspector.UIString("Not optimized"), undefined, true)); | 2113 WebInspector.UIString("Not optimized"), undefined, true)); |
2089 span.createTextChild(WebInspector.UIString(": %s", eventData["deoptReaso
n"])); | 2114 span.createTextChild(WebInspector.UIString(": %s", eventData["deoptReaso
n"])); |
2090 break; | 2115 break; |
2091 default: | 2116 default: |
2092 console.assert(false, "Unhandled TimelineModel.WarningType"); | 2117 console.assert(false, "Unhandled TimelineModel.WarningType"); |
2093 } | 2118 } |
2094 return span; | 2119 return span; |
2095 } | 2120 } |
OLD | NEW |