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 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
157 WebInspector.TimelineModel.Events = { | 157 WebInspector.TimelineModel.Events = { |
158 RecordsCleared: "RecordsCleared", | 158 RecordsCleared: "RecordsCleared", |
159 RecordingStarted: "RecordingStarted", | 159 RecordingStarted: "RecordingStarted", |
160 RecordingStopped: "RecordingStopped", | 160 RecordingStopped: "RecordingStopped", |
161 RecordFilterChanged: "RecordFilterChanged", | 161 RecordFilterChanged: "RecordFilterChanged", |
162 BufferUsage: "BufferUsage", | 162 BufferUsage: "BufferUsage", |
163 RetrieveEventsProgress: "RetrieveEventsProgress" | 163 RetrieveEventsProgress: "RetrieveEventsProgress" |
164 } | 164 } |
165 | 165 |
166 WebInspector.TimelineModel.MainThreadName = "main"; | 166 WebInspector.TimelineModel.MainThreadName = "main"; |
167 | |
168 WebInspector.TimelineModel.WorkerThreadName = "DedicatedWorker Thread"; | 167 WebInspector.TimelineModel.WorkerThreadName = "DedicatedWorker Thread"; |
| 168 WebInspector.TimelineModel.RendererMainThreadName = "CrRendererMain"; |
169 | 169 |
170 /** | 170 /** |
171 * @param {!Array.<!WebInspector.TracingModel.Event>} events | 171 * @param {!Array.<!WebInspector.TracingModel.Event>} events |
172 * @param {function(!WebInspector.TracingModel.Event)} onStartEvent | 172 * @param {function(!WebInspector.TracingModel.Event)} onStartEvent |
173 * @param {function(!WebInspector.TracingModel.Event)} onEndEvent | 173 * @param {function(!WebInspector.TracingModel.Event)} onEndEvent |
174 * @param {function(!WebInspector.TracingModel.Event,?WebInspector.TracingModel.
Event)=} onInstantEvent | 174 * @param {function(!WebInspector.TracingModel.Event,?WebInspector.TracingModel.
Event)=} onInstantEvent |
175 */ | 175 */ |
176 WebInspector.TimelineModel.forEachEvent = function(events, onStartEvent, onEndEv
ent, onInstantEvent) | 176 WebInspector.TimelineModel.forEachEvent = function(events, onStartEvent, onEndEv
ent, onInstantEvent) |
177 { | 177 { |
178 var stack = []; | 178 var stack = []; |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
217 if (postOrderCallback && postOrderCallback(record, depth)) | 217 if (postOrderCallback && postOrderCallback(record, depth)) |
218 return true; | 218 return true; |
219 } | 219 } |
220 return false; | 220 return false; |
221 } | 221 } |
222 return processRecords(recordsArray, 0); | 222 return processRecords(recordsArray, 0); |
223 } | 223 } |
224 | 224 |
225 WebInspector.TimelineModel.TransferChunkLengthBytes = 5000000; | 225 WebInspector.TimelineModel.TransferChunkLengthBytes = 5000000; |
226 | 226 |
| 227 WebInspector.TimelineModel.DevToolsMetadataEvent = { |
| 228 TracingStartedInPage: "TracingStartedInPage", |
| 229 TracingSessionIdForWorker: "TracingSessionIdForWorker", |
| 230 }; |
| 231 |
227 /** | 232 /** |
228 * @constructor | 233 * @constructor |
229 * @param {string} name | 234 * @param {string} name |
230 */ | 235 */ |
231 WebInspector.TimelineModel.VirtualThread = function(name) | 236 WebInspector.TimelineModel.VirtualThread = function(name) |
232 { | 237 { |
233 this.name = name; | 238 this.name = name; |
234 /** @type {!Array<!WebInspector.TracingModel.Event>} */ | 239 /** @type {!Array<!WebInspector.TracingModel.Event>} */ |
235 this.events = []; | 240 this.events = []; |
236 /** @type {!Map<!WebInspector.AsyncEventGroup, !Array<!WebInspector.TracingM
odel.AsyncEvent>>} */ | 241 /** @type {!Map<!WebInspector.AsyncEventGroup, !Array<!WebInspector.TracingM
odel.AsyncEvent>>} */ |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
288 { | 293 { |
289 var initiator = this._event.initiator; | 294 var initiator = this._event.initiator; |
290 return initiator ? initiator._timelineRecord : null; | 295 return initiator ? initiator._timelineRecord : null; |
291 }, | 296 }, |
292 | 297 |
293 /** | 298 /** |
294 * @return {?WebInspector.Target} | 299 * @return {?WebInspector.Target} |
295 */ | 300 */ |
296 target: function() | 301 target: function() |
297 { | 302 { |
298 return this._event.thread.target(); | 303 var threadName = this._event.thread.name(); |
| 304 //FIXME: correctly specify target |
| 305 return threadName === WebInspector.TimelineModel.RendererMainThreadName
? WebInspector.targetManager.targets()[0] || null : null; |
299 }, | 306 }, |
300 | 307 |
301 /** | 308 /** |
302 * @return {number} | 309 * @return {number} |
303 */ | 310 */ |
304 selfTime: function() | 311 selfTime: function() |
305 { | 312 { |
306 return this._event.selfTime; | 313 return this._event.selfTime; |
307 }, | 314 }, |
308 | 315 |
(...skipping 11 matching lines...) Expand all Loading... |
320 startTime: function() | 327 startTime: function() |
321 { | 328 { |
322 return this._event.startTime; | 329 return this._event.startTime; |
323 }, | 330 }, |
324 | 331 |
325 /** | 332 /** |
326 * @return {string} | 333 * @return {string} |
327 */ | 334 */ |
328 thread: function() | 335 thread: function() |
329 { | 336 { |
330 if (this._event.thread.name() === "CrRendererMain") | 337 if (this._event.thread.name() === WebInspector.TimelineModel.RendererMai
nThreadName) |
331 return WebInspector.TimelineModel.MainThreadName; | 338 return WebInspector.TimelineModel.MainThreadName; |
332 return this._event.thread.name(); | 339 return this._event.thread.name(); |
333 }, | 340 }, |
334 | 341 |
335 /** | 342 /** |
336 * @return {number} | 343 * @return {number} |
337 */ | 344 */ |
338 endTime: function() | 345 endTime: function() |
339 { | 346 { |
340 return this._endTime || this._event.endTime || this._event.startTime; | 347 return this._endTime || this._event.endTime || this._event.startTime; |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
441 | 448 |
442 /** | 449 /** |
443 * @return {!WebInspector.TimelineModel} | 450 * @return {!WebInspector.TimelineModel} |
444 */ | 451 */ |
445 timelineModel: function() | 452 timelineModel: function() |
446 { | 453 { |
447 return this._model; | 454 return this._model; |
448 } | 455 } |
449 } | 456 } |
450 | 457 |
| 458 /** @typedef {!{page: !Array<!WebInspector.TracingModel.Event>, workers: !Array<
!WebInspector.TracingModel.Event>}} */ |
| 459 WebInspector.TimelineModel.MetadataEvents; |
| 460 |
451 WebInspector.TimelineModel.prototype = { | 461 WebInspector.TimelineModel.prototype = { |
452 /** | 462 /** |
453 * @param {boolean} captureCauses | 463 * @param {boolean} captureCauses |
454 * @param {boolean} enableJSSampling | 464 * @param {boolean} enableJSSampling |
455 * @param {boolean} captureMemory | 465 * @param {boolean} captureMemory |
456 * @param {boolean} capturePictures | 466 * @param {boolean} capturePictures |
457 * @param {boolean} captureFilmStrip | 467 * @param {boolean} captureFilmStrip |
458 */ | 468 */ |
459 startRecording: function(captureCauses, enableJSSampling, captureMemory, cap
turePictures, captureFilmStrip) | 469 startRecording: function(captureCauses, enableJSSampling, captureMemory, cap
turePictures, captureFilmStrip) |
460 { | 470 { |
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
571 | 581 |
572 /** | 582 /** |
573 * @return {!Array.<!WebInspector.TimelineModel.Record>} | 583 * @return {!Array.<!WebInspector.TimelineModel.Record>} |
574 */ | 584 */ |
575 records: function() | 585 records: function() |
576 { | 586 { |
577 return this._records; | 587 return this._records; |
578 }, | 588 }, |
579 | 589 |
580 /** | 590 /** |
| 591 * @return {?string} |
| 592 */ |
| 593 sessionId: function() |
| 594 { |
| 595 return this._sessionId; |
| 596 }, |
| 597 |
| 598 /** |
581 * @return {?WebInspector.Target} | 599 * @return {?WebInspector.Target} |
582 */ | 600 */ |
583 target: function() | 601 target: function() |
584 { | 602 { |
585 // FIXME: Consider returning null for loaded traces. | 603 // FIXME: Consider returning null for loaded traces. |
586 return this._targets[0]; | 604 return this._targets[0]; |
587 }, | 605 }, |
588 | 606 |
589 /** | 607 /** |
590 * @param {!Array.<!WebInspector.TracingManager.EventPayload>} events | 608 * @param {!Array.<!WebInspector.TracingManager.EventPayload>} events |
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
750 { | 768 { |
751 if (!cpuProfile) | 769 if (!cpuProfile) |
752 return; | 770 return; |
753 if (!this._cpuProfiles) | 771 if (!this._cpuProfiles) |
754 this._cpuProfiles = new Map(); | 772 this._cpuProfiles = new Map(); |
755 this._cpuProfiles.set(targetId, cpuProfile); | 773 this._cpuProfiles.set(targetId, cpuProfile); |
756 }, | 774 }, |
757 | 775 |
758 _didStopRecordingTraceEvents: function() | 776 _didStopRecordingTraceEvents: function() |
759 { | 777 { |
760 this._injectCpuProfileEvents(); | 778 var metadataEvents = this._processMetadataEvents(); |
| 779 this._injectCpuProfileEvents(metadataEvents); |
761 this._tracingModel.tracingComplete(); | 780 this._tracingModel.tracingComplete(); |
762 | 781 |
763 var metaEvents = this._tracingModel.devtoolsPageMetadataEvents(); | |
764 var workerMetadataEvents = this._tracingModel.devtoolsWorkerMetadataEven
ts(); | |
765 | |
766 this._resetProcessingState(); | 782 this._resetProcessingState(); |
767 var startTime = 0; | 783 var startTime = 0; |
768 for (var i = 0, length = metaEvents.length; i < length; i++) { | 784 for (var i = 0, length = metadataEvents.page.length; i < length; i++) { |
769 var metaEvent = metaEvents[i]; | 785 var metaEvent = metadataEvents.page[i]; |
770 var process = metaEvent.thread.process(); | 786 var process = metaEvent.thread.process(); |
771 var endTime = i + 1 < length ? metaEvents[i + 1].startTime : Infinit
y; | 787 var endTime = i + 1 < length ? metadataEvents.page[i + 1].startTime
: Infinity; |
772 this._currentPage = metaEvent.args["data"] && metaEvent.args["data"]
["page"]; | 788 this._currentPage = metaEvent.args["data"] && metaEvent.args["data"]
["page"]; |
773 for (var thread of process.sortedThreads()) { | 789 for (var thread of process.sortedThreads()) { |
774 if (thread.name() === WebInspector.TimelineModel.WorkerThreadNam
e && !workerMetadataEvents.some(function(e) { return e.args["data"]["workerThrea
dId"] === thread.id(); })) | 790 if (thread.name() === WebInspector.TimelineModel.WorkerThreadNam
e && !metadataEvents.workers.some(function(e) { return e.args["data"]["workerThr
eadId"] === thread.id(); })) |
775 continue; | 791 continue; |
776 this._processThreadEvents(startTime, endTime, metaEvent.thread,
thread); | 792 this._processThreadEvents(startTime, endTime, metaEvent.thread,
thread); |
777 } | 793 } |
778 startTime = endTime; | 794 startTime = endTime; |
779 } | 795 } |
780 this._inspectedTargetEvents.sort(WebInspector.TracingModel.Event.compare
StartTime); | 796 this._inspectedTargetEvents.sort(WebInspector.TracingModel.Event.compare
StartTime); |
781 | 797 |
782 this._cpuProfiles = null; | 798 this._cpuProfiles = null; |
783 this._buildTimelineRecords(); | 799 this._buildTimelineRecords(); |
784 this._buildGPUTasks(); | 800 this._buildGPUTasks(); |
785 this._insertFirstPaintEvent(); | 801 this._insertFirstPaintEvent(); |
786 this._resetProcessingState(); | 802 this._resetProcessingState(); |
787 | 803 |
788 this.dispatchEventToListeners(WebInspector.TimelineModel.Events.Recordin
gStopped); | 804 this.dispatchEventToListeners(WebInspector.TimelineModel.Events.Recordin
gStopped); |
789 }, | 805 }, |
790 | 806 |
791 /** | 807 /** |
| 808 * @return {!WebInspector.TimelineModel.MetadataEvents} |
| 809 */ |
| 810 _processMetadataEvents: function() |
| 811 { |
| 812 var metadataEvents = this._tracingModel.devToolsMetadataEvents(); |
| 813 |
| 814 var pageDevToolsMetadataEvents = []; |
| 815 var workersDevToolsMetadataEvents = []; |
| 816 for (var event of metadataEvents) { |
| 817 if (event.name === WebInspector.TimelineModel.DevToolsMetadataEvent.
TracingStartedInPage) |
| 818 pageDevToolsMetadataEvents.push(event); |
| 819 else if (event.name === WebInspector.TimelineModel.DevToolsMetadataE
vent.TracingSessionIdForWorker) |
| 820 workersDevToolsMetadataEvents.push(event); |
| 821 } |
| 822 if (!pageDevToolsMetadataEvents.length) { |
| 823 // The trace is probably coming not from DevTools. Make a mock Metad
ata event. |
| 824 var pageMetaEvent = this._loadedFromFile ? this._makeMockPageMetadat
aEvent() : null; |
| 825 if (!pageMetaEvent) { |
| 826 console.error(WebInspector.TimelineModel.DevToolsMetadataEvent.T
racingStartedInPage + " event not found."); |
| 827 return {page: [], workers: []}; |
| 828 } |
| 829 pageDevToolsMetadataEvents.push(pageMetaEvent); |
| 830 } |
| 831 var sessionId = pageDevToolsMetadataEvents[0].args["sessionId"] || pageD
evToolsMetadataEvents[0].args["data"]["sessionId"]; |
| 832 this._sessionId = sessionId; |
| 833 |
| 834 var mismatchingIds = new Set(); |
| 835 /** |
| 836 * @param {!WebInspector.TracingModel.Event} event |
| 837 * @return {boolean} |
| 838 */ |
| 839 function checkSessionId(event) |
| 840 { |
| 841 var args = event.args; |
| 842 // FIXME: put sessionId into args["data"] for TracingStartedInPage e
vent. |
| 843 if (args["data"]) |
| 844 args = args["data"]; |
| 845 var id = args["sessionId"]; |
| 846 if (id === sessionId) |
| 847 return true; |
| 848 mismatchingIds.add(id); |
| 849 return false; |
| 850 } |
| 851 var result = { |
| 852 page: pageDevToolsMetadataEvents.filter(checkSessionId).sort(WebInsp
ector.TracingModel.Event.compareStartTime), |
| 853 workers: workersDevToolsMetadataEvents.filter(checkSessionId).sort(W
ebInspector.TracingModel.Event.compareStartTime) |
| 854 }; |
| 855 if (mismatchingIds.size) |
| 856 WebInspector.console.error("Timeline recording was started in more t
han one page simultaneously. Session id mismatch: " + this._sessionId + " and "
+ mismatchingIds.valuesArray() + "."); |
| 857 return result; |
| 858 }, |
| 859 |
| 860 /** |
| 861 * @return {?WebInspector.TracingModel.Event} |
| 862 */ |
| 863 _makeMockPageMetadataEvent: function() |
| 864 { |
| 865 var rendererMainThreadName = WebInspector.TimelineModel.RendererMainThre
adName; |
| 866 // FIXME: pick up the first renderer process for now. |
| 867 var process = Object.values(this._tracingModel.sortedProcesses()).filter
(function(p) { return p.threadByName(rendererMainThreadName); })[0]; |
| 868 var thread = process && process.threadByName(rendererMainThreadName); |
| 869 if (!thread) |
| 870 return null; |
| 871 var pageMetaEvent = new WebInspector.TracingModel.Event( |
| 872 WebInspector.TracingModel.DevToolsMetadataEventCategory, |
| 873 WebInspector.TimelineModel.DevToolsMetadataEvent.TracingStartedInPag
e, |
| 874 WebInspector.TracingModel.Phase.Metadata, |
| 875 this._tracingModel.minimumRecordTime(), thread); |
| 876 pageMetaEvent.addArgs({"data": {"sessionId": "mockSessionId"}}); |
| 877 return pageMetaEvent; |
| 878 }, |
| 879 |
| 880 /** |
792 * @param {number} pid | 881 * @param {number} pid |
793 * @param {number} tid | 882 * @param {number} tid |
794 * @param {?ProfilerAgent.CPUProfile} cpuProfile | 883 * @param {?ProfilerAgent.CPUProfile} cpuProfile |
795 */ | 884 */ |
796 _injectCpuProfileEvent: function(pid, tid, cpuProfile) | 885 _injectCpuProfileEvent: function(pid, tid, cpuProfile) |
797 { | 886 { |
798 if (!cpuProfile) | 887 if (!cpuProfile) |
799 return; | 888 return; |
800 var cpuProfileEvent = /** @type {!WebInspector.TracingManager.EventPaylo
ad} */ ({ | 889 var cpuProfileEvent = /** @type {!WebInspector.TracingManager.EventPaylo
ad} */ ({ |
801 cat: WebInspector.TracingModel.DevToolsMetadataEventCategory, | 890 cat: WebInspector.TracingModel.DevToolsMetadataEventCategory, |
802 ph: WebInspector.TracingModel.Phase.Instant, | 891 ph: WebInspector.TracingModel.Phase.Instant, |
803 ts: this._tracingModel.maximumRecordTime() * 1000, | 892 ts: this._tracingModel.maximumRecordTime() * 1000, |
804 pid: pid, | 893 pid: pid, |
805 tid: tid, | 894 tid: tid, |
806 name: WebInspector.TimelineModel.RecordType.CpuProfile, | 895 name: WebInspector.TimelineModel.RecordType.CpuProfile, |
807 args: { data: { cpuProfile: cpuProfile } } | 896 args: { data: { cpuProfile: cpuProfile } } |
808 }); | 897 }); |
809 this._tracingModel.addEvents([cpuProfileEvent]); | 898 this._tracingModel.addEvents([cpuProfileEvent]); |
810 }, | 899 }, |
811 | 900 |
812 _injectCpuProfileEvents: function() | 901 /** |
| 902 * @param {!WebInspector.TimelineModel.MetadataEvents} metadataEvents |
| 903 */ |
| 904 _injectCpuProfileEvents: function(metadataEvents) |
813 { | 905 { |
814 if (!this._cpuProfiles) | 906 if (!this._cpuProfiles) |
815 return; | 907 return; |
816 var mainMetaEvent = this._tracingModel.devtoolsPageMetadataEvents().peek
Last(); | 908 var mainMetaEvent = metadataEvents.page.peekLast(); |
817 if (!mainMetaEvent) | 909 if (!mainMetaEvent) |
818 return; | 910 return; |
819 var pid = mainMetaEvent.thread.process().id(); | 911 var pid = mainMetaEvent.thread.process().id(); |
820 var mainTarget = this._targets[0]; | 912 var mainTarget = this._targets[0]; |
821 var mainCpuProfile = this._cpuProfiles.get(mainTarget.id()); | 913 var mainCpuProfile = this._cpuProfiles.get(mainTarget.id()); |
822 this._injectCpuProfileEvent(pid, mainMetaEvent.thread.id(), mainCpuProfi
le); | 914 this._injectCpuProfileEvent(pid, mainMetaEvent.thread.id(), mainCpuProfi
le); |
823 var workerMetadataEvents = this._tracingModel.devtoolsWorkerMetadataEven
ts(); | 915 for (var metaEvent of metadataEvents.workers) { |
824 for (var metaEvent of workerMetadataEvents) { | |
825 var workerId = metaEvent.args["data"]["workerId"]; | 916 var workerId = metaEvent.args["data"]["workerId"]; |
826 var target = mainTarget.workerManager ? mainTarget.workerManager.tar
getByWorkerId(workerId) : null; | 917 var target = mainTarget.workerManager ? mainTarget.workerManager.tar
getByWorkerId(workerId) : null; |
827 if (!target) | 918 if (!target) |
828 continue; | 919 continue; |
829 var cpuProfile = this._cpuProfiles.get(target.id()); | 920 var cpuProfile = this._cpuProfiles.get(target.id()); |
830 this._injectCpuProfileEvent(pid, metaEvent.args["data"]["workerThrea
dId"], cpuProfile); | 921 this._injectCpuProfileEvent(pid, metaEvent.args["data"]["workerThrea
dId"], cpuProfile); |
831 } | 922 } |
832 this._cpuProfiles = null; | 923 this._cpuProfiles = null; |
833 }, | 924 }, |
834 | 925 |
(...skipping 456 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1291 /** @type {!Array.<!WebInspector.TracingModel.Event>} */ | 1382 /** @type {!Array.<!WebInspector.TracingModel.Event>} */ |
1292 this._inspectedTargetEvents = []; | 1383 this._inspectedTargetEvents = []; |
1293 /** @type {!Array.<!WebInspector.TimelineModel.Record>} */ | 1384 /** @type {!Array.<!WebInspector.TimelineModel.Record>} */ |
1294 this._records = []; | 1385 this._records = []; |
1295 /** @type {!Array.<!WebInspector.TimelineModel.Record>} */ | 1386 /** @type {!Array.<!WebInspector.TimelineModel.Record>} */ |
1296 this._mainThreadTasks = []; | 1387 this._mainThreadTasks = []; |
1297 /** @type {!Array.<!WebInspector.TimelineModel.Record>} */ | 1388 /** @type {!Array.<!WebInspector.TimelineModel.Record>} */ |
1298 this._gpuTasks = []; | 1389 this._gpuTasks = []; |
1299 /** @type {!Array.<!WebInspector.TimelineModel.Record>} */ | 1390 /** @type {!Array.<!WebInspector.TimelineModel.Record>} */ |
1300 this._eventDividerRecords = []; | 1391 this._eventDividerRecords = []; |
| 1392 /** @type {?string} */ |
| 1393 this._sessionId = null; |
| 1394 this._loadedFromFile = false; |
1301 this.dispatchEventToListeners(WebInspector.TimelineModel.Events.RecordsC
leared); | 1395 this.dispatchEventToListeners(WebInspector.TimelineModel.Events.RecordsC
leared); |
1302 }, | 1396 }, |
1303 | 1397 |
1304 /** | 1398 /** |
1305 * @return {number} | 1399 * @return {number} |
1306 */ | 1400 */ |
1307 minimumRecordTime: function() | 1401 minimumRecordTime: function() |
1308 { | 1402 { |
1309 return this._tracingModel.minimumRecordTime(); | 1403 return this._tracingModel.minimumRecordTime(); |
1310 }, | 1404 }, |
(...skipping 568 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1879 /** | 1973 /** |
1880 * @constructor | 1974 * @constructor |
1881 * @implements {WebInspector.OutputStream} | 1975 * @implements {WebInspector.OutputStream} |
1882 * @param {!WebInspector.TimelineModel} model | 1976 * @param {!WebInspector.TimelineModel} model |
1883 * @param {!WebInspector.Progress} progress | 1977 * @param {!WebInspector.Progress} progress |
1884 * @param {function()=} canceledCallback | 1978 * @param {function()=} canceledCallback |
1885 */ | 1979 */ |
1886 WebInspector.TracingModelLoader = function(model, progress, canceledCallback) | 1980 WebInspector.TracingModelLoader = function(model, progress, canceledCallback) |
1887 { | 1981 { |
1888 this._model = model; | 1982 this._model = model; |
1889 this._loader = new WebInspector.TracingModel.Loader(model._tracingModel); | |
1890 | 1983 |
1891 this._canceledCallback = canceledCallback; | 1984 this._canceledCallback = canceledCallback; |
1892 this._progress = progress; | 1985 this._progress = progress; |
1893 this._progress.setTitle(WebInspector.UIString("Loading")); | 1986 this._progress.setTitle(WebInspector.UIString("Loading")); |
1894 this._progress.setTotalWork(WebInspector.TracingModelLoader._totalProgress);
// Unknown, will loop the values. | 1987 this._progress.setTotalWork(WebInspector.TracingModelLoader._totalProgress);
// Unknown, will loop the values. |
1895 | 1988 |
1896 this._state = WebInspector.TracingModelLoader.State.Initial; | 1989 this._state = WebInspector.TracingModelLoader.State.Initial; |
1897 this._buffer = ""; | 1990 this._buffer = ""; |
1898 this._firstChunk = true; | 1991 this._firstChunk = true; |
1899 this._wasCanceledOnce = false; | 1992 this._wasCanceledOnce = false; |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1976 | 2069 |
1977 if (this._firstChunk) { | 2070 if (this._firstChunk) { |
1978 this._firstChunk = false; | 2071 this._firstChunk = false; |
1979 if (this._looksLikeAppVersion(items[0])) { | 2072 if (this._looksLikeAppVersion(items[0])) { |
1980 this._reportErrorAndCancelLoading(WebInspector.UIString("Legacy
Timeline format is not supported.")); | 2073 this._reportErrorAndCancelLoading(WebInspector.UIString("Legacy
Timeline format is not supported.")); |
1981 return; | 2074 return; |
1982 } | 2075 } |
1983 } | 2076 } |
1984 | 2077 |
1985 try { | 2078 try { |
1986 this._loader.loadNextChunk(items); | 2079 this._model._tracingModel.addEvents(items); |
1987 } catch(e) { | 2080 } catch(e) { |
1988 this._reportErrorAndCancelLoading(WebInspector.UIString("Malformed t
imeline data: %s", e.toString())); | 2081 this._reportErrorAndCancelLoading(WebInspector.UIString("Malformed t
imeline data: %s", e.toString())); |
1989 return; | 2082 return; |
1990 } | 2083 } |
1991 }, | 2084 }, |
1992 | 2085 |
1993 /** | 2086 /** |
1994 * @param {string=} message | 2087 * @param {string=} message |
1995 */ | 2088 */ |
1996 _reportErrorAndCancelLoading: function(message) | 2089 _reportErrorAndCancelLoading: function(message) |
(...skipping 10 matching lines...) Expand all Loading... |
2007 _looksLikeAppVersion: function(item) | 2100 _looksLikeAppVersion: function(item) |
2008 { | 2101 { |
2009 return typeof item === "string" && item.indexOf("Chrome") !== -1; | 2102 return typeof item === "string" && item.indexOf("Chrome") !== -1; |
2010 }, | 2103 }, |
2011 | 2104 |
2012 /** | 2105 /** |
2013 * @override | 2106 * @override |
2014 */ | 2107 */ |
2015 close: function() | 2108 close: function() |
2016 { | 2109 { |
2017 this._loader.finish(); | 2110 this._model._loadedFromFile = true; |
2018 this._model.tracingComplete(); | 2111 this._model.tracingComplete(); |
2019 if (this._progress) | 2112 if (this._progress) |
2020 this._progress.done(); | 2113 this._progress.done(); |
2021 } | 2114 } |
2022 } | 2115 } |
2023 | 2116 |
2024 /** | 2117 /** |
2025 * @constructor | 2118 * @constructor |
2026 * @param {!WebInspector.OutputStream} stream | 2119 * @param {!WebInspector.OutputStream} stream |
2027 * @implements {WebInspector.OutputStreamDelegate} | 2120 * @implements {WebInspector.OutputStreamDelegate} |
(...skipping 335 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2363 /** @type {!Object.<string, !Array.<!WebInspector.InvalidationTrackingEv
ent>>} */ | 2456 /** @type {!Object.<string, !Array.<!WebInspector.InvalidationTrackingEv
ent>>} */ |
2364 this._invalidations = {}; | 2457 this._invalidations = {}; |
2365 /** @type {!Object.<number, !Array.<!WebInspector.InvalidationTrackingEv
ent>>} */ | 2458 /** @type {!Object.<number, !Array.<!WebInspector.InvalidationTrackingEv
ent>>} */ |
2366 this._invalidationsByNodeId = {}; | 2459 this._invalidationsByNodeId = {}; |
2367 | 2460 |
2368 this._lastRecalcStyle = undefined; | 2461 this._lastRecalcStyle = undefined; |
2369 this._lastPaintWithLayer = undefined; | 2462 this._lastPaintWithLayer = undefined; |
2370 this._didPaint = false; | 2463 this._didPaint = false; |
2371 } | 2464 } |
2372 } | 2465 } |
OLD | NEW |