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 |