| 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 626 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 637 * @param {!SDK.TracingModel.Event} event | 637 * @param {!SDK.TracingModel.Event} event |
| 638 * @return {boolean} | 638 * @return {boolean} |
| 639 */ | 639 */ |
| 640 _processEvent(event) { | 640 _processEvent(event) { |
| 641 var eventStack = this._eventStack; | 641 var eventStack = this._eventStack; |
| 642 while (eventStack.length && eventStack.peekLast().endTime <= event.startTime
) | 642 while (eventStack.length && eventStack.peekLast().endTime <= event.startTime
) |
| 643 eventStack.pop(); | 643 eventStack.pop(); |
| 644 | 644 |
| 645 var recordTypes = TimelineModel.TimelineModel.RecordType; | 645 var recordTypes = TimelineModel.TimelineModel.RecordType; |
| 646 | 646 |
| 647 if (!eventStack.length) { |
| 648 if (this._currentTaskLayoutAndRecalcEvents && this._currentTaskLayoutAndRe
calcEvents.length) { |
| 649 var totalTime = this._currentTaskLayoutAndRecalcEvents.reduce((time, eve
nt) => time + event.duration, 0); |
| 650 if (totalTime > TimelineModel.TimelineModel.Thresholds.ForcedLayout) { |
| 651 for (var e of this._currentTaskLayoutAndRecalcEvents) { |
| 652 let timelineData = TimelineModel.TimelineData.forEvent(e); |
| 653 timelineData.warning = e.name === recordTypes.Layout ? |
| 654 TimelineModel.TimelineModel.WarningType.ForcedLayout : |
| 655 TimelineModel.TimelineModel.WarningType.ForcedStyle; |
| 656 } |
| 657 } |
| 658 } |
| 659 this._currentTaskLayoutAndRecalcEvents = []; |
| 660 } |
| 661 |
| 647 if (this._currentScriptEvent && event.startTime > this._currentScriptEvent.e
ndTime) | 662 if (this._currentScriptEvent && event.startTime > this._currentScriptEvent.e
ndTime) |
| 648 this._currentScriptEvent = null; | 663 this._currentScriptEvent = null; |
| 649 | 664 |
| 650 var eventData = event.args['data'] || event.args['beginData'] || {}; | 665 var eventData = event.args['data'] || event.args['beginData'] || {}; |
| 651 var timelineData = TimelineModel.TimelineData.forEvent(event); | 666 var timelineData = TimelineModel.TimelineData.forEvent(event); |
| 652 if (eventData['stackTrace']) | 667 if (eventData['stackTrace']) |
| 653 timelineData.stackTrace = eventData['stackTrace']; | 668 timelineData.stackTrace = eventData['stackTrace']; |
| 654 if (timelineData.stackTrace && event.name !== recordTypes.JSSample) { | 669 if (timelineData.stackTrace && event.name !== recordTypes.JSSample) { |
| 655 // TraceEvents come with 1-based line & column numbers. The frontend code | 670 // TraceEvents come with 1-based line & column numbers. The frontend code |
| 656 // requires 0-based ones. Adjust the values. | 671 // requires 0-based ones. Adjust the values. |
| (...skipping 18 matching lines...) Expand all Loading... |
| 675 this._lastScheduleStyleRecalculation[eventData['frame']] = event; | 690 this._lastScheduleStyleRecalculation[eventData['frame']] = event; |
| 676 break; | 691 break; |
| 677 | 692 |
| 678 case recordTypes.UpdateLayoutTree: | 693 case recordTypes.UpdateLayoutTree: |
| 679 case recordTypes.RecalculateStyles: | 694 case recordTypes.RecalculateStyles: |
| 680 this._invalidationTracker.didRecalcStyle(event); | 695 this._invalidationTracker.didRecalcStyle(event); |
| 681 if (event.args['beginData']) | 696 if (event.args['beginData']) |
| 682 timelineData.setInitiator(this._lastScheduleStyleRecalculation[event.a
rgs['beginData']['frame']]); | 697 timelineData.setInitiator(this._lastScheduleStyleRecalculation[event.a
rgs['beginData']['frame']]); |
| 683 this._lastRecalculateStylesEvent = event; | 698 this._lastRecalculateStylesEvent = event; |
| 684 if (this._currentScriptEvent) | 699 if (this._currentScriptEvent) |
| 685 timelineData.warning = TimelineModel.TimelineModel.WarningType.ForcedS
tyle; | 700 this._currentTaskLayoutAndRecalcEvents.push(event); |
| 686 break; | 701 break; |
| 687 | 702 |
| 688 case recordTypes.ScheduleStyleInvalidationTracking: | 703 case recordTypes.ScheduleStyleInvalidationTracking: |
| 689 case recordTypes.StyleRecalcInvalidationTracking: | 704 case recordTypes.StyleRecalcInvalidationTracking: |
| 690 case recordTypes.StyleInvalidatorInvalidationTracking: | 705 case recordTypes.StyleInvalidatorInvalidationTracking: |
| 691 case recordTypes.LayoutInvalidationTracking: | 706 case recordTypes.LayoutInvalidationTracking: |
| 692 case recordTypes.LayerInvalidationTracking: | 707 case recordTypes.LayerInvalidationTracking: |
| 693 case recordTypes.PaintInvalidationTracking: | 708 case recordTypes.PaintInvalidationTracking: |
| 694 case recordTypes.ScrollInvalidationTracking: | 709 case recordTypes.ScrollInvalidationTracking: |
| 695 this._invalidationTracker.addInvalidation(new TimelineModel.Invalidation
TrackingEvent(event)); | 710 this._invalidationTracker.addInvalidation(new TimelineModel.Invalidation
TrackingEvent(event)); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 708 | 723 |
| 709 case recordTypes.Layout: | 724 case recordTypes.Layout: |
| 710 this._invalidationTracker.didLayout(event); | 725 this._invalidationTracker.didLayout(event); |
| 711 var frameId = event.args['beginData']['frame']; | 726 var frameId = event.args['beginData']['frame']; |
| 712 timelineData.setInitiator(this._layoutInvalidate[frameId]); | 727 timelineData.setInitiator(this._layoutInvalidate[frameId]); |
| 713 // In case we have no closing Layout event, endData is not available. | 728 // In case we have no closing Layout event, endData is not available. |
| 714 if (event.args['endData']) | 729 if (event.args['endData']) |
| 715 timelineData.backendNodeId = event.args['endData']['rootNode']; | 730 timelineData.backendNodeId = event.args['endData']['rootNode']; |
| 716 this._layoutInvalidate[frameId] = null; | 731 this._layoutInvalidate[frameId] = null; |
| 717 if (this._currentScriptEvent) | 732 if (this._currentScriptEvent) |
| 718 timelineData.warning = TimelineModel.TimelineModel.WarningType.ForcedL
ayout; | 733 this._currentTaskLayoutAndRecalcEvents.push(event); |
| 734 break; |
| 735 |
| 736 case recordTypes.EventDispatch: |
| 737 if (event.duration > TimelineModel.TimelineModel.Thresholds.RecurringHan
dler) |
| 738 timelineData.warning = TimelineModel.TimelineModel.WarningType.LongH
andler; |
| 739 break; |
| 740 |
| 741 case recordTypes.TimerFire: |
| 742 case recordTypes.FireAnimationFrame: |
| 743 if (event.duration > TimelineModel.TimelineModel.Thresholds.RecurringHan
dler) |
| 744 timelineData.warning = TimelineModel.TimelineModel.WarningType.LongR
ecurringHandler; |
| 719 break; | 745 break; |
| 720 | 746 |
| 721 case recordTypes.FunctionCall: | 747 case recordTypes.FunctionCall: |
| 722 // Compatibility with old format. | 748 // Compatibility with old format. |
| 723 if (typeof eventData['scriptName'] === 'string') | 749 if (typeof eventData['scriptName'] === 'string') |
| 724 eventData['url'] = eventData['scriptName']; | 750 eventData['url'] = eventData['scriptName']; |
| 725 if (typeof eventData['scriptLine'] === 'number') | 751 if (typeof eventData['scriptLine'] === 'number') |
| 726 eventData['lineNumber'] = eventData['scriptLine']; | 752 eventData['lineNumber'] = eventData['scriptLine']; |
| 753 |
| 727 // Fallthrough. | 754 // Fallthrough. |
| 755 |
| 728 case recordTypes.EvaluateScript: | 756 case recordTypes.EvaluateScript: |
| 729 case recordTypes.CompileScript: | 757 case recordTypes.CompileScript: |
| 730 if (typeof eventData['lineNumber'] === 'number') | 758 if (typeof eventData['lineNumber'] === 'number') |
| 731 --eventData['lineNumber']; | 759 --eventData['lineNumber']; |
| 732 if (typeof eventData['columnNumber'] === 'number') | 760 if (typeof eventData['columnNumber'] === 'number') |
| 733 --eventData['columnNumber']; | 761 --eventData['columnNumber']; |
| 762 |
| 734 // Fallthrough intended. | 763 // Fallthrough intended. |
| 764 |
| 735 case recordTypes.RunMicrotasks: | 765 case recordTypes.RunMicrotasks: |
| 736 // Microtasks technically are not necessarily scripts, but for purpose o
f | 766 // Microtasks technically are not necessarily scripts, but for purpose o
f |
| 737 // forced sync style recalc or layout detection they are. | 767 // forced sync style recalc or layout detection they are. |
| 738 if (!this._currentScriptEvent) | 768 if (!this._currentScriptEvent) |
| 739 this._currentScriptEvent = event; | 769 this._currentScriptEvent = event; |
| 740 break; | 770 break; |
| 741 | 771 |
| 742 case recordTypes.SetLayerTreeId: | 772 case recordTypes.SetLayerTreeId: |
| 743 this._inspectedTargetLayerTreeId = event.args['layerTreeId'] || event.ar
gs['data']['layerTreeId']; | 773 this._inspectedTargetLayerTreeId = event.args['layerTreeId'] || event.ar
gs['data']['layerTreeId']; |
| 744 break; | 774 break; |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 821 this._hadCommitLoad = true; | 851 this._hadCommitLoad = true; |
| 822 this._firstCompositeLayers = null; | 852 this._firstCompositeLayers = null; |
| 823 break; | 853 break; |
| 824 | 854 |
| 825 case recordTypes.CompositeLayers: | 855 case recordTypes.CompositeLayers: |
| 826 if (!this._firstCompositeLayers && this._hadCommitLoad) | 856 if (!this._firstCompositeLayers && this._hadCommitLoad) |
| 827 this._firstCompositeLayers = event; | 857 this._firstCompositeLayers = event; |
| 828 break; | 858 break; |
| 829 | 859 |
| 830 case recordTypes.FireIdleCallback: | 860 case recordTypes.FireIdleCallback: |
| 831 if (event.duration > eventData['allottedMilliseconds']) | 861 if (event.duration > |
| 862 eventData['allottedMilliseconds'] + TimelineModel.TimelineModel.Thre
sholds.IdleCallbackAddon) |
| 832 timelineData.warning = TimelineModel.TimelineModel.WarningType.IdleDea
dlineExceeded; | 863 timelineData.warning = TimelineModel.TimelineModel.WarningType.IdleDea
dlineExceeded; |
| 833 | |
| 834 break; | 864 break; |
| 835 } | 865 } |
| 836 if (SDK.TracingModel.isAsyncPhase(event.phase)) | 866 if (SDK.TracingModel.isAsyncPhase(event.phase)) |
| 837 return true; | 867 return true; |
| 838 var duration = event.duration; | 868 var duration = event.duration; |
| 839 if (!duration) | 869 if (!duration) |
| 840 return true; | 870 return true; |
| 841 if (eventStack.length) { | 871 if (eventStack.length) { |
| 842 var parent = eventStack.peekLast(); | 872 var parent = eventStack.peekLast(); |
| 843 parent.selfTime -= duration; | 873 parent.selfTime -= duration; |
| (...skipping 399 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1243 LatencyInfo: 'latencyInfo' | 1273 LatencyInfo: 'latencyInfo' |
| 1244 }; | 1274 }; |
| 1245 | 1275 |
| 1246 /** | 1276 /** |
| 1247 * @enum {string} | 1277 * @enum {string} |
| 1248 */ | 1278 */ |
| 1249 TimelineModel.TimelineModel.WarningType = { | 1279 TimelineModel.TimelineModel.WarningType = { |
| 1250 ForcedStyle: 'ForcedStyle', | 1280 ForcedStyle: 'ForcedStyle', |
| 1251 ForcedLayout: 'ForcedLayout', | 1281 ForcedLayout: 'ForcedLayout', |
| 1252 IdleDeadlineExceeded: 'IdleDeadlineExceeded', | 1282 IdleDeadlineExceeded: 'IdleDeadlineExceeded', |
| 1283 LongHandler: 'LongHandler', |
| 1284 LongRecurringHandler: 'LongRecurringHandler', |
| 1253 V8Deopt: 'V8Deopt' | 1285 V8Deopt: 'V8Deopt' |
| 1254 }; | 1286 }; |
| 1255 | 1287 |
| 1256 TimelineModel.TimelineModel.MainThreadName = 'main'; | 1288 TimelineModel.TimelineModel.MainThreadName = 'main'; |
| 1257 TimelineModel.TimelineModel.WorkerThreadName = 'DedicatedWorker Thread'; | 1289 TimelineModel.TimelineModel.WorkerThreadName = 'DedicatedWorker Thread'; |
| 1258 TimelineModel.TimelineModel.RendererMainThreadName = 'CrRendererMain'; | 1290 TimelineModel.TimelineModel.RendererMainThreadName = 'CrRendererMain'; |
| 1259 | 1291 |
| 1260 /** | 1292 /** |
| 1261 * @enum {symbol} | 1293 * @enum {symbol} |
| 1262 */ | 1294 */ |
| 1263 TimelineModel.TimelineModel.AsyncEventGroup = { | 1295 TimelineModel.TimelineModel.AsyncEventGroup = { |
| 1264 animation: Symbol('animation'), | 1296 animation: Symbol('animation'), |
| 1265 console: Symbol('console'), | 1297 console: Symbol('console'), |
| 1266 userTiming: Symbol('userTiming'), | 1298 userTiming: Symbol('userTiming'), |
| 1267 input: Symbol('input') | 1299 input: Symbol('input') |
| 1268 }; | 1300 }; |
| 1269 | 1301 |
| 1270 | 1302 |
| 1271 TimelineModel.TimelineModel.DevToolsMetadataEvent = { | 1303 TimelineModel.TimelineModel.DevToolsMetadataEvent = { |
| 1272 TracingStartedInBrowser: 'TracingStartedInBrowser', | 1304 TracingStartedInBrowser: 'TracingStartedInBrowser', |
| 1273 TracingStartedInPage: 'TracingStartedInPage', | 1305 TracingStartedInPage: 'TracingStartedInPage', |
| 1274 TracingSessionIdForWorker: 'TracingSessionIdForWorker', | 1306 TracingSessionIdForWorker: 'TracingSessionIdForWorker', |
| 1275 }; | 1307 }; |
| 1276 | 1308 |
| 1309 TimelineModel.TimelineModel.Thresholds = { |
| 1310 Handler: 150, |
| 1311 RecurringHandler: 50, |
| 1312 ForcedLayout: 30, |
| 1313 IdleCallbackAddon: 5 |
| 1314 }; |
| 1315 |
| 1277 /** | 1316 /** |
| 1278 * @unrestricted | 1317 * @unrestricted |
| 1279 */ | 1318 */ |
| 1280 TimelineModel.TimelineModel.VirtualThread = class { | 1319 TimelineModel.TimelineModel.VirtualThread = class { |
| 1281 /** | 1320 /** |
| 1282 * @param {string} name | 1321 * @param {string} name |
| 1283 */ | 1322 */ |
| 1284 constructor(name) { | 1323 constructor(name) { |
| 1285 this.name = name; | 1324 this.name = name; |
| 1286 /** @type {!Array<!SDK.TracingModel.Event>} */ | 1325 /** @type {!Array<!SDK.TracingModel.Event>} */ |
| (...skipping 701 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1988 var data = event[TimelineModel.TimelineData._symbol]; | 2027 var data = event[TimelineModel.TimelineData._symbol]; |
| 1989 if (!data) { | 2028 if (!data) { |
| 1990 data = new TimelineModel.TimelineData(); | 2029 data = new TimelineModel.TimelineData(); |
| 1991 event[TimelineModel.TimelineData._symbol] = data; | 2030 event[TimelineModel.TimelineData._symbol] = data; |
| 1992 } | 2031 } |
| 1993 return data; | 2032 return data; |
| 1994 } | 2033 } |
| 1995 }; | 2034 }; |
| 1996 | 2035 |
| 1997 TimelineModel.TimelineData._symbol = Symbol('timelineData'); | 2036 TimelineModel.TimelineData._symbol = Symbol('timelineData'); |
| OLD | NEW |