OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2012 Google Inc. All rights reserved. | 2 * Copyright (C) 2012 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 813 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
824 var eventStack = this._eventStack; | 824 var eventStack = this._eventStack; |
825 while (eventStack.length && eventStack.peekLast().endTime <= event.start
Time) | 825 while (eventStack.length && eventStack.peekLast().endTime <= event.start
Time) |
826 eventStack.pop(); | 826 eventStack.pop(); |
827 | 827 |
828 var recordTypes = WebInspector.TimelineModel.RecordType; | 828 var recordTypes = WebInspector.TimelineModel.RecordType; |
829 | 829 |
830 if (this._currentScriptEvent && event.startTime > this._currentScriptEve
nt.endTime) | 830 if (this._currentScriptEvent && event.startTime > this._currentScriptEve
nt.endTime) |
831 this._currentScriptEvent = null; | 831 this._currentScriptEvent = null; |
832 | 832 |
833 var eventData = event.args["data"] || event.args["beginData"] || {}; | 833 var eventData = event.args["data"] || event.args["beginData"] || {}; |
834 if (eventData && eventData["stackTrace"]) | 834 if (eventData["stackTrace"]) |
835 event.stackTrace = eventData["stackTrace"]; | 835 event.stackTrace = eventData["stackTrace"]; |
| 836 if (event.stackTrace && event.name !== recordTypes.JSSample) { |
| 837 // TraceEvents come with 1-based line & column numbers. The frontend
code |
| 838 // requires 0-based ones. Adjust the values. |
| 839 for (var i = 0; i < event.stackTrace.length; ++i) { |
| 840 --event.stackTrace[i].lineNumber; |
| 841 --event.stackTrace[i].columnNumber; |
| 842 } |
| 843 } |
836 | 844 |
837 if (eventStack.length && eventStack.peekLast().name === recordTypes.Even
tDispatch) | 845 if (eventStack.length && eventStack.peekLast().name === recordTypes.Even
tDispatch) |
838 eventStack.peekLast().hasChildren = true; | 846 eventStack.peekLast().hasChildren = true; |
839 this._asyncEventTracker.processEvent(event); | 847 this._asyncEventTracker.processEvent(event); |
840 if (event.initiator && event.initiator.url) | 848 if (event.initiator && event.initiator.url) |
841 event.url = event.initiator.url; | 849 event.url = event.initiator.url; |
842 switch (event.name) { | 850 switch (event.name) { |
843 case recordTypes.ResourceSendRequest: | 851 case recordTypes.ResourceSendRequest: |
844 case recordTypes.WebSocketCreate: | 852 case recordTypes.WebSocketCreate: |
845 event.url = event.args["data"]["url"]; | 853 event.url = eventData["url"]; |
846 event.initiator = eventStack.peekLast() || null; | 854 event.initiator = eventStack.peekLast() || null; |
847 break; | 855 break; |
848 | 856 |
849 case recordTypes.ScheduleStyleRecalculation: | 857 case recordTypes.ScheduleStyleRecalculation: |
850 this._lastScheduleStyleRecalculation[event.args["data"]["frame"]] =
event; | 858 this._lastScheduleStyleRecalculation[eventData["frame"]] = event; |
851 break; | 859 break; |
852 | 860 |
853 case recordTypes.UpdateLayoutTree: | 861 case recordTypes.UpdateLayoutTree: |
854 case recordTypes.RecalculateStyles: | 862 case recordTypes.RecalculateStyles: |
855 this._invalidationTracker.didRecalcStyle(event); | 863 this._invalidationTracker.didRecalcStyle(event); |
856 if (event.args["beginData"]) | 864 if (event.args["beginData"]) |
857 event.initiator = this._lastScheduleStyleRecalculation[event.arg
s["beginData"]["frame"]]; | 865 event.initiator = this._lastScheduleStyleRecalculation[event.arg
s["beginData"]["frame"]]; |
858 this._lastRecalculateStylesEvent = event; | 866 this._lastRecalculateStylesEvent = event; |
859 if (this._currentScriptEvent) | 867 if (this._currentScriptEvent) |
860 event.warning = WebInspector.TimelineModel.WarningType.ForcedSty
le; | 868 event.warning = WebInspector.TimelineModel.WarningType.ForcedSty
le; |
861 break; | 869 break; |
862 | 870 |
863 case recordTypes.ScheduleStyleInvalidationTracking: | 871 case recordTypes.ScheduleStyleInvalidationTracking: |
864 case recordTypes.StyleRecalcInvalidationTracking: | 872 case recordTypes.StyleRecalcInvalidationTracking: |
865 case recordTypes.StyleInvalidatorInvalidationTracking: | 873 case recordTypes.StyleInvalidatorInvalidationTracking: |
866 case recordTypes.LayoutInvalidationTracking: | 874 case recordTypes.LayoutInvalidationTracking: |
867 case recordTypes.LayerInvalidationTracking: | 875 case recordTypes.LayerInvalidationTracking: |
868 case recordTypes.PaintInvalidationTracking: | 876 case recordTypes.PaintInvalidationTracking: |
869 case recordTypes.ScrollInvalidationTracking: | 877 case recordTypes.ScrollInvalidationTracking: |
870 this._invalidationTracker.addInvalidation(new WebInspector.Invalidat
ionTrackingEvent(event)); | 878 this._invalidationTracker.addInvalidation(new WebInspector.Invalidat
ionTrackingEvent(event)); |
871 break; | 879 break; |
872 | 880 |
873 case recordTypes.InvalidateLayout: | 881 case recordTypes.InvalidateLayout: |
874 // Consider style recalculation as a reason for layout invalidation, | 882 // Consider style recalculation as a reason for layout invalidation, |
875 // but only if we had no earlier layout invalidation records. | 883 // but only if we had no earlier layout invalidation records. |
876 var layoutInitator = event; | 884 var layoutInitator = event; |
877 var frameId = event.args["data"]["frame"]; | 885 var frameId = eventData["frame"]; |
878 if (!this._layoutInvalidate[frameId] && this._lastRecalculateStylesE
vent && this._lastRecalculateStylesEvent.endTime > event.startTime) | 886 if (!this._layoutInvalidate[frameId] && this._lastRecalculateStylesE
vent && this._lastRecalculateStylesEvent.endTime > event.startTime) |
879 layoutInitator = this._lastRecalculateStylesEvent.initiator; | 887 layoutInitator = this._lastRecalculateStylesEvent.initiator; |
880 this._layoutInvalidate[frameId] = layoutInitator; | 888 this._layoutInvalidate[frameId] = layoutInitator; |
881 break; | 889 break; |
882 | 890 |
883 case recordTypes.Layout: | 891 case recordTypes.Layout: |
884 this._invalidationTracker.didLayout(event); | 892 this._invalidationTracker.didLayout(event); |
885 var frameId = event.args["beginData"]["frame"]; | 893 var frameId = event.args["beginData"]["frame"]; |
886 event.initiator = this._layoutInvalidate[frameId]; | 894 event.initiator = this._layoutInvalidate[frameId]; |
887 // In case we have no closing Layout event, endData is not available
. | 895 // In case we have no closing Layout event, endData is not available
. |
888 if (event.args["endData"]) { | 896 if (event.args["endData"]) { |
889 event.backendNodeId = event.args["endData"]["rootNode"]; | 897 event.backendNodeId = event.args["endData"]["rootNode"]; |
890 event.highlightQuad = event.args["endData"]["root"]; | 898 event.highlightQuad = event.args["endData"]["root"]; |
891 } | 899 } |
892 this._layoutInvalidate[frameId] = null; | 900 this._layoutInvalidate[frameId] = null; |
893 if (this._currentScriptEvent) | 901 if (this._currentScriptEvent) |
894 event.warning = WebInspector.TimelineModel.WarningType.ForcedLay
out; | 902 event.warning = WebInspector.TimelineModel.WarningType.ForcedLay
out; |
895 break; | 903 break; |
896 | 904 |
| 905 case recordTypes.FunctionCall: |
| 906 // Compatibility with old format. |
| 907 if (typeof eventData["scriptName"] === "string") |
| 908 eventData["url"] = eventData["scriptName"]; |
| 909 if (typeof eventData["scriptLine"] === "number") |
| 910 eventData["lineNumber"] = eventData["scriptLine"]; |
| 911 // Fallthrough. |
897 case recordTypes.EvaluateScript: | 912 case recordTypes.EvaluateScript: |
898 case recordTypes.FunctionCall: | 913 case recordTypes.CompileScript: |
| 914 if (typeof eventData["lineNumber"] === "number") |
| 915 --eventData["lineNumber"]; |
| 916 if (typeof eventData["columnNumber"] === "number") |
| 917 --eventData["columnNumber"]; |
899 if (!this._currentScriptEvent) | 918 if (!this._currentScriptEvent) |
900 this._currentScriptEvent = event; | 919 this._currentScriptEvent = event; |
901 break; | 920 break; |
902 | 921 |
903 case recordTypes.SetLayerTreeId: | 922 case recordTypes.SetLayerTreeId: |
904 this._inspectedTargetLayerTreeId = event.args["layerTreeId"] || even
t.args["data"]["layerTreeId"]; | 923 this._inspectedTargetLayerTreeId = event.args["layerTreeId"] || even
t.args["data"]["layerTreeId"]; |
905 break; | 924 break; |
906 | 925 |
907 case recordTypes.Paint: | 926 case recordTypes.Paint: |
908 this._invalidationTracker.didPaint(event); | 927 this._invalidationTracker.didPaint(event); |
909 event.highlightQuad = event.args["data"]["clip"]; | 928 event.highlightQuad = eventData["clip"]; |
910 event.backendNodeId = event.args["data"]["nodeId"]; | 929 event.backendNodeId = eventData["nodeId"]; |
911 // Only keep layer paint events, skip paints for subframes that get
painted to the same layer as parent. | 930 // Only keep layer paint events, skip paints for subframes that get
painted to the same layer as parent. |
912 if (!event.args["data"]["layerId"]) | 931 if (!eventData["layerId"]) |
913 break; | 932 break; |
914 var layerId = event.args["data"]["layerId"]; | 933 var layerId = eventData["layerId"]; |
915 this._lastPaintForLayer[layerId] = event; | 934 this._lastPaintForLayer[layerId] = event; |
916 break; | 935 break; |
917 | 936 |
918 case recordTypes.DisplayItemListSnapshot: | 937 case recordTypes.DisplayItemListSnapshot: |
919 case recordTypes.PictureSnapshot: | 938 case recordTypes.PictureSnapshot: |
920 var layerUpdateEvent = this._findAncestorEvent(recordTypes.UpdateLay
er); | 939 var layerUpdateEvent = this._findAncestorEvent(recordTypes.UpdateLay
er); |
921 if (!layerUpdateEvent || layerUpdateEvent.args["layerTreeId"] !== th
is._inspectedTargetLayerTreeId) | 940 if (!layerUpdateEvent || layerUpdateEvent.args["layerTreeId"] !== th
is._inspectedTargetLayerTreeId) |
922 break; | 941 break; |
923 var paintEvent = this._lastPaintForLayer[layerUpdateEvent.args["laye
rId"]]; | 942 var paintEvent = this._lastPaintForLayer[layerUpdateEvent.args["laye
rId"]]; |
924 if (paintEvent) | 943 if (paintEvent) |
925 paintEvent.picture = event; | 944 paintEvent.picture = event; |
926 break; | 945 break; |
927 | 946 |
928 case recordTypes.ScrollLayer: | 947 case recordTypes.ScrollLayer: |
929 event.backendNodeId = event.args["data"]["nodeId"]; | 948 event.backendNodeId = eventData["nodeId"]; |
930 break; | 949 break; |
931 | 950 |
932 case recordTypes.PaintImage: | 951 case recordTypes.PaintImage: |
933 event.backendNodeId = event.args["data"]["nodeId"]; | 952 event.backendNodeId = eventData["nodeId"]; |
934 event.url = event.args["data"]["url"]; | 953 event.url = eventData["url"]; |
935 break; | 954 break; |
936 | 955 |
937 case recordTypes.DecodeImage: | 956 case recordTypes.DecodeImage: |
938 case recordTypes.ResizeImage: | 957 case recordTypes.ResizeImage: |
939 var paintImageEvent = this._findAncestorEvent(recordTypes.PaintImage
); | 958 var paintImageEvent = this._findAncestorEvent(recordTypes.PaintImage
); |
940 if (!paintImageEvent) { | 959 if (!paintImageEvent) { |
941 var decodeLazyPixelRefEvent = this._findAncestorEvent(recordType
s.DecodeLazyPixelRef); | 960 var decodeLazyPixelRefEvent = this._findAncestorEvent(recordType
s.DecodeLazyPixelRef); |
942 paintImageEvent = decodeLazyPixelRefEvent && this._paintImageEve
ntByPixelRefId[decodeLazyPixelRefEvent.args["LazyPixelRef"]]; | 961 paintImageEvent = decodeLazyPixelRefEvent && this._paintImageEve
ntByPixelRefId[decodeLazyPixelRefEvent.args["LazyPixelRef"]]; |
943 } | 962 } |
944 if (!paintImageEvent) | 963 if (!paintImageEvent) |
(...skipping 495 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1440 /** @type {?Array.<!Object.<string, number>>} */ | 1459 /** @type {?Array.<!Object.<string, number>>} */ |
1441 this.invalidationList = eventData["invalidationList"]; | 1460 this.invalidationList = eventData["invalidationList"]; |
1442 /** @type {!WebInspector.InvalidationCause} */ | 1461 /** @type {!WebInspector.InvalidationCause} */ |
1443 this.cause = {reason: eventData["reason"], stackTrace: eventData["stackTrace
"]}; | 1462 this.cause = {reason: eventData["reason"], stackTrace: eventData["stackTrace
"]}; |
1444 | 1463 |
1445 // FIXME: Move this to TimelineUIUtils.js. | 1464 // FIXME: Move this to TimelineUIUtils.js. |
1446 if (!this.cause.reason && this.cause.stackTrace && this.type === WebInspecto
r.TimelineModel.RecordType.LayoutInvalidationTracking) | 1465 if (!this.cause.reason && this.cause.stackTrace && this.type === WebInspecto
r.TimelineModel.RecordType.LayoutInvalidationTracking) |
1447 this.cause.reason = "Layout forced"; | 1466 this.cause.reason = "Layout forced"; |
1448 } | 1467 } |
1449 | 1468 |
1450 /** @typedef {{reason: string, stackTrace: ?Array.<!RuntimeAgent.CallFrame>}} */ | 1469 /** @typedef {{reason: string, stackTrace: ?Array<!RuntimeAgent.CallFrame>}} */ |
1451 WebInspector.InvalidationCause; | 1470 WebInspector.InvalidationCause; |
1452 | 1471 |
1453 /** | 1472 /** |
1454 * @constructor | 1473 * @constructor |
1455 */ | 1474 */ |
1456 WebInspector.InvalidationTracker = function() | 1475 WebInspector.InvalidationTracker = function() |
1457 { | 1476 { |
1458 this._initializePerFrameState(); | 1477 this._initializePerFrameState(); |
1459 } | 1478 } |
1460 | 1479 |
(...skipping 298 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1759 if (!id) | 1778 if (!id) |
1760 return; | 1779 return; |
1761 /** @type {!Map<string, !WebInspector.TracingModel.Event>|undefined} */ | 1780 /** @type {!Map<string, !WebInspector.TracingModel.Event>|undefined} */ |
1762 var initiatorMap = this._initiatorByType.get(initiatorType); | 1781 var initiatorMap = this._initiatorByType.get(initiatorType); |
1763 if (isInitiator) | 1782 if (isInitiator) |
1764 initiatorMap.set(id, event); | 1783 initiatorMap.set(id, event); |
1765 else | 1784 else |
1766 event.initiator = initiatorMap.get(id) || null; | 1785 event.initiator = initiatorMap.get(id) || null; |
1767 } | 1786 } |
1768 } | 1787 } |
OLD | NEW |