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

Side by Side Diff: Source/devtools/front_end/TimelineModel.js

Issue 104523002: [DevTools] Add power profiler and power overview in timeline panel. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 7 years 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 24 matching lines...) Expand all
35 WebInspector.TimelineModel = function() 35 WebInspector.TimelineModel = function()
36 { 36 {
37 this._records = []; 37 this._records = [];
38 this._stringPool = new StringPool(); 38 this._stringPool = new StringPool();
39 this._minimumRecordTime = -1; 39 this._minimumRecordTime = -1;
40 this._maximumRecordTime = -1; 40 this._maximumRecordTime = -1;
41 41
42 WebInspector.timelineManager.addEventListener(WebInspector.TimelineManager.E ventTypes.TimelineEventRecorded, this._onRecordAdded, this); 42 WebInspector.timelineManager.addEventListener(WebInspector.TimelineManager.E ventTypes.TimelineEventRecorded, this._onRecordAdded, this);
43 WebInspector.timelineManager.addEventListener(WebInspector.TimelineManager.E ventTypes.TimelineStarted, this._onStarted, this); 43 WebInspector.timelineManager.addEventListener(WebInspector.TimelineManager.E ventTypes.TimelineStarted, this._onStarted, this);
44 WebInspector.timelineManager.addEventListener(WebInspector.TimelineManager.E ventTypes.TimelineStopped, this._onStopped, this); 44 WebInspector.timelineManager.addEventListener(WebInspector.TimelineManager.E ventTypes.TimelineStopped, this._onStopped, this);
45 WebInspector.powerProfiler.addEventListener(WebInspector.PowerProfiler.Event Types.PowerEventRecorded, this._onPowerEventAdded, this);
pfeldman 2014/01/09 11:38:52 Timeline model should not depend on any of the pro
Pan 2014/02/13 06:01:40 Hi @pfeldman, @qsr, I'm thinking the first soluti
45 } 46 }
46 47
47 WebInspector.TimelineModel.TransferChunkLengthBytes = 5000000; 48 WebInspector.TimelineModel.TransferChunkLengthBytes = 5000000;
48 49
49 WebInspector.TimelineModel.RecordType = { 50 WebInspector.TimelineModel.RecordType = {
50 Root: "Root", 51 Root: "Root",
51 Program: "Program", 52 Program: "Program",
52 EventDispatch: "EventDispatch", 53 EventDispatch: "EventDispatch",
53 54
54 GPUTask: "GPUTask", 55 GPUTask: "GPUTask",
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
95 GCEvent: "GCEvent", 96 GCEvent: "GCEvent",
96 97
97 RequestAnimationFrame: "RequestAnimationFrame", 98 RequestAnimationFrame: "RequestAnimationFrame",
98 CancelAnimationFrame: "CancelAnimationFrame", 99 CancelAnimationFrame: "CancelAnimationFrame",
99 FireAnimationFrame: "FireAnimationFrame", 100 FireAnimationFrame: "FireAnimationFrame",
100 101
101 WebSocketCreate : "WebSocketCreate", 102 WebSocketCreate : "WebSocketCreate",
102 WebSocketSendHandshakeRequest : "WebSocketSendHandshakeRequest", 103 WebSocketSendHandshakeRequest : "WebSocketSendHandshakeRequest",
103 WebSocketReceiveHandshakeResponse : "WebSocketReceiveHandshakeResponse", 104 WebSocketReceiveHandshakeResponse : "WebSocketReceiveHandshakeResponse",
104 WebSocketDestroy : "WebSocketDestroy", 105 WebSocketDestroy : "WebSocketDestroy",
106
107 SoC_Package : "SoC_Package",
105 } 108 }
106 109
107 WebInspector.TimelineModel.Events = { 110 WebInspector.TimelineModel.Events = {
108 RecordAdded: "RecordAdded", 111 RecordAdded: "RecordAdded",
109 RecordsCleared: "RecordsCleared", 112 RecordsCleared: "RecordsCleared",
110 RecordingStarted: "RecordingStarted", 113 RecordingStarted: "RecordingStarted",
111 RecordingStopped: "RecordingStopped" 114 RecordingStopped: "RecordingStopped"
112 } 115 }
113 116
114 WebInspector.TimelineModel.startTimeInSeconds = function(record) 117 WebInspector.TimelineModel.startTimeInSeconds = function(record)
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
154 } 157 }
155 158
156 WebInspector.TimelineModel.prototype = { 159 WebInspector.TimelineModel.prototype = {
157 /** 160 /**
158 * @param {boolean=} includeDomCounters 161 * @param {boolean=} includeDomCounters
159 */ 162 */
160 startRecording: function(includeDomCounters) 163 startRecording: function(includeDomCounters)
161 { 164 {
162 this._clientInitiatedRecording = true; 165 this._clientInitiatedRecording = true;
163 this.reset(); 166 this.reset();
167
168 if (WebInspector.experimentsSettings.powerProfile.isEnabled())
169 WebInspector.powerProfiler.startProfile();
170
164 var maxStackFrames = WebInspector.settings.timelineCaptureStacks.get() ? 30 : 0; 171 var maxStackFrames = WebInspector.settings.timelineCaptureStacks.get() ? 30 : 0;
165 var includeGPUEvents = WebInspector.experimentsSettings.gpuTimeline.isEn abled(); 172 var includeGPUEvents = WebInspector.experimentsSettings.gpuTimeline.isEn abled();
166 WebInspector.timelineManager.start(maxStackFrames, includeDomCounters, i ncludeGPUEvents, this._fireRecordingStarted.bind(this)); 173 WebInspector.timelineManager.start(maxStackFrames, includeDomCounters, i ncludeGPUEvents, this._fireRecordingStarted.bind(this));
167 }, 174 },
168 175
169 stopRecording: function() 176 stopRecording: function()
170 { 177 {
171 if (!this._clientInitiatedRecording) { 178 if (!this._clientInitiatedRecording) {
172 // Console started this one and we are just sniffing it. Initiate re cording so that we 179 // Console started this one and we are just sniffing it. Initiate re cording so that we
173 // could stop it. 180 // could stop it.
174 function stopTimeline() 181 function stopTimeline()
175 { 182 {
176 WebInspector.timelineManager.stop(this._fireRecordingStopped.bin d(this)); 183 WebInspector.timelineManager.stop(this._fireRecordingStopped.bin d(this));
177 } 184 }
178 185
179 WebInspector.timelineManager.start(undefined, undefined, undefined, stopTimeline.bind(this)); 186 WebInspector.timelineManager.start(undefined, undefined, undefined, stopTimeline.bind(this));
180 return; 187 return;
181 } 188 }
182 this._clientInitiatedRecording = false; 189 this._clientInitiatedRecording = false;
183 WebInspector.timelineManager.stop(this._fireRecordingStopped.bind(this)) ; 190 WebInspector.timelineManager.stop(this._fireRecordingStopped.bind(this)) ;
191
192 if (WebInspector.experimentsSettings.powerProfile.isEnabled())
193 WebInspector.powerProfiler.stopProfile();
184 }, 194 },
185 195
186 get records() 196 get records()
187 { 197 {
188 return this._records; 198 return this._records;
189 }, 199 },
190 200
191 /** 201 /**
192 * @param {WebInspector.Event} event 202 * @param {WebInspector.Event} event
193 */ 203 */
(...skipping 30 matching lines...) Expand all
224 this._collectionEnabled = true; 234 this._collectionEnabled = true;
225 this.dispatchEventToListeners(WebInspector.TimelineModel.Events.Recordin gStarted); 235 this.dispatchEventToListeners(WebInspector.TimelineModel.Events.Recordin gStarted);
226 }, 236 },
227 237
228 _fireRecordingStopped: function() 238 _fireRecordingStopped: function()
229 { 239 {
230 this._collectionEnabled = false; 240 this._collectionEnabled = false;
231 this.dispatchEventToListeners(WebInspector.TimelineModel.Events.Recordin gStopped); 241 this.dispatchEventToListeners(WebInspector.TimelineModel.Events.Recordin gStopped);
232 }, 242 },
233 243
244 _onPowerEventAdded: function(event)
245 {
246 if (this._collectionEnabled) {
247 var records = event.data;
248 for(var item in records) {
249 records[item]["startTime"] = records[item].timestamp;
250 delete records[item].timestamp;
251 }
252 this._stringPool.internObjectStrings(records);
253 this._records = this._records.concat(records);
254 records.forEach(this._updateBoundaries.bind(this)); // shall we upda te boundary here?
255 this.dispatchEventToListeners(WebInspector.TimelineModel.Events.Reco rdAdded, records);
256 }
257 },
258
234 /** 259 /**
235 * @param {TimelineAgent.TimelineEvent} record 260 * @param {TimelineAgent.TimelineEvent} record
236 */ 261 */
237 _addRecord: function(record) 262 _addRecord: function(record)
238 { 263 {
239 this._stringPool.internObjectStrings(record); 264 this._stringPool.internObjectStrings(record);
240 this._records.push(record); 265 this._records.push(record);
241 this._updateBoundaries(record); 266 this._updateBoundaries(record);
242 this.dispatchEventToListeners(WebInspector.TimelineModel.Events.RecordAd ded, record); 267 this.dispatchEventToListeners(WebInspector.TimelineModel.Events.RecordAd ded, record);
243 }, 268 },
(...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after
513 break; 538 break;
514 length += itemLength; 539 length += itemLength;
515 data.push(item); 540 data.push(item);
516 ++this._recordIndex; 541 ++this._recordIndex;
517 } 542 }
518 if (this._recordIndex === this._records.length) 543 if (this._recordIndex === this._records.length)
519 data.push(data.pop() + "]"); 544 data.push(data.pop() + "]");
520 stream.write(data.join(separator), this._writeNextChunk.bind(this)); 545 stream.write(data.join(separator), this._writeNextChunk.bind(this));
521 } 546 }
522 } 547 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698