OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 * @constructor | 6 * @constructor |
7 * @extends {WebInspector.TimelineUIUtils} | 7 * @extends {WebInspector.TimelineUIUtils} |
8 */ | 8 */ |
9 WebInspector.TracingTimelineUIUtils = function() | 9 WebInspector.TracingTimelineUIUtils = function() |
10 { | 10 { |
(...skipping 520 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
531 var fragment = document.createDocumentFragment(); | 531 var fragment = document.createDocumentFragment(); |
532 var stats = {}; | 532 var stats = {}; |
533 var hasChildren = WebInspector.TracingTimelineUIUtils._aggregatedStatsForTra
ceEvent(stats, model, event); | 533 var hasChildren = WebInspector.TracingTimelineUIUtils._aggregatedStatsForTra
ceEvent(stats, model, event); |
534 var pieChart = hasChildren ? | 534 var pieChart = hasChildren ? |
535 WebInspector.TimelineUIUtils.generatePieChart(stats, WebInspector.Tracin
gTimelineUIUtils.eventStyle(event).category, event.selfTime) : | 535 WebInspector.TimelineUIUtils.generatePieChart(stats, WebInspector.Tracin
gTimelineUIUtils.eventStyle(event).category, event.selfTime) : |
536 WebInspector.TimelineUIUtils.generatePieChart(stats); | 536 WebInspector.TimelineUIUtils.generatePieChart(stats); |
537 fragment.appendChild(pieChart); | 537 fragment.appendChild(pieChart); |
538 | 538 |
539 var recordTypes = WebInspector.TracingTimelineModel.RecordType; | 539 var recordTypes = WebInspector.TracingTimelineModel.RecordType; |
540 | 540 |
541 // The messages may vary per event.name; | 541 // This message may vary per event.name; |
542 var callSiteStackTraceLabel; | |
543 var callStackLabel; | |
544 var relatedNodeLabel; | 542 var relatedNodeLabel; |
545 | 543 |
546 var contentHelper = new WebInspector.TimelineDetailsContentHelper(event.thre
ad.target(), linkifier, true); | 544 var contentHelper = new WebInspector.TimelineDetailsContentHelper(event.thre
ad.target(), linkifier, true); |
547 contentHelper.appendTextRow(WebInspector.UIString("Self Time"), Number.milli
sToString(event.selfTime, true)); | 545 contentHelper.appendTextRow(WebInspector.UIString("Self Time"), Number.milli
sToString(event.selfTime, true)); |
548 contentHelper.appendTextRow(WebInspector.UIString("Start Time"), Number.mill
isToString((event.startTime - model.minimumRecordTime()))); | 546 contentHelper.appendTextRow(WebInspector.UIString("Start Time"), Number.mill
isToString((event.startTime - model.minimumRecordTime()))); |
549 var eventData = event.args["data"]; | 547 var eventData = event.args["data"]; |
550 var initiator = event.initiator; | 548 var initiator = event.initiator; |
551 | 549 |
552 switch (event.name) { | 550 switch (event.name) { |
553 case recordTypes.GCEvent: | 551 case recordTypes.GCEvent: |
554 var delta = event.args["usedHeapSizeBefore"] - event.args["usedHeapSizeA
fter"]; | 552 var delta = event.args["usedHeapSizeBefore"] - event.args["usedHeapSizeA
fter"]; |
555 contentHelper.appendTextRow(WebInspector.UIString("Collected"), Number.b
ytesToString(delta)); | 553 contentHelper.appendTextRow(WebInspector.UIString("Collected"), Number.b
ytesToString(delta)); |
556 break; | 554 break; |
557 case recordTypes.TimerFire: | 555 case recordTypes.TimerFire: |
558 callSiteStackTraceLabel = WebInspector.UIString("Timer installed"); | |
559 // Fall-through intended. | |
560 | |
561 case recordTypes.TimerInstall: | 556 case recordTypes.TimerInstall: |
562 case recordTypes.TimerRemove: | 557 case recordTypes.TimerRemove: |
563 contentHelper.appendTextRow(WebInspector.UIString("Timer ID"), eventData
["timerId"]); | 558 contentHelper.appendTextRow(WebInspector.UIString("Timer ID"), eventData
["timerId"]); |
564 if (event.name === recordTypes.TimerInstall) { | 559 if (event.name === recordTypes.TimerInstall) { |
565 contentHelper.appendTextRow(WebInspector.UIString("Timeout"), Number
.millisToString(eventData["timeout"])); | 560 contentHelper.appendTextRow(WebInspector.UIString("Timeout"), Number
.millisToString(eventData["timeout"])); |
566 contentHelper.appendTextRow(WebInspector.UIString("Repeats"), !event
Data["singleShot"]); | 561 contentHelper.appendTextRow(WebInspector.UIString("Repeats"), !event
Data["singleShot"]); |
567 } | 562 } |
568 break; | 563 break; |
569 case recordTypes.FireAnimationFrame: | 564 case recordTypes.FireAnimationFrame: |
570 callSiteStackTraceLabel = WebInspector.UIString("Animation frame request
ed"); | |
571 contentHelper.appendTextRow(WebInspector.UIString("Callback ID"), eventD
ata["id"]); | 565 contentHelper.appendTextRow(WebInspector.UIString("Callback ID"), eventD
ata["id"]); |
572 break; | 566 break; |
573 case recordTypes.FunctionCall: | 567 case recordTypes.FunctionCall: |
574 if (eventData["scriptName"]) | 568 if (eventData["scriptName"]) |
575 contentHelper.appendLocationRow(WebInspector.UIString("Location"), e
ventData["scriptName"], eventData["scriptLine"]); | 569 contentHelper.appendLocationRow(WebInspector.UIString("Location"), e
ventData["scriptName"], eventData["scriptLine"]); |
576 break; | 570 break; |
577 case recordTypes.ResourceSendRequest: | 571 case recordTypes.ResourceSendRequest: |
578 case recordTypes.ResourceReceiveResponse: | 572 case recordTypes.ResourceReceiveResponse: |
579 case recordTypes.ResourceReceivedData: | 573 case recordTypes.ResourceReceivedData: |
580 case recordTypes.ResourceFinish: | 574 case recordTypes.ResourceFinish: |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
612 case recordTypes.DecodeLazyPixelRef: | 606 case recordTypes.DecodeLazyPixelRef: |
613 case recordTypes.DecodeImage: | 607 case recordTypes.DecodeImage: |
614 case recordTypes.ResizeImage: | 608 case recordTypes.ResizeImage: |
615 case recordTypes.DrawLazyPixelRef: | 609 case recordTypes.DrawLazyPixelRef: |
616 relatedNodeLabel = WebInspector.UIString("Image element"); | 610 relatedNodeLabel = WebInspector.UIString("Image element"); |
617 if (event.imageURL) | 611 if (event.imageURL) |
618 contentHelper.appendElementRow(WebInspector.UIString("Image URL"), W
ebInspector.linkifyResourceAsNode(event.imageURL)); | 612 contentHelper.appendElementRow(WebInspector.UIString("Image URL"), W
ebInspector.linkifyResourceAsNode(event.imageURL)); |
619 break; | 613 break; |
620 case recordTypes.RecalculateStyles: // We don't want to see default details. | 614 case recordTypes.RecalculateStyles: // We don't want to see default details. |
621 contentHelper.appendTextRow(WebInspector.UIString("Elements affected"),
event.args["elementCount"]); | 615 contentHelper.appendTextRow(WebInspector.UIString("Elements affected"),
event.args["elementCount"]); |
622 callStackLabel = WebInspector.UIString("Styles recalculation forced"); | |
623 break; | 616 break; |
624 case recordTypes.Layout: | 617 case recordTypes.Layout: |
625 var beginData = event.args["beginData"]; | 618 var beginData = event.args["beginData"]; |
626 contentHelper.appendTextRow(WebInspector.UIString("Nodes that need layou
t"), beginData["dirtyObjects"]); | 619 contentHelper.appendTextRow(WebInspector.UIString("Nodes that need layou
t"), beginData["dirtyObjects"]); |
627 contentHelper.appendTextRow(WebInspector.UIString("Layout tree size"), b
eginData["totalObjects"]); | 620 contentHelper.appendTextRow(WebInspector.UIString("Layout tree size"), b
eginData["totalObjects"]); |
628 contentHelper.appendTextRow(WebInspector.UIString("Layout scope"), | 621 contentHelper.appendTextRow(WebInspector.UIString("Layout scope"), |
629 beginData["partialLayout"] ? WebInspector.UI
String("Partial") : WebInspector.UIString("Whole document")); | 622 beginData["partialLayout"] ? WebInspector.UI
String("Partial") : WebInspector.UIString("Whole document")); |
630 callSiteStackTraceLabel = WebInspector.UIString("Layout invalidated"); | |
631 callStackLabel = WebInspector.UIString("Layout forced"); | |
632 relatedNodeLabel = WebInspector.UIString("Layout root"); | 623 relatedNodeLabel = WebInspector.UIString("Layout root"); |
633 break; | 624 break; |
634 case recordTypes.ConsoleTime: | 625 case recordTypes.ConsoleTime: |
635 contentHelper.appendTextRow(WebInspector.UIString("Message"), event.name
); | 626 contentHelper.appendTextRow(WebInspector.UIString("Message"), event.name
); |
636 break; | 627 break; |
637 case recordTypes.WebSocketCreate: | 628 case recordTypes.WebSocketCreate: |
638 case recordTypes.WebSocketSendHandshakeRequest: | 629 case recordTypes.WebSocketSendHandshakeRequest: |
639 case recordTypes.WebSocketReceiveHandshakeResponse: | 630 case recordTypes.WebSocketReceiveHandshakeResponse: |
640 case recordTypes.WebSocketDestroy: | 631 case recordTypes.WebSocketDestroy: |
641 var initiatorData = initiator ? initiator.args["data"] : eventData; | 632 var initiatorData = initiator ? initiator.args["data"] : eventData; |
(...skipping 13 matching lines...) Expand all Loading... |
655 contentHelper.appendElementRow(WebInspector.UIString("Details"), det
ailsNode); | 646 contentHelper.appendElementRow(WebInspector.UIString("Details"), det
ailsNode); |
656 break; | 647 break; |
657 } | 648 } |
658 | 649 |
659 if (relatedNode) | 650 if (relatedNode) |
660 contentHelper.appendElementRow(relatedNodeLabel || WebInspector.UIString
("Related node"), WebInspector.DOMPresentationUtils.linkifyNodeReference(related
Node)); | 651 contentHelper.appendElementRow(relatedNodeLabel || WebInspector.UIString
("Related node"), WebInspector.DOMPresentationUtils.linkifyNodeReference(related
Node)); |
661 | 652 |
662 if (eventData && eventData["scriptName"] && event.name !== recordTypes.Funct
ionCall) | 653 if (eventData && eventData["scriptName"] && event.name !== recordTypes.Funct
ionCall) |
663 contentHelper.appendLocationRow(WebInspector.UIString("Function Call"),
eventData["scriptName"], eventData["scriptLine"]); | 654 contentHelper.appendLocationRow(WebInspector.UIString("Function Call"),
eventData["scriptName"], eventData["scriptLine"]); |
664 | 655 |
665 if (initiator) { | |
666 var callSiteStackTrace = initiator.stackTrace; | |
667 if (callSiteStackTrace) | |
668 contentHelper.appendStackTrace(callSiteStackTraceLabel || WebInspect
or.UIString("Call Site stack"), callSiteStackTrace); | |
669 } | |
670 var eventStackTrace = event.stackTrace; | |
671 if (eventStackTrace) | |
672 contentHelper.appendStackTrace(callStackLabel || WebInspector.UIString("
Call Stack"), eventStackTrace); | |
673 | |
674 var warning = event.warning; | 656 var warning = event.warning; |
675 if (warning) { | 657 if (warning) { |
676 var div = document.createElement("div"); | 658 var div = document.createElement("div"); |
677 div.textContent = warning; | 659 div.textContent = warning; |
678 contentHelper.appendElementRow(WebInspector.UIString("Warning"), div); | 660 contentHelper.appendElementRow(WebInspector.UIString("Warning"), div); |
679 } | 661 } |
680 if (event.previewElement) | 662 if (event.previewElement) |
681 contentHelper.appendElementRow(WebInspector.UIString("Preview"), event.p
reviewElement); | 663 contentHelper.appendElementRow(WebInspector.UIString("Preview"), event.p
reviewElement); |
| 664 |
| 665 if (event.stackTrace || (event.initiator && event.initiator.stackTrace)) |
| 666 WebInspector.TracingTimelineUIUtils._generateCauses(event, contentHelper
); |
| 667 |
682 fragment.appendChild(contentHelper.element); | 668 fragment.appendChild(contentHelper.element); |
683 return fragment; | 669 return fragment; |
684 } | 670 } |
685 | 671 |
686 /** | 672 /** |
| 673 * @param {!WebInspector.TracingModel.Event} event |
| 674 * @param {!WebInspector.TimelineDetailsContentHelper} contentHelper |
| 675 */ |
| 676 WebInspector.TracingTimelineUIUtils._generateCauses = function(event, contentHel
per) |
| 677 { |
| 678 var recordTypes = WebInspector.TracingTimelineModel.RecordType; |
| 679 |
| 680 var callSiteStackLabel; |
| 681 var stackLabel; |
| 682 |
| 683 switch (event.name) { |
| 684 case recordTypes.TimerFire: |
| 685 callSiteStackLabel = WebInspector.UIString("Timer installed"); |
| 686 break; |
| 687 case recordTypes.FireAnimationFrame: |
| 688 callSiteStackLabel = WebInspector.UIString("Animation frame requested"); |
| 689 break; |
| 690 case recordTypes.RecalculateStyles: |
| 691 stackLabel = WebInspector.UIString("Stack when style recalculation was f
orced"); |
| 692 break; |
| 693 case recordTypes.Layout: |
| 694 callSiteStackLabel = WebInspector.UIString("First layout invalidation"); |
| 695 stackLabel = WebInspector.UIString("Stack when layout was forced"); |
| 696 break; |
| 697 } |
| 698 |
| 699 // Direct cause. |
| 700 if (event.stackTrace) |
| 701 contentHelper.appendStackTrace(stackLabel || WebInspector.UIString("Stac
k when this event occurred"), event.stackTrace); |
| 702 |
| 703 // Indirect cause / invalidation. |
| 704 var initiator = event.initiator; |
| 705 if (initiator && initiator.stackTrace) |
| 706 contentHelper.appendStackTrace(callSiteStackLabel || WebInspector.UIStri
ng("Stack when first invalidated"), initiator.stackTrace); |
| 707 } |
| 708 |
| 709 /** |
687 * @param {!Object} total | 710 * @param {!Object} total |
688 * @param {!WebInspector.TracingTimelineModel} model | 711 * @param {!WebInspector.TracingTimelineModel} model |
689 * @param {!WebInspector.TracingModel.Event} event | 712 * @param {!WebInspector.TracingModel.Event} event |
690 * @return {boolean} | 713 * @return {boolean} |
691 */ | 714 */ |
692 WebInspector.TracingTimelineUIUtils._aggregatedStatsForTraceEvent = function(tot
al, model, event) | 715 WebInspector.TracingTimelineUIUtils._aggregatedStatsForTraceEvent = function(tot
al, model, event) |
693 { | 716 { |
694 var events = model.inspectedTargetEvents(); | 717 var events = model.inspectedTargetEvents(); |
695 /** | 718 /** |
696 * @param {number} startTime | 719 * @param {number} startTime |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
812 return result; | 835 return result; |
813 } | 836 } |
814 | 837 |
815 /** | 838 /** |
816 * @return {!WebInspector.TracingTimelineModel.Filter} | 839 * @return {!WebInspector.TracingTimelineModel.Filter} |
817 */ | 840 */ |
818 WebInspector.TracingTimelineUIUtils.hiddenEventsFilter = function() | 841 WebInspector.TracingTimelineUIUtils.hiddenEventsFilter = function() |
819 { | 842 { |
820 return new WebInspector.TracingTimelineModel.InclusiveEventNameFilter(WebIns
pector.TracingTimelineUIUtils._visibleTypes()); | 843 return new WebInspector.TracingTimelineModel.InclusiveEventNameFilter(WebIns
pector.TracingTimelineUIUtils._visibleTypes()); |
821 } | 844 } |
OLD | NEW |