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

Side by Side Diff: third_party/WebKit/Source/devtools/front_end/timeline/TimelineFlameChart.js

Issue 1798253003: Timeline: get collapsible row groups on FlameChart out of experiment (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebased test as "Main Thread" header is no longer an entry Created 4 years, 9 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
« no previous file with comments | « third_party/WebKit/Source/devtools/front_end/main/Main.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 /* 1 /*
2 * Copyright (C) 2014 Google Inc. All rights reserved. 2 * Copyright (C) 2014 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 244 matching lines...) Expand 10 before | Expand all | Expand 10 after
255 _isVisible: function(event) 255 _isVisible: function(event)
256 { 256 {
257 return this._filters.every(function (filter) { return filter.accept(even t); }); 257 return this._filters.every(function (filter) { return filter.accept(even t); });
258 } 258 }
259 } 259 }
260 260
261 /** 261 /**
262 * @enum {symbol} 262 * @enum {symbol}
263 */ 263 */
264 WebInspector.TimelineFlameChartEntryType = { 264 WebInspector.TimelineFlameChartEntryType = {
265 Header: Symbol("Header"),
266 Frame: Symbol("Frame"), 265 Frame: Symbol("Frame"),
267 Event: Symbol("Event"), 266 Event: Symbol("Event"),
268 InteractionRecord: Symbol("InteractionRecord"), 267 InteractionRecord: Symbol("InteractionRecord"),
269 }; 268 };
270 269
271 /** 270 /**
272 * @constructor 271 * @constructor
273 * @extends {WebInspector.TimelineFlameChartDataProviderBase} 272 * @extends {WebInspector.TimelineFlameChartDataProviderBase}
274 * @param {!WebInspector.TimelineModel} model 273 * @param {!WebInspector.TimelineModel} model
275 * @param {!WebInspector.TimelineFrameModelBase} frameModel 274 * @param {!WebInspector.TimelineFrameModelBase} frameModel
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
352 else 351 else
353 return WebInspector.TimelineFlameChartDataProviderBase.prototype.tex tColor.call(this, index); 352 return WebInspector.TimelineFlameChartDataProviderBase.prototype.tex tColor.call(this, index);
354 }, 353 },
355 354
356 /** 355 /**
357 * @override 356 * @override
358 */ 357 */
359 reset: function() 358 reset: function()
360 { 359 {
361 WebInspector.TimelineFlameChartDataProviderBase.prototype.reset.call(thi s); 360 WebInspector.TimelineFlameChartDataProviderBase.prototype.reset.call(thi s);
362 /** @type {!Array<!WebInspector.TracingModel.Event|!WebInspector.Timelin eFrame|!WebInspector.TimelineIRModel.Phases|null>} */ 361 /** @type {!Array<!WebInspector.TracingModel.Event|!WebInspector.Timelin eFrame|!WebInspector.TimelineIRModel.Phases>} */
363 this._entryData = []; 362 this._entryData = [];
364 /** @type {!Array<!WebInspector.TimelineFlameChartEntryType>} */ 363 /** @type {!Array<!WebInspector.TimelineFlameChartEntryType>} */
365 this._entryTypeByLevel = []; 364 this._entryTypeByLevel = [];
366 /** @type {!Array<string>} */ 365 /** @type {!Array<string>} */
367 this._entryIndexToTitle = []; 366 this._entryIndexToTitle = [];
368 /** @type {!Array.<!WebInspector.TimelineFlameChartMarker>} */ 367 /** @type {!Array.<!WebInspector.TimelineFlameChartMarker>} */
369 this._markers = []; 368 this._markers = [];
370 this._asyncColorByCategory = {}; 369 this._asyncColorByCategory = {};
371 }, 370 },
372 371
373 /** 372 /**
374 * @override 373 * @override
375 * @return {!WebInspector.FlameChart.TimelineData} 374 * @return {!WebInspector.FlameChart.TimelineData}
376 */ 375 */
377 timelineData: function() 376 timelineData: function()
378 { 377 {
379 if (this._timelineData) 378 if (this._timelineData)
380 return this._timelineData; 379 return this._timelineData;
381 380
382 this._timelineData = new WebInspector.FlameChart.TimelineData([], [], [] , []); 381 this._timelineData = new WebInspector.FlameChart.TimelineData([], [], [] , []);
383 382
384 this._flowEventIndexById = {}; 383 this._flowEventIndexById = {};
385 this._minimumBoundary = this._model.minimumRecordTime(); 384 this._minimumBoundary = this._model.minimumRecordTime();
386 this._timeSpan = this._model.isEmpty() ? 1000 : this._model.maximumReco rdTime() - this._minimumBoundary; 385 this._timeSpan = this._model.isEmpty() ? 1000 : this._model.maximumReco rdTime() - this._minimumBoundary;
387 this._currentLevel = 0; 386 this._currentLevel = 0;
388 this._appendFrameBars(this._frameModel.frames()); 387 this._appendFrameBars(this._frameModel.frames());
389 this._appendInteractionRecords(); 388 this._appendInteractionRecords();
390 this._appendThreadTimelineData(WebInspector.UIString("Main Thread"), thi s._model.mainThreadEvents(), this._model.mainThreadAsyncEvents(), true);
391 if (Runtime.experiments.isEnabled("gpuTimeline"))
392 this._appendGPUEvents();
393 389
394 var threads = this._model.virtualThreads(); 390 var threads = this._model.virtualThreads();
395 var compositorThreads; 391 var compositorThreads = threads.filter(thread => thread.name.startsWith( "CompositorTileWorker"));
396 var otherThreads; 392 var otherThreads = threads.filter(thread => !thread.name.startsWith("Com positorTileWorker"));
397 if (Runtime.experiments.isEnabled("timelineCollapsible")) {
398 compositorThreads = threads.filter(thread => thread.name.startsWith( "CompositorTileWorker"));
399 otherThreads = threads.filter(thread => !thread.name.startsWith("Com positorTileWorker"));
400 } else {
401 compositorThreads = [];
402 otherThreads = threads;
403 }
404 otherThreads.forEach(thread => this._appendThreadTimelineData(thread.nam e, thread.events, thread.asyncEventsByGroup));
405 if (compositorThreads.length) { 393 if (compositorThreads.length) {
406 this._appendHeader(WebInspector.UIString("Rasterizer Threads"), this ._headerLevel1); 394 this._appendHeader(WebInspector.UIString("Rasterizer Threads"), this ._headerLevel1);
407 for (var i = 0; i < compositorThreads.length; ++i) 395 for (var i = 0; i < compositorThreads.length; ++i)
408 this._appendSyncEvents(compositorThreads[i].events, WebInspector .UIString("Rasterizer Thread %d", i), this._headerLevel2); 396 this._appendSyncEvents(compositorThreads[i].events, WebInspector .UIString("Rasterizer Thread %d", i), this._headerLevel2);
409 } 397 }
410 398
399 this._appendThreadTimelineData(WebInspector.UIString("Main Thread"), thi s._model.mainThreadEvents(), this._model.mainThreadAsyncEvents(), true);
400 if (Runtime.experiments.isEnabled("gpuTimeline"))
401 this._appendGPUEvents();
402
403 otherThreads.forEach(thread => this._appendThreadTimelineData(thread.nam e, thread.events, thread.asyncEventsByGroup));
404
411 /** 405 /**
412 * @param {!WebInspector.TimelineFlameChartMarker} a 406 * @param {!WebInspector.TimelineFlameChartMarker} a
413 * @param {!WebInspector.TimelineFlameChartMarker} b 407 * @param {!WebInspector.TimelineFlameChartMarker} b
414 */ 408 */
415 function compareStartTime(a, b) 409 function compareStartTime(a, b)
416 { 410 {
417 return a.startTime() - b.startTime(); 411 return a.startTime() - b.startTime();
418 } 412 }
419 413
420 this._markers.sort(compareStartTime); 414 this._markers.sort(compareStartTime);
(...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after
649 var color = this._asyncColorByCategory[category.name]; 643 var color = this._asyncColorByCategory[category.name];
650 if (color) 644 if (color)
651 return color; 645 return color;
652 var parsedColor = WebInspector.Color.parse(category.color); 646 var parsedColor = WebInspector.Color.parse(category.color);
653 color = parsedColor.setAlpha(0.7).asString(WebInspector.Color.Format .RGBA) || ""; 647 color = parsedColor.setAlpha(0.7).asString(WebInspector.Color.Format .RGBA) || "";
654 this._asyncColorByCategory[category.name] = color; 648 this._asyncColorByCategory[category.name] = color;
655 return color; 649 return color;
656 } 650 }
657 if (type === WebInspector.TimelineFlameChartEntryType.Frame) 651 if (type === WebInspector.TimelineFlameChartEntryType.Frame)
658 return "white"; 652 return "white";
659 if (type === WebInspector.TimelineFlameChartEntryType.Header)
660 return "#aaa";
661 if (type === WebInspector.TimelineFlameChartEntryType.InteractionRecord) 653 if (type === WebInspector.TimelineFlameChartEntryType.InteractionRecord)
662 return WebInspector.TimelineUIUtils.interactionPhaseColor(/** @type {!WebInspector.TimelineIRModel.Phases} */ (this._entryData[entryIndex])); 654 return WebInspector.TimelineUIUtils.interactionPhaseColor(/** @type {!WebInspector.TimelineIRModel.Phases} */ (this._entryData[entryIndex]));
663 return ""; 655 return "";
664 }, 656 },
665 657
666 /** 658 /**
667 * @override 659 * @override
668 * @param {number} entryIndex 660 * @param {number} entryIndex
669 * @param {!CanvasRenderingContext2D} context 661 * @param {!CanvasRenderingContext2D} context
670 * @param {?string} text 662 * @param {?string} text
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
740 type === WebInspector.TimelineFlameChartEntryType.Event && !!/** @ty pe {!WebInspector.TracingModel.Event} */ (this._entryData[entryIndex]).warning; 732 type === WebInspector.TimelineFlameChartEntryType.Event && !!/** @ty pe {!WebInspector.TracingModel.Event} */ (this._entryData[entryIndex]).warning;
741 }, 733 },
742 734
743 /** 735 /**
744 * @param {string} title 736 * @param {string} title
745 * @param {!WebInspector.FlameChart.GroupStyle} style 737 * @param {!WebInspector.FlameChart.GroupStyle} style
746 * @param {boolean=} expanded 738 * @param {boolean=} expanded
747 */ 739 */
748 _appendHeader: function(title, style, expanded) 740 _appendHeader: function(title, style, expanded)
749 { 741 {
750 if (Runtime.experiments.isEnabled("timelineCollapsible")) 742 this._timelineData.groups.push({startLevel: this._currentLevel, name: ti tle, expanded: expanded, style: style});
751 this._timelineData.groups.push({startLevel: this._currentLevel, name : title, expanded: expanded, style: style});
752 else
753 this._appendHeaderRecord(title)
754 }, 743 },
755 744
756 /** 745 /**
757 * @param {string} title
758 */
759 _appendHeaderRecord: function(title)
760 {
761 var index = this._entryData.length;
762 this._entryIndexToTitle[index] = title;
763 this._entryData.push(null);
764 this._entryTypeByLevel[this._currentLevel] = WebInspector.TimelineFlameC hartEntryType.Header;
765 this._timelineData.entryLevels[index] = this._currentLevel++;
766 this._timelineData.entryTotalTimes[index] = this._timeSpan;
767 this._timelineData.entryStartTimes[index] = this._minimumBoundary;
768 },
769
770 /**
771 * @param {!WebInspector.TracingModel.Event} event 746 * @param {!WebInspector.TracingModel.Event} event
772 * @param {number} level 747 * @param {number} level
773 */ 748 */
774 _appendEvent: function(event, level) 749 _appendEvent: function(event, level)
775 { 750 {
776 var index = this._entryData.length; 751 var index = this._entryData.length;
777 this._entryData.push(event); 752 this._entryData.push(event);
778 this._timelineData.entryLevels[index] = level; 753 this._timelineData.entryLevels[index] = level;
779 this._timelineData.entryTotalTimes[index] = event.duration || WebInspect or.TimelineFlameChartDataProvider.InstantEventVisibleDurationMs; 754 this._timelineData.entryTotalTimes[index] = event.duration || WebInspect or.TimelineFlameChartDataProvider.InstantEventVisibleDurationMs;
780 this._timelineData.entryStartTimes[index] = event.startTime; 755 this._timelineData.entryStartTimes[index] = event.startTime;
(...skipping 691 matching lines...) Expand 10 before | Expand all | Expand 10 after
1472 /** 1447 /**
1473 * @constructor 1448 * @constructor
1474 * @param {!WebInspector.TimelineSelection} selection 1449 * @param {!WebInspector.TimelineSelection} selection
1475 * @param {number} entryIndex 1450 * @param {number} entryIndex
1476 */ 1451 */
1477 WebInspector.TimelineFlameChartView.Selection = function(selection, entryIndex) 1452 WebInspector.TimelineFlameChartView.Selection = function(selection, entryIndex)
1478 { 1453 {
1479 this.timelineSelection = selection; 1454 this.timelineSelection = selection;
1480 this.entryIndex = entryIndex; 1455 this.entryIndex = entryIndex;
1481 } 1456 }
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/devtools/front_end/main/Main.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698