Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(410)

Side by Side Diff: third_party/WebKit/Source/devtools/front_end/timeline_model/TimelineModel.js

Issue 2486923005: Timeline: add moar attributes in frame instrumentation (Closed)
Patch Set: rebased Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
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
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
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
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');
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698