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

Side by Side Diff: webkit/glue/devtools/js/profiler_processor.js

Issue 159135: DevTools Profiler: small UI improvements.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 11 years, 5 months 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 | Annotate | Revision Log
« no previous file with comments | « webkit/glue/devtools/js/debugger_agent.js ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 /** 5 /**
6 * @fileoverview Profiler processor is used to process log file produced 6 * @fileoverview Profiler processor is used to process log file produced
7 * by V8 and produce an internal profile representation which is used 7 * by V8 and produce an internal profile representation which is used
8 * for building profile views in 'Profiles' tab. 8 * for building profile views in 'Profiles' tab.
9 */ 9 */
10 goog.provide('devtools.profiler.Processor'); 10 goog.provide('devtools.profiler.Processor');
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
172 'end-code-region': null}); 172 'end-code-region': null});
173 173
174 174
175 /** 175 /**
176 * Callback that is called when a new profile is encountered in the log. 176 * Callback that is called when a new profile is encountered in the log.
177 * @type {function()} 177 * @type {function()}
178 */ 178 */
179 this.startedProfileProcessing_ = null; 179 this.startedProfileProcessing_ = null;
180 180
181 /** 181 /**
182 * Callback that is called periodically to display processing status.
183 * @type {function()}
184 */
185 this.profileProcessingStatus_ = null;
186
187 /**
182 * Callback that is called when a profile has been processed and is ready 188 * Callback that is called when a profile has been processed and is ready
183 * to be shown. 189 * to be shown.
184 * @type {function(devtools.profiler.ProfileView)} 190 * @type {function(devtools.profiler.ProfileView)}
185 */ 191 */
186 this.finishedProfileProcessing_ = null; 192 this.finishedProfileProcessing_ = null;
187 193
188 /** 194 /**
189 * The current profile. 195 * The current profile.
190 * @type {devtools.profiler.JsProfile} 196 * @type {devtools.profiler.JsProfile}
191 */ 197 */
192 this.currentProfile_ = null; 198 this.currentProfile_ = null;
193 199
194 /** 200 /**
195 * Builder of profile views. Created during "profiler,begin" event processing. 201 * Builder of profile views. Created during "profiler,begin" event processing.
196 * @type {devtools.profiler.WebKitViewBuilder} 202 * @type {devtools.profiler.WebKitViewBuilder}
197 */ 203 */
198 this.viewBuilder_ = null; 204 this.viewBuilder_ = null;
199 205
200 /** 206 /**
201 * Next profile id. 207 * Next profile id.
202 * @type {number} 208 * @type {number}
203 */ 209 */
204 this.profileId_ = 1; 210 this.profileId_ = 1;
211
212 /**
213 * Counter for processed ticks.
214 * @type {number}
215 */
216 this.ticksCount_ = 0;
205 }; 217 };
206 goog.inherits(devtools.profiler.Processor, devtools.profiler.LogReader); 218 goog.inherits(devtools.profiler.Processor, devtools.profiler.LogReader);
207 219
208 220
209 /** 221 /**
210 * @override 222 * @override
211 */ 223 */
212 devtools.profiler.Processor.prototype.printError = function(str) { 224 devtools.profiler.Processor.prototype.printError = function(str) {
213 debugPrint(str); 225 debugPrint(str);
214 }; 226 };
215 227
216 228
217 /** 229 /**
218 * @override 230 * @override
219 */ 231 */
220 devtools.profiler.Processor.prototype.skipDispatch = function(dispatch) { 232 devtools.profiler.Processor.prototype.skipDispatch = function(dispatch) {
221 return dispatch.needsProfile && this.currentProfile_ == null; 233 return dispatch.needsProfile && this.currentProfile_ == null;
222 }; 234 };
223 235
224 236
225 /** 237 /**
226 * Sets profile processing callbacks. 238 * Sets profile processing callbacks.
227 * 239 *
228 * @param {function()} started Started processing callback. 240 * @param {function()} started Started processing callback.
229 * @param {function(devtools.profiler.ProfileView)} finished Finished 241 * @param {function(devtools.profiler.ProfileView)} finished Finished
230 * processing callback. 242 * processing callback.
231 */ 243 */
232 devtools.profiler.Processor.prototype.setCallbacks = function( 244 devtools.profiler.Processor.prototype.setCallbacks = function(
233 started, finished) { 245 started, processing, finished) {
234 this.startedProfileProcessing_ = started; 246 this.startedProfileProcessing_ = started;
247 this.profileProcessingStatus_ = processing;
235 this.finishedProfileProcessing_ = finished; 248 this.finishedProfileProcessing_ = finished;
236 }; 249 };
237 250
238 251
239 /** 252 /**
240 * An address for the fake "(program)" entry. WebKit's visualisation 253 * An address for the fake "(program)" entry. WebKit's visualisation
241 * has assumptions on how the top of the call tree should look like, 254 * has assumptions on how the top of the call tree should look like,
242 * and we need to add a fake entry as the topmost function. This 255 * and we need to add a fake entry as the topmost function. This
243 * address is chosen because it's the end address of the first memory 256 * address is chosen because it's the end address of the first memory
244 * page, which is never used for code or data, but only as a guard 257 * page, which is never used for code or data, but only as a guard
(...skipping 13 matching lines...) Expand all
258 * @param {function(devtools.profiler.ProfileView)} callback Callback function. 271 * @param {function(devtools.profiler.ProfileView)} callback Callback function.
259 */ 272 */
260 devtools.profiler.Processor.prototype.setNewProfileCallback = function( 273 devtools.profiler.Processor.prototype.setNewProfileCallback = function(
261 callback) { 274 callback) {
262 this.newProfileCallback_ = callback; 275 this.newProfileCallback_ = callback;
263 }; 276 };
264 277
265 278
266 devtools.profiler.Processor.prototype.processProfiler_ = function( 279 devtools.profiler.Processor.prototype.processProfiler_ = function(
267 state, params) { 280 state, params) {
281 var processingInterval = null;
268 switch (state) { 282 switch (state) {
269 case 'resume': 283 case 'resume':
270 if (this.currentProfile_ == null) { 284 if (this.currentProfile_ == null) {
271 this.currentProfile_ = new devtools.profiler.JsProfile(); 285 this.currentProfile_ = new devtools.profiler.JsProfile();
272 // see the comment for devtools.profiler.Processor.PROGRAM_ENTRY 286 // see the comment for devtools.profiler.Processor.PROGRAM_ENTRY
273 this.currentProfile_.addCode( 287 this.currentProfile_.addCode(
274 'Function', '(program)', 288 'Function', '(program)',
275 devtools.profiler.Processor.PROGRAM_ENTRY, 1); 289 devtools.profiler.Processor.PROGRAM_ENTRY, 1);
276 if (this.startedProfileProcessing_) { 290 if (this.startedProfileProcessing_) {
277 this.startedProfileProcessing_(); 291 this.startedProfileProcessing_();
278 } 292 }
293 this.ticksCount_ = 0;
294 var self = this;
295 if (this.profileProcessingStatus_) {
296 processingInterval = window.setInterval(
297 function() { self.profileProcessingStatus_(self.ticksCount_); },
298 1000);
299 }
279 } 300 }
280 break; 301 break;
281 case 'pause': 302 case 'pause':
282 if (this.currentProfile_ != null) { 303 if (this.currentProfile_ != null) {
304 window.clearInterval(processingInterval);
pfeldman 2009/07/21 14:58:49 should this be checked for nullness?
mnaganov (inactive) 2009/07/21 15:06:29 window.clearInterval(null) is harmless.
283 if (this.finishedProfileProcessing_) { 305 if (this.finishedProfileProcessing_) {
284 this.finishedProfileProcessing_(this.createProfileForView()); 306 this.finishedProfileProcessing_(this.createProfileForView());
285 } 307 }
286 this.currentProfile_ = null; 308 this.currentProfile_ = null;
287 } 309 }
288 break; 310 break;
289 case 'begin': 311 case 'begin':
290 var samplingRate = NaN; 312 var samplingRate = NaN;
291 if (params.length > 0) { 313 if (params.length > 0) {
292 samplingRate = parseInt(params[0]); 314 samplingRate = parseInt(params[0]);
(...skipping 26 matching lines...) Expand all
319 devtools.profiler.Processor.prototype.processCodeDelete_ = function(start) { 341 devtools.profiler.Processor.prototype.processCodeDelete_ = function(start) {
320 this.currentProfile_.deleteCode(start); 342 this.currentProfile_.deleteCode(start);
321 }; 343 };
322 344
323 345
324 devtools.profiler.Processor.prototype.processTick_ = function( 346 devtools.profiler.Processor.prototype.processTick_ = function(
325 pc, sp, vmState, stack) { 347 pc, sp, vmState, stack) {
326 // see the comment for devtools.profiler.Processor.PROGRAM_ENTRY 348 // see the comment for devtools.profiler.Processor.PROGRAM_ENTRY
327 stack.push(devtools.profiler.Processor.PROGRAM_ENTRY_STR); 349 stack.push(devtools.profiler.Processor.PROGRAM_ENTRY_STR);
328 this.currentProfile_.recordTick(this.processStack(pc, stack)); 350 this.currentProfile_.recordTick(this.processStack(pc, stack));
351 this.ticksCount_++;
329 }; 352 };
330 353
331 354
332 /** 355 /**
333 * Creates a profile for further displaying in ProfileView. 356 * Creates a profile for further displaying in ProfileView.
334 */ 357 */
335 devtools.profiler.Processor.prototype.createProfileForView = function() { 358 devtools.profiler.Processor.prototype.createProfileForView = function() {
336 var profile = this.viewBuilder_.buildView( 359 var profile = this.viewBuilder_.buildView(
337 this.currentProfile_.getTopDownProfile()); 360 this.currentProfile_.getTopDownProfile());
338 profile.uid = this.profileId_++; 361 profile.uid = this.profileId_++;
339 profile.title = UserInitiatedProfileName + '.' + profile.uid; 362 profile.title = UserInitiatedProfileName + '.' + profile.uid;
340 return profile; 363 return profile;
341 }; 364 };
OLDNEW
« no previous file with comments | « webkit/glue/devtools/js/debugger_agent.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698