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

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

Issue 2473283003: DevTools: add per-frame grouping into aggregated timeline details (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 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 return true; 111 return true;
112 case recordTypes.MarkDOMContent: 112 case recordTypes.MarkDOMContent:
113 case recordTypes.MarkLoad: 113 case recordTypes.MarkLoad:
114 return event.args['data']['isMainFrame']; 114 return event.args['data']['isMainFrame'];
115 default: 115 default:
116 return false; 116 return false;
117 } 117 }
118 } 118 }
119 119
120 /** 120 /**
121 * @param {!WebInspector.TracingModel.Event} event
122 * @return {string}
123 */
124 static eventFrameId(event) {
125 var data = event.args['data'] || event.args['beginData'];
126 var frame = data && data['frame'];
127 if (!frame)
128 return '';
129 var processId = event.thread.process().id();
130 return `${processId}.${frame}`;
131 }
132
133 /**
121 * @deprecated Test use only! 134 * @deprecated Test use only!
122 * @param {?function(!WebInspector.TimelineModel.Record)|?function(!WebInspect or.TimelineModel.Record,number)} preOrderCallback 135 * @param {?function(!WebInspector.TimelineModel.Record)|?function(!WebInspect or.TimelineModel.Record,number)} preOrderCallback
123 * @param {function(!WebInspector.TimelineModel.Record)|function(!WebInspector .TimelineModel.Record,number)=} postOrderCallback 136 * @param {function(!WebInspector.TimelineModel.Record)|function(!WebInspector .TimelineModel.Record,number)=} postOrderCallback
124 * @return {boolean} 137 * @return {boolean}
125 */ 138 */
126 forAllRecords(preOrderCallback, postOrderCallback) { 139 forAllRecords(preOrderCallback, postOrderCallback) {
127 /** 140 /**
128 * @param {!Array.<!WebInspector.TimelineModel.Record>} records 141 * @param {!Array.<!WebInspector.TimelineModel.Record>} records
129 * @param {number} depth 142 * @param {number} depth
130 * @return {boolean} 143 * @return {boolean}
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
257 * @return {!WebInspector.TimelineModel.MetadataEvents} 270 * @return {!WebInspector.TimelineModel.MetadataEvents}
258 */ 271 */
259 _processMetadataEvents(tracingModel, produceTraceStartedInPage) { 272 _processMetadataEvents(tracingModel, produceTraceStartedInPage) {
260 var metadataEvents = tracingModel.devToolsMetadataEvents(); 273 var metadataEvents = tracingModel.devToolsMetadataEvents();
261 274
262 var pageDevToolsMetadataEvents = []; 275 var pageDevToolsMetadataEvents = [];
263 var workersDevToolsMetadataEvents = []; 276 var workersDevToolsMetadataEvents = [];
264 for (var event of metadataEvents) { 277 for (var event of metadataEvents) {
265 if (event.name === WebInspector.TimelineModel.DevToolsMetadataEvent.Tracin gStartedInPage) { 278 if (event.name === WebInspector.TimelineModel.DevToolsMetadataEvent.Tracin gStartedInPage) {
266 pageDevToolsMetadataEvents.push(event); 279 pageDevToolsMetadataEvents.push(event);
280 var frames = (event.args['data'] && event.args['data']['frames']) || [];
281 for (var frame of frames) {
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 }
267 } else if (event.name === WebInspector.TimelineModel.DevToolsMetadataEvent .TracingSessionIdForWorker) { 292 } else if (event.name === WebInspector.TimelineModel.DevToolsMetadataEvent .TracingSessionIdForWorker) {
268 workersDevToolsMetadataEvents.push(event); 293 workersDevToolsMetadataEvents.push(event);
269 } else if (event.name === WebInspector.TimelineModel.DevToolsMetadataEvent .TracingStartedInBrowser) { 294 } else if (event.name === WebInspector.TimelineModel.DevToolsMetadataEvent .TracingStartedInBrowser) {
270 console.assert(!this._mainFrameNodeId, 'Multiple sessions in trace'); 295 console.assert(!this._mainFrameNodeId, 'Multiple sessions in trace');
271 this._mainFrameNodeId = event.args['frameTreeNodeId']; 296 this._mainFrameNodeId = event.args['frameTreeNodeId'];
272 } 297 }
273 } 298 }
274 if (!pageDevToolsMetadataEvents.length) { 299 if (!pageDevToolsMetadataEvents.length) {
275 // The trace is probably coming not from DevTools. Make a mock Metadata ev ent. 300 // The trace is probably coming not from DevTools. Make a mock Metadata ev ent.
276 var pageMetaEvent = produceTraceStartedInPage ? this._makeMockPageMetadata Event(tracingModel) : null; 301 var pageMetaEvent = produceTraceStartedInPage ? this._makeMockPageMetadata Event(tracingModel) : null;
(...skipping 495 matching lines...) Expand 10 before | Expand all | Expand 10 after
772 break; 797 break;
773 798
774 case recordTypes.MarkDOMContent: 799 case recordTypes.MarkDOMContent:
775 case recordTypes.MarkLoad: 800 case recordTypes.MarkLoad:
776 var page = eventData['page']; 801 var page = eventData['page'];
777 if (page && page !== this._currentPage) 802 if (page && page !== this._currentPage)
778 return false; 803 return false;
779 break; 804 break;
780 805
781 case recordTypes.CommitLoad: 806 case recordTypes.CommitLoad:
807 var frameId = WebInspector.TimelineModel.eventFrameId(event);
808 var pageFrame = this._pageFrames.get(frameId);
809 if (pageFrame) {
810 pageFrame.url = eventData.url || '';
811 pageFrame.name = eventData.name || '';
812 } else {
813 var processId = event.thread.process().id();
814 this._pageFrames.set(frameId, {url: eventData.url || '', processId: pr ocessId, frameId: eventData.frame, name: eventData.name || ''});
815 }
782 var page = eventData['page']; 816 var page = eventData['page'];
783 if (page && page !== this._currentPage) 817 if (page && page !== this._currentPage)
784 return false; 818 return false;
785 if (!eventData['isMainFrame']) 819 if (!eventData['isMainFrame'])
786 break; 820 break;
787 this._hadCommitLoad = true; 821 this._hadCommitLoad = true;
788 this._firstCompositeLayers = null; 822 this._firstCompositeLayers = null;
789 break; 823 break;
790 824
791 case recordTypes.CompositeLayers: 825 case recordTypes.CompositeLayers:
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
910 /** @type {!Array<!WebInspector.TimelineModel.Record>} */ 944 /** @type {!Array<!WebInspector.TimelineModel.Record>} */
911 this._eventDividerRecords = []; 945 this._eventDividerRecords = [];
912 /** @type {?string} */ 946 /** @type {?string} */
913 this._sessionId = null; 947 this._sessionId = null;
914 /** @type {?number} */ 948 /** @type {?number} */
915 this._mainFrameNodeId = null; 949 this._mainFrameNodeId = null;
916 /** @type {!Array<!WebInspector.CPUProfileDataModel>} */ 950 /** @type {!Array<!WebInspector.CPUProfileDataModel>} */
917 this._cpuProfiles = []; 951 this._cpuProfiles = [];
918 /** @type {!WeakMap<!WebInspector.TracingModel.Thread, string>} */ 952 /** @type {!WeakMap<!WebInspector.TracingModel.Thread, string>} */
919 this._workerIdByThread = new WeakMap(); 953 this._workerIdByThread = new WeakMap();
954 /** @type {!Map<string, !WebInspector.TimelineModel.PageFrame>} */
955 this._pageFrames = new Map();
956
920 this._minimumRecordTime = 0; 957 this._minimumRecordTime = 0;
921 this._maximumRecordTime = 0; 958 this._maximumRecordTime = 0;
922 } 959 }
923 960
924 /** 961 /**
925 * @return {number} 962 * @return {number}
926 */ 963 */
927 minimumRecordTime() { 964 minimumRecordTime() {
928 return this._minimumRecordTime; 965 return this._minimumRecordTime;
929 } 966 }
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
992 } 1029 }
993 1030
994 /** 1031 /**
995 * @return {!Array.<!WebInspector.TimelineModel.Record>} 1032 * @return {!Array.<!WebInspector.TimelineModel.Record>}
996 */ 1033 */
997 eventDividerRecords() { 1034 eventDividerRecords() {
998 return this._eventDividerRecords; 1035 return this._eventDividerRecords;
999 } 1036 }
1000 1037
1001 /** 1038 /**
1039 * @param {string} frameId
1040 * @return {?WebInspector.TimelineModel.PageFrame}
1041 */
1042 pageFrameById(frameId) {
1043 return frameId ? this._pageFrames.get(frameId) || null : null;
1044 }
1045
1046 /**
1002 * @return {!Array<!WebInspector.TimelineModel.NetworkRequest>} 1047 * @return {!Array<!WebInspector.TimelineModel.NetworkRequest>}
1003 */ 1048 */
1004 networkRequests() { 1049 networkRequests() {
1005 /** @type {!Map<string,!WebInspector.TimelineModel.NetworkRequest>} */ 1050 /** @type {!Map<string,!WebInspector.TimelineModel.NetworkRequest>} */
1006 var requests = new Map(); 1051 var requests = new Map();
1007 /** @type {!Array<!WebInspector.TimelineModel.NetworkRequest>} */ 1052 /** @type {!Array<!WebInspector.TimelineModel.NetworkRequest>} */
1008 var requestsList = []; 1053 var requestsList = [];
1009 /** @type {!Array<!WebInspector.TimelineModel.NetworkRequest>} */ 1054 /** @type {!Array<!WebInspector.TimelineModel.NetworkRequest>} */
1010 var zeroStartRequestsList = []; 1055 var zeroStartRequestsList = [];
1011 var types = WebInspector.TimelineModel.RecordType; 1056 var types = WebInspector.TimelineModel.RecordType;
(...skipping 312 matching lines...) Expand 10 before | Expand all | Expand 10 after
1324 this._children.push(child); 1369 this._children.push(child);
1325 child.parent = this; 1370 child.parent = this;
1326 } 1371 }
1327 }; 1372 };
1328 1373
1329 1374
1330 /** @typedef {!{page: !Array<!WebInspector.TracingModel.Event>, workers: !Array< !WebInspector.TracingModel.Event>}} */ 1375 /** @typedef {!{page: !Array<!WebInspector.TracingModel.Event>, workers: !Array< !WebInspector.TracingModel.Event>}} */
1331 WebInspector.TimelineModel.MetadataEvents; 1376 WebInspector.TimelineModel.MetadataEvents;
1332 1377
1333 1378
1379 /** @typedef {!{url: string, processId: number, frameId: string, name: string}} */
1380 WebInspector.TimelineModel.PageFrame;
1381
1334 /** 1382 /**
1335 * @unrestricted 1383 * @unrestricted
1336 */ 1384 */
1337 WebInspector.TimelineModel.NetworkRequest = class { 1385 WebInspector.TimelineModel.NetworkRequest = class {
1338 /** 1386 /**
1339 * @param {!WebInspector.TracingModel.Event} event 1387 * @param {!WebInspector.TracingModel.Event} event
1340 */ 1388 */
1341 constructor(event) { 1389 constructor(event) {
1342 this.startTime = event.name === WebInspector.TimelineModel.RecordType.Resour ceSendRequest ? event.startTime : 0; 1390 this.startTime = event.name === WebInspector.TimelineModel.RecordType.Resour ceSendRequest ? event.startTime : 0;
1343 this.endTime = Infinity; 1391 this.endTime = Infinity;
(...skipping 455 matching lines...) Expand 10 before | Expand all | Expand 10 after
1799 if (!id) 1847 if (!id)
1800 return; 1848 return;
1801 /** @type {!Map<string, !WebInspector.TracingModel.Event>|undefined} */ 1849 /** @type {!Map<string, !WebInspector.TracingModel.Event>|undefined} */
1802 var initiatorMap = this._initiatorByType.get(initiatorType); 1850 var initiatorMap = this._initiatorByType.get(initiatorType);
1803 if (isInitiator) 1851 if (isInitiator)
1804 initiatorMap.set(id, event); 1852 initiatorMap.set(id, event);
1805 else 1853 else
1806 event.initiator = initiatorMap.get(id) || null; 1854 event.initiator = initiatorMap.get(id) || null;
1807 } 1855 }
1808 }; 1856 };
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698