| 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 259 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 270 * @return {!WebInspector.TimelineModel.MetadataEvents} | 270 * @return {!WebInspector.TimelineModel.MetadataEvents} |
| 271 */ | 271 */ |
| 272 _processMetadataEvents(tracingModel, produceTraceStartedInPage) { | 272 _processMetadataEvents(tracingModel, produceTraceStartedInPage) { |
| 273 var metadataEvents = tracingModel.devToolsMetadataEvents(); | 273 var metadataEvents = tracingModel.devToolsMetadataEvents(); |
| 274 | 274 |
| 275 var pageDevToolsMetadataEvents = []; | 275 var pageDevToolsMetadataEvents = []; |
| 276 var workersDevToolsMetadataEvents = []; | 276 var workersDevToolsMetadataEvents = []; |
| 277 for (var event of metadataEvents) { | 277 for (var event of metadataEvents) { |
| 278 if (event.name === WebInspector.TimelineModel.DevToolsMetadataEvent.Tracin
gStartedInPage) { | 278 if (event.name === WebInspector.TimelineModel.DevToolsMetadataEvent.Tracin
gStartedInPage) { |
| 279 pageDevToolsMetadataEvents.push(event); | 279 pageDevToolsMetadataEvents.push(event); |
| 280 var frames = (event.args['data'] && event.args['data']['frames']) || []; | 280 var frames = ((event.args['data'] && event.args['data']['frames']) || []
); |
| 281 for (var frame of frames) { | 281 frames.forEach(payload => this._addPageFrame(event, payload)); |
| 282 var processId = event.thread.process().id(); | |
| 283 var frameId = `${processId}.${frame.frame}`; | |
| 284 var frameData = { | |
| 285 url: frame['url'] || '', | |
| 286 name: frame['name'] || '', | |
| 287 processId: processId, | |
| 288 frameId: frame['frame'] | |
| 289 }; | |
| 290 this._pageFrames.set(frameId, frameData); | |
| 291 } | |
| 292 } else if (event.name === WebInspector.TimelineModel.DevToolsMetadataEvent
.TracingSessionIdForWorker) { | 282 } else if (event.name === WebInspector.TimelineModel.DevToolsMetadataEvent
.TracingSessionIdForWorker) { |
| 293 workersDevToolsMetadataEvents.push(event); | 283 workersDevToolsMetadataEvents.push(event); |
| 294 } else if (event.name === WebInspector.TimelineModel.DevToolsMetadataEvent
.TracingStartedInBrowser) { | 284 } else if (event.name === WebInspector.TimelineModel.DevToolsMetadataEvent
.TracingStartedInBrowser) { |
| 295 console.assert(!this._mainFrameNodeId, 'Multiple sessions in trace'); | 285 console.assert(!this._mainFrameNodeId, 'Multiple sessions in trace'); |
| 296 this._mainFrameNodeId = event.args['frameTreeNodeId']; | 286 this._mainFrameNodeId = event.args['frameTreeNodeId']; |
| 297 } | 287 } |
| 298 } | 288 } |
| 299 if (!pageDevToolsMetadataEvents.length) { | 289 if (!pageDevToolsMetadataEvents.length) { |
| 300 // The trace is probably coming not from DevTools. Make a mock Metadata ev
ent. | 290 // The trace is probably coming not from DevTools. Make a mock Metadata ev
ent. |
| 301 var pageMetaEvent = produceTraceStartedInPage ? this._makeMockPageMetadata
Event(tracingModel) : null; | 291 var pageMetaEvent = produceTraceStartedInPage ? this._makeMockPageMetadata
Event(tracingModel) : null; |
| (...skipping 348 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 650 if (eventData['stackTrace']) | 640 if (eventData['stackTrace']) |
| 651 timelineData.stackTrace = eventData['stackTrace']; | 641 timelineData.stackTrace = eventData['stackTrace']; |
| 652 if (timelineData.stackTrace && event.name !== recordTypes.JSSample) { | 642 if (timelineData.stackTrace && event.name !== recordTypes.JSSample) { |
| 653 // TraceEvents come with 1-based line & column numbers. The frontend code | 643 // TraceEvents come with 1-based line & column numbers. The frontend code |
| 654 // requires 0-based ones. Adjust the values. | 644 // requires 0-based ones. Adjust the values. |
| 655 for (var i = 0; i < timelineData.stackTrace.length; ++i) { | 645 for (var i = 0; i < timelineData.stackTrace.length; ++i) { |
| 656 --timelineData.stackTrace[i].lineNumber; | 646 --timelineData.stackTrace[i].lineNumber; |
| 657 --timelineData.stackTrace[i].columnNumber; | 647 --timelineData.stackTrace[i].columnNumber; |
| 658 } | 648 } |
| 659 } | 649 } |
| 660 | 650 var pageFrameId = WebInspector.TimelineModel.eventFrameId(event); |
| 651 if (!pageFrameId && eventStack.length) |
| 652 pageFrameId = WebInspector.TimelineData.forEvent(eventStack.peekLast()).fr
ameId; |
| 653 timelineData.frameId = pageFrameId || WebInspector.TimelineData.mainFrameId; |
| 661 this._asyncEventTracker.processEvent(event); | 654 this._asyncEventTracker.processEvent(event); |
| 662 switch (event.name) { | 655 switch (event.name) { |
| 663 case recordTypes.ResourceSendRequest: | 656 case recordTypes.ResourceSendRequest: |
| 664 case recordTypes.WebSocketCreate: | 657 case recordTypes.WebSocketCreate: |
| 665 timelineData.setInitiator(eventStack.peekLast() || null); | 658 timelineData.setInitiator(eventStack.peekLast() || null); |
| 666 timelineData.url = eventData['url']; | 659 timelineData.url = eventData['url']; |
| 667 break; | 660 break; |
| 668 | 661 |
| 669 case recordTypes.ScheduleStyleRecalculation: | 662 case recordTypes.ScheduleStyleRecalculation: |
| 670 this._lastScheduleStyleRecalculation[eventData['frame']] = event; | 663 this._lastScheduleStyleRecalculation[eventData['frame']] = event; |
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 799 return false; | 792 return false; |
| 800 break; | 793 break; |
| 801 | 794 |
| 802 case recordTypes.CommitLoad: | 795 case recordTypes.CommitLoad: |
| 803 var frameId = WebInspector.TimelineModel.eventFrameId(event); | 796 var frameId = WebInspector.TimelineModel.eventFrameId(event); |
| 804 var pageFrame = this._pageFrames.get(frameId); | 797 var pageFrame = this._pageFrames.get(frameId); |
| 805 if (pageFrame) { | 798 if (pageFrame) { |
| 806 pageFrame.url = eventData.url || ''; | 799 pageFrame.url = eventData.url || ''; |
| 807 pageFrame.name = eventData.name || ''; | 800 pageFrame.name = eventData.name || ''; |
| 808 } else { | 801 } else { |
| 809 var processId = event.thread.process().id(); | 802 this._addPageFrame(event, eventData); |
| 810 this._pageFrames.set(frameId, {url: eventData.url || '', processId: pr
ocessId, frameId: eventData.frame, name: eventData.name || ''}); | |
| 811 } | 803 } |
| 812 var page = eventData['page']; | 804 var page = eventData['page']; |
| 813 if (page && page !== this._currentPage) | 805 if (page && page !== this._currentPage) |
| 814 return false; | 806 return false; |
| 815 if (!eventData['isMainFrame']) | 807 if (!eventData['isMainFrame']) |
| 816 break; | 808 break; |
| 817 this._hadCommitLoad = true; | 809 this._hadCommitLoad = true; |
| 818 this._firstCompositeLayers = null; | 810 this._firstCompositeLayers = null; |
| 819 break; | 811 break; |
| 820 | 812 |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 916 * @param {!Map<!WebInspector.TimelineModel.AsyncEventGroup, !Array<!WebInspec
tor.TracingModel.AsyncEvent>>} source | 908 * @param {!Map<!WebInspector.TimelineModel.AsyncEventGroup, !Array<!WebInspec
tor.TracingModel.AsyncEvent>>} source |
| 917 */ | 909 */ |
| 918 _mergeAsyncEvents(target, source) { | 910 _mergeAsyncEvents(target, source) { |
| 919 for (var group of source.keys()) { | 911 for (var group of source.keys()) { |
| 920 var events = target.get(group) || []; | 912 var events = target.get(group) || []; |
| 921 events = events.mergeOrdered(source.get(group) || [], WebInspector.Tracing
Model.Event.compareStartAndEndTime); | 913 events = events.mergeOrdered(source.get(group) || [], WebInspector.Tracing
Model.Event.compareStartAndEndTime); |
| 922 target.set(group, events); | 914 target.set(group, events); |
| 923 } | 915 } |
| 924 } | 916 } |
| 925 | 917 |
| 918 /** |
| 919 * @param {!WebInspector.TracingModel.Event} event |
| 920 * @param {!Object} payload |
| 921 */ |
| 922 _addPageFrame(event, payload) { |
| 923 var processId = event.thread.process().id(); |
| 924 var pageFrame = new WebInspector.TimelineModel.PageFrame(this.targetByEvent(
event), processId, payload); |
| 925 this._pageFrames.set(pageFrame.id, pageFrame); |
| 926 var parent = payload['parent'] && this._pageFrames.get(`${processId}.${paylo
ad['parent']}`); |
| 927 if (parent) |
| 928 parent.addChild(pageFrame); |
| 929 } |
| 930 |
| 926 reset() { | 931 reset() { |
| 927 this._virtualThreads = []; | 932 this._virtualThreads = []; |
| 928 /** @type {!Array<!WebInspector.TracingModel.Event>} */ | 933 /** @type {!Array<!WebInspector.TracingModel.Event>} */ |
| 929 this._mainThreadEvents = []; | 934 this._mainThreadEvents = []; |
| 930 /** @type {!Map<!WebInspector.TimelineModel.AsyncEventGroup, !Array<!WebInsp
ector.TracingModel.AsyncEvent>>} */ | 935 /** @type {!Map<!WebInspector.TimelineModel.AsyncEventGroup, !Array<!WebInsp
ector.TracingModel.AsyncEvent>>} */ |
| 931 this._mainThreadAsyncEventsByGroup = new Map(); | 936 this._mainThreadAsyncEventsByGroup = new Map(); |
| 932 /** @type {!Array<!WebInspector.TracingModel.Event>} */ | 937 /** @type {!Array<!WebInspector.TracingModel.Event>} */ |
| 933 this._inspectedTargetEvents = []; | 938 this._inspectedTargetEvents = []; |
| 934 /** @type {!Array<!WebInspector.TimelineModel.Record>} */ | 939 /** @type {!Array<!WebInspector.TimelineModel.Record>} */ |
| 935 this._records = []; | 940 this._records = []; |
| (...skipping 26 matching lines...) Expand all Loading... |
| 962 } | 967 } |
| 963 | 968 |
| 964 /** | 969 /** |
| 965 * @return {number} | 970 * @return {number} |
| 966 */ | 971 */ |
| 967 maximumRecordTime() { | 972 maximumRecordTime() { |
| 968 return this._maximumRecordTime; | 973 return this._maximumRecordTime; |
| 969 } | 974 } |
| 970 | 975 |
| 971 /** | 976 /** |
| 972 * @return {!Array.<!WebInspector.TracingModel.Event>} | 977 * @return {!Array<!WebInspector.TracingModel.Event>} |
| 973 */ | 978 */ |
| 974 inspectedTargetEvents() { | 979 inspectedTargetEvents() { |
| 975 return this._inspectedTargetEvents; | 980 return this._inspectedTargetEvents; |
| 976 } | 981 } |
| 977 | 982 |
| 978 /** | 983 /** |
| 979 * @return {!Array.<!WebInspector.TracingModel.Event>} | 984 * @return {!Array<!WebInspector.TracingModel.Event>} |
| 980 */ | 985 */ |
| 981 mainThreadEvents() { | 986 mainThreadEvents() { |
| 982 return this._mainThreadEvents; | 987 return this._mainThreadEvents; |
| 983 } | 988 } |
| 984 | 989 |
| 985 /** | 990 /** |
| 986 * @param {!Array.<!WebInspector.TracingModel.Event>} events | 991 * @param {!Array<!WebInspector.TracingModel.Event>} events |
| 987 */ | 992 */ |
| 988 _setMainThreadEvents(events) { | 993 _setMainThreadEvents(events) { |
| 989 this._mainThreadEvents = events; | 994 this._mainThreadEvents = events; |
| 990 } | 995 } |
| 991 | 996 |
| 992 /** | 997 /** |
| 993 * @return {!Map<!WebInspector.TimelineModel.AsyncEventGroup, !Array.<!WebInsp
ector.TracingModel.AsyncEvent>>} | 998 * @return {!Map<!WebInspector.TimelineModel.AsyncEventGroup, !Array.<!WebInsp
ector.TracingModel.AsyncEvent>>} |
| 994 */ | 999 */ |
| 995 mainThreadAsyncEvents() { | 1000 mainThreadAsyncEvents() { |
| 996 return this._mainThreadAsyncEventsByGroup; | 1001 return this._mainThreadAsyncEventsByGroup; |
| 997 } | 1002 } |
| 998 | 1003 |
| 999 /** | 1004 /** |
| 1000 * @return {!Array.<!WebInspector.TimelineModel.VirtualThread>} | 1005 * @return {!Array<!WebInspector.TimelineModel.VirtualThread>} |
| 1001 */ | 1006 */ |
| 1002 virtualThreads() { | 1007 virtualThreads() { |
| 1003 return this._virtualThreads; | 1008 return this._virtualThreads; |
| 1004 } | 1009 } |
| 1005 | 1010 |
| 1006 /** | 1011 /** |
| 1007 * @return {boolean} | 1012 * @return {boolean} |
| 1008 */ | 1013 */ |
| 1009 isEmpty() { | 1014 isEmpty() { |
| 1010 return this.minimumRecordTime() === 0 && this.maximumRecordTime() === 0; | 1015 return this.minimumRecordTime() === 0 && this.maximumRecordTime() === 0; |
| (...skipping 334 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1345 this._children.push(child); | 1350 this._children.push(child); |
| 1346 child.parent = this; | 1351 child.parent = this; |
| 1347 } | 1352 } |
| 1348 }; | 1353 }; |
| 1349 | 1354 |
| 1350 | 1355 |
| 1351 /** @typedef {!{page: !Array<!WebInspector.TracingModel.Event>, workers: !Array<
!WebInspector.TracingModel.Event>}} */ | 1356 /** @typedef {!{page: !Array<!WebInspector.TracingModel.Event>, workers: !Array<
!WebInspector.TracingModel.Event>}} */ |
| 1352 WebInspector.TimelineModel.MetadataEvents; | 1357 WebInspector.TimelineModel.MetadataEvents; |
| 1353 | 1358 |
| 1354 | 1359 |
| 1355 /** @typedef {!{url: string, processId: number, frameId: string, name: string}}
*/ | 1360 WebInspector.TimelineModel.PageFrame = class { |
| 1356 WebInspector.TimelineModel.PageFrame; | 1361 /** |
| 1362 * @param {?WebInspector.Target} target |
| 1363 * @param {number} pid |
| 1364 * @param {!Object} payload |
| 1365 */ |
| 1366 constructor(target, pid, payload) { |
| 1367 this.frameId = payload['frame']; |
| 1368 this.url = payload['url']; |
| 1369 this.name = payload['name']; |
| 1370 this.processId = pid; |
| 1371 this.children = []; |
| 1372 /** @type {?WebInspector.TimelineModel.PageFrame} */ |
| 1373 this.parent = null; |
| 1374 this.id = `${this.processId}.${this.frameId}`; |
| 1375 this.ownerNode = target && payload['nodeId'] ? new WebInspector.DeferredDOMN
ode(target, payload['nodeId']) : null; |
| 1376 } |
| 1377 |
| 1378 /** |
| 1379 * @param {!WebInspector.TimelineModel.PageFrame} child |
| 1380 */ |
| 1381 addChild(child) { |
| 1382 this.children.push(child); |
| 1383 child.parent = this; |
| 1384 } |
| 1385 }; |
| 1357 | 1386 |
| 1358 /** | 1387 /** |
| 1359 * @unrestricted | 1388 * @unrestricted |
| 1360 */ | 1389 */ |
| 1361 WebInspector.TimelineModel.NetworkRequest = class { | 1390 WebInspector.TimelineModel.NetworkRequest = class { |
| 1362 /** | 1391 /** |
| 1363 * @param {!WebInspector.TracingModel.Event} event | 1392 * @param {!WebInspector.TracingModel.Event} event |
| 1364 */ | 1393 */ |
| 1365 constructor(event) { | 1394 constructor(event) { |
| 1366 this.startTime = event.name === WebInspector.TimelineModel.RecordType.Resour
ceSendRequest ? event.startTime : 0; | 1395 this.startTime = event.name === WebInspector.TimelineModel.RecordType.Resour
ceSendRequest ? event.startTime : 0; |
| (...skipping 496 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1863 /** @type {?string} */ | 1892 /** @type {?string} */ |
| 1864 this.url = null; | 1893 this.url = null; |
| 1865 /** @type {number} */ | 1894 /** @type {number} */ |
| 1866 this.backendNodeId = 0; | 1895 this.backendNodeId = 0; |
| 1867 /** @type {?Array<!Protocol.Runtime.CallFrame>} */ | 1896 /** @type {?Array<!Protocol.Runtime.CallFrame>} */ |
| 1868 this.stackTrace = null; | 1897 this.stackTrace = null; |
| 1869 /** @type {?WebInspector.TracingModel.ObjectSnapshot} */ | 1898 /** @type {?WebInspector.TracingModel.ObjectSnapshot} */ |
| 1870 this.picture = null; | 1899 this.picture = null; |
| 1871 /** @type {?WebInspector.TracingModel.Event} */ | 1900 /** @type {?WebInspector.TracingModel.Event} */ |
| 1872 this._initiator = null; | 1901 this._initiator = null; |
| 1902 this.frameId = ''; |
| 1873 /** @type {number|undefined} */ | 1903 /** @type {number|undefined} */ |
| 1874 this.timeWaitingForMainThread; | 1904 this.timeWaitingForMainThread; |
| 1875 } | 1905 } |
| 1876 | 1906 |
| 1877 /** | 1907 /** |
| 1878 * @param {!WebInspector.TracingModel.Event} initiator | 1908 * @param {!WebInspector.TracingModel.Event} initiator |
| 1879 */ | 1909 */ |
| 1880 setInitiator(initiator) { | 1910 setInitiator(initiator) { |
| 1881 this._initiator = initiator; | 1911 this._initiator = initiator; |
| 1882 if (!initiator || this.url) | 1912 if (!initiator || this.url) |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1915 static forEvent(event) { | 1945 static forEvent(event) { |
| 1916 var data = event[WebInspector.TimelineData._symbol]; | 1946 var data = event[WebInspector.TimelineData._symbol]; |
| 1917 if (!data) { | 1947 if (!data) { |
| 1918 data = new WebInspector.TimelineData(); | 1948 data = new WebInspector.TimelineData(); |
| 1919 event[WebInspector.TimelineData._symbol] = data; | 1949 event[WebInspector.TimelineData._symbol] = data; |
| 1920 } | 1950 } |
| 1921 return data; | 1951 return data; |
| 1922 } | 1952 } |
| 1923 }; | 1953 }; |
| 1924 | 1954 |
| 1955 WebInspector.TimelineData.mainFrameId = ''; |
| 1925 WebInspector.TimelineData._symbol = Symbol('timelineData'); | 1956 WebInspector.TimelineData._symbol = Symbol('timelineData'); |
| OLD | NEW |