| OLD | NEW |
| 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 443 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 454 this._target = target; | 454 this._target = target; |
| 455 this._font = "12px " + WebInspector.fontFamily(); | 455 this._font = "12px " + WebInspector.fontFamily(); |
| 456 this._linkifier = new WebInspector.Linkifier(); | 456 this._linkifier = new WebInspector.Linkifier(); |
| 457 this._palette = new WebInspector.TraceViewPalette(); | 457 this._palette = new WebInspector.TraceViewPalette(); |
| 458 this._entryIndexToTitle = {}; | 458 this._entryIndexToTitle = {}; |
| 459 this._filters = []; | 459 this._filters = []; |
| 460 this.addFilter(WebInspector.TracingTimelineUIUtils.hiddenEventsFilter()); | 460 this.addFilter(WebInspector.TracingTimelineUIUtils.hiddenEventsFilter()); |
| 461 this.addFilter(new WebInspector.TracingTimelineModel.ExclusiveEventNameFilte
r([WebInspector.TracingTimelineModel.RecordType.Program])); | 461 this.addFilter(new WebInspector.TracingTimelineModel.ExclusiveEventNameFilte
r([WebInspector.TracingTimelineModel.RecordType.Program])); |
| 462 } | 462 } |
| 463 | 463 |
| 464 WebInspector.TracingBasedTimelineFlameChartDataProvider.InstantEventVisibleDurat
ionMs = 0.01; |
| 465 |
| 464 WebInspector.TracingBasedTimelineFlameChartDataProvider.prototype = { | 466 WebInspector.TracingBasedTimelineFlameChartDataProvider.prototype = { |
| 465 /** | 467 /** |
| 466 * @return {number} | 468 * @return {number} |
| 467 */ | 469 */ |
| 468 barHeight: function() | 470 barHeight: function() |
| 469 { | 471 { |
| 470 return 20; | 472 return 20; |
| 471 }, | 473 }, |
| 472 | 474 |
| 473 /** | 475 /** |
| (...skipping 25 matching lines...) Expand all Loading... |
| 499 * @param {number} entryIndex | 501 * @param {number} entryIndex |
| 500 * @return {?string} | 502 * @return {?string} |
| 501 */ | 503 */ |
| 502 entryTitle: function(entryIndex) | 504 entryTitle: function(entryIndex) |
| 503 { | 505 { |
| 504 var event = this._entryEvents[entryIndex]; | 506 var event = this._entryEvents[entryIndex]; |
| 505 if (event) { | 507 if (event) { |
| 506 var name = WebInspector.TracingTimelineUIUtils.styleForTraceEvent(ev
ent.name).title; | 508 var name = WebInspector.TracingTimelineUIUtils.styleForTraceEvent(ev
ent.name).title; |
| 507 // TODO(yurys): support event dividers | 509 // TODO(yurys): support event dividers |
| 508 var details = WebInspector.TracingTimelineUIUtils.buildDetailsNodeFo
rTraceEvent(event, this._linkifier, false, this._target); | 510 var details = WebInspector.TracingTimelineUIUtils.buildDetailsNodeFo
rTraceEvent(event, this._linkifier, false, this._target); |
| 511 if (event.name === WebInspector.TracingTimelineModel.RecordType.JSFr
ame && details) |
| 512 return details.textContent; |
| 509 return details ? WebInspector.UIString("%s (%s)", name, details.text
Content) : name; | 513 return details ? WebInspector.UIString("%s (%s)", name, details.text
Content) : name; |
| 510 } | 514 } |
| 511 var title = this._entryIndexToTitle[entryIndex]; | 515 var title = this._entryIndexToTitle[entryIndex]; |
| 512 if (!title) { | 516 if (!title) { |
| 513 title = WebInspector.UIString("Unexpected entryIndex %d", entryIndex
); | 517 title = WebInspector.UIString("Unexpected entryIndex %d", entryIndex
); |
| 514 console.error(title); | 518 console.error(title); |
| 515 } | 519 } |
| 516 return title; | 520 return title; |
| 517 }, | 521 }, |
| 518 | 522 |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 564 }, | 568 }, |
| 565 | 569 |
| 566 /** | 570 /** |
| 567 * @param {string} headerName | 571 * @param {string} headerName |
| 568 * @param {!Array.<!WebInspector.TracingModel.Event>} events | 572 * @param {!Array.<!WebInspector.TracingModel.Event>} events |
| 569 */ | 573 */ |
| 570 _appendThreadTimelineData: function(headerName, events) | 574 _appendThreadTimelineData: function(headerName, events) |
| 571 { | 575 { |
| 572 var maxStackDepth = 0; | 576 var maxStackDepth = 0; |
| 573 var openEvents = []; | 577 var openEvents = []; |
| 578 var heights = []; |
| 574 var headerAppended = false; | 579 var headerAppended = false; |
| 580 var level = 0; |
| 575 for (var i = 0; i < events.length; ++i) { | 581 for (var i = 0; i < events.length; ++i) { |
| 576 var e = events[i]; | 582 var e = events[i]; |
| 577 if (!e.endTime && e.phase !== WebInspector.TracingModel.Phase.Instan
t) | 583 if (!e.endTime && e.phase !== WebInspector.TracingModel.Phase.Instan
t) |
| 578 continue; | 584 continue; |
| 579 if (!this._isVisible(e)) | 585 if (!this._isVisible(e)) |
| 580 continue; | 586 continue; |
| 581 while (openEvents.length && openEvents.peekLast().endTime <= e.start
Time) | 587 while (openEvents.length && openEvents.peekLast().endTime <= e.start
Time) { |
| 582 openEvents.pop(); | 588 openEvents.pop(); |
| 589 level = heights.pop(); |
| 590 } |
| 583 if (!headerAppended) { | 591 if (!headerAppended) { |
| 584 this._appendHeaderRecord(headerName, this._currentLevel++); | 592 this._appendHeaderRecord(headerName, this._currentLevel); |
| 593 ++level; |
| 585 headerAppended = true; | 594 headerAppended = true; |
| 586 } | 595 } |
| 587 this._appendEvent(e, this._currentLevel + openEvents.length); | 596 var height = this._processEvent(e, this._currentLevel + level); |
| 588 maxStackDepth = Math.max(maxStackDepth, openEvents.length + 1); | 597 if (e.endTime) { |
| 589 if (e.endTime) | |
| 590 openEvents.push(e); | 598 openEvents.push(e); |
| 599 heights.push(level) |
| 600 } |
| 601 level += height; |
| 602 maxStackDepth = Math.max(maxStackDepth, level); |
| 591 } | 603 } |
| 592 this._currentLevel += maxStackDepth + (headerAppended ? 1 : 0); | 604 this._currentLevel += maxStackDepth; |
| 593 }, | 605 }, |
| 594 | 606 |
| 595 /** | 607 /** |
| 608 * @param {!WebInspector.TracingModel.Event} event |
| 609 * @param {number} baseLevel |
| 610 * @return {number} |
| 611 */ |
| 612 _processEvent: function(event, baseLevel) |
| 613 { |
| 614 var level = baseLevel; |
| 615 if (event.stackTrace && WebInspector.experimentsSettings.timelineJSCPUPr
ofile.isEnabled()) { |
| 616 for (var i = event.stackTrace.length - 1; i >= 0; --i) { |
| 617 var payload = /** @type {!WebInspector.TracingModel.EventPayload
} */ ({ |
| 618 ph: WebInspector.TracingModel.Phase.Complete, |
| 619 cat: WebInspector.TracingModel.DevToolsMetadataEventCategory
, |
| 620 name: WebInspector.TracingTimelineModel.RecordType.JSFrame, |
| 621 ts: event.startTime * 1000, |
| 622 dur: event.duration * 1000, |
| 623 args: { |
| 624 data: event.stackTrace[i] |
| 625 } |
| 626 }); |
| 627 var jsFrameEvent = new WebInspector.TracingModel.Event(payload,
0, event.thread); |
| 628 this._appendEvent(jsFrameEvent, level++); |
| 629 } |
| 630 } |
| 631 this._appendEvent(event, level++) |
| 632 return level - baseLevel; |
| 633 }, |
| 634 |
| 635 /** |
| 596 * @param {!WebInspector.TracingTimelineModel.Filter} filter | 636 * @param {!WebInspector.TracingTimelineModel.Filter} filter |
| 597 */ | 637 */ |
| 598 addFilter: function(filter) | 638 addFilter: function(filter) |
| 599 { | 639 { |
| 600 this._filters.push(filter); | 640 this._filters.push(filter); |
| 601 }, | 641 }, |
| 602 | 642 |
| 603 /** | 643 /** |
| 604 * @param {!WebInspector.TracingModel.Event} event | 644 * @param {!WebInspector.TracingModel.Event} event |
| 605 * @return {boolean} | 645 * @return {boolean} |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 653 | 693 |
| 654 /** | 694 /** |
| 655 * @param {number} entryIndex | 695 * @param {number} entryIndex |
| 656 * @return {string} | 696 * @return {string} |
| 657 */ | 697 */ |
| 658 entryColor: function(entryIndex) | 698 entryColor: function(entryIndex) |
| 659 { | 699 { |
| 660 var event = this._entryEvents[entryIndex]; | 700 var event = this._entryEvents[entryIndex]; |
| 661 if (!event) | 701 if (!event) |
| 662 return "#555"; | 702 return "#555"; |
| 703 if (event.name === WebInspector.TracingTimelineModel.RecordType.JSFrame) |
| 704 return WebInspector.TimelineFlameChartDataProvider.jsFrameColorGener
ator().colorForID(event.args.data["functionName"]); |
| 663 var style = WebInspector.TracingTimelineUIUtils.styleForTraceEvent(event
.name); | 705 var style = WebInspector.TracingTimelineUIUtils.styleForTraceEvent(event
.name); |
| 664 return style.category.fillColorStop1; | 706 return style.category.fillColorStop1; |
| 665 }, | 707 }, |
| 666 | 708 |
| 667 /** | 709 /** |
| 668 * @param {number} entryIndex | 710 * @param {number} entryIndex |
| 669 * @param {!CanvasRenderingContext2D} context | 711 * @param {!CanvasRenderingContext2D} context |
| 670 * @param {?string} text | 712 * @param {?string} text |
| 671 * @param {number} barX | 713 * @param {number} barX |
| 672 * @param {number} barY | 714 * @param {number} barY |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 730 * @param {number} entryIndex | 772 * @param {number} entryIndex |
| 731 * @return {?{startTime: number, endTime: number}} | 773 * @return {?{startTime: number, endTime: number}} |
| 732 */ | 774 */ |
| 733 highlightTimeRange: function(entryIndex) | 775 highlightTimeRange: function(entryIndex) |
| 734 { | 776 { |
| 735 var event = this._entryEvents[entryIndex]; | 777 var event = this._entryEvents[entryIndex]; |
| 736 if (!event) | 778 if (!event) |
| 737 return null; | 779 return null; |
| 738 return { | 780 return { |
| 739 startTime: event.startTime, | 781 startTime: event.startTime, |
| 740 endTime: event.endTime | 782 endTime: event.endTime || event.startTime + WebInspector.TracingBase
dTimelineFlameChartDataProvider.InstantEventVisibleDurationMs |
| 741 } | 783 } |
| 742 }, | 784 }, |
| 743 | 785 |
| 744 /** | 786 /** |
| 745 * @return {number} | 787 * @return {number} |
| 746 */ | 788 */ |
| 747 paddingLeft: function() | 789 paddingLeft: function() |
| 748 { | 790 { |
| 749 return 0; | 791 return 0; |
| 750 }, | 792 }, |
| (...skipping 23 matching lines...) Expand all Loading... |
| 774 | 816 |
| 775 /** | 817 /** |
| 776 * @param {!WebInspector.TracingModel.Event} event | 818 * @param {!WebInspector.TracingModel.Event} event |
| 777 * @param {number} level | 819 * @param {number} level |
| 778 */ | 820 */ |
| 779 _appendEvent: function(event, level) | 821 _appendEvent: function(event, level) |
| 780 { | 822 { |
| 781 var index = this._entryEvents.length; | 823 var index = this._entryEvents.length; |
| 782 this._entryEvents.push(event); | 824 this._entryEvents.push(event); |
| 783 this._timelineData.entryLevels[index] = level; | 825 this._timelineData.entryLevels[index] = level; |
| 784 this._timelineData.entryTotalTimes[index] = event.duration || 1; | 826 this._timelineData.entryTotalTimes[index] = event.duration || WebInspect
or.TracingBasedTimelineFlameChartDataProvider.InstantEventVisibleDurationMs; |
| 785 this._timelineData.entryStartTimes[index] = event.startTime; | 827 this._timelineData.entryStartTimes[index] = event.startTime; |
| 786 }, | 828 }, |
| 787 | 829 |
| 788 /** | 830 /** |
| 789 * @param {number} entryIndex | 831 * @param {number} entryIndex |
| 790 * @return {?WebInspector.TimelineSelection} | 832 * @return {?WebInspector.TimelineSelection} |
| 791 */ | 833 */ |
| 792 createSelection: function(entryIndex) | 834 createSelection: function(entryIndex) |
| 793 { | 835 { |
| 794 var event = this._entryEvents[entryIndex]; | 836 var event = this._entryEvents[entryIndex]; |
| (...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1012 * @param {number} entryIndex | 1054 * @param {number} entryIndex |
| 1013 * @return {?WebInspector.TimelineSelection} | 1055 * @return {?WebInspector.TimelineSelection} |
| 1014 */ | 1056 */ |
| 1015 createSelection: function(entryIndex) { }, | 1057 createSelection: function(entryIndex) { }, |
| 1016 /** | 1058 /** |
| 1017 * @param {?WebInspector.TimelineSelection} selection | 1059 * @param {?WebInspector.TimelineSelection} selection |
| 1018 * @return {number} | 1060 * @return {number} |
| 1019 */ | 1061 */ |
| 1020 entryIndexForSelection: function(selection) { } | 1062 entryIndexForSelection: function(selection) { } |
| 1021 } | 1063 } |
| OLD | NEW |