Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 Google Inc. All rights reserved. |
| 3 * Copyright (C) 2012 Intel Inc. All rights reserved. | 3 * Copyright (C) 2012 Intel Inc. All rights reserved. |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions are | 6 * modification, are permitted provided that the following conditions are |
| 7 * met: | 7 * met: |
| 8 * | 8 * |
| 9 * * Redistributions of source code must retain the above copyright | 9 * * Redistributions of source code must retain the above copyright |
| 10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
| (...skipping 563 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 574 /** | 574 /** |
| 575 * @param {!WebInspector.TracingModel.Event} event | 575 * @param {!WebInspector.TracingModel.Event} event |
| 576 * @param {!WebInspector.TimelineModel} model | 576 * @param {!WebInspector.TimelineModel} model |
| 577 * @param {!WebInspector.Linkifier} linkifier | 577 * @param {!WebInspector.Linkifier} linkifier |
| 578 * @param {boolean} detailed | 578 * @param {boolean} detailed |
| 579 * @param {?Map<number, ?WebInspector.DOMNode>} relatedNodesMap | 579 * @param {?Map<number, ?WebInspector.DOMNode>} relatedNodesMap |
| 580 * @return {!DocumentFragment} | 580 * @return {!DocumentFragment} |
| 581 */ | 581 */ |
| 582 WebInspector.TimelineUIUtils._buildTraceEventDetailsSynchronously = function(eve nt, model, linkifier, detailed, relatedNodesMap) | 582 WebInspector.TimelineUIUtils._buildTraceEventDetailsSynchronously = function(eve nt, model, linkifier, detailed, relatedNodesMap) |
| 583 { | 583 { |
| 584 var fragment = createDocumentFragment(); | |
| 585 var stats = {}; | 584 var stats = {}; |
| 586 var recordTypes = WebInspector.TimelineModel.RecordType; | 585 var recordTypes = WebInspector.TimelineModel.RecordType; |
| 587 | 586 |
| 588 // This message may vary per event.name; | 587 // This message may vary per event.name; |
| 589 var relatedNodeLabel; | 588 var relatedNodeLabel; |
| 590 | 589 |
| 591 var contentHelper = new WebInspector.TimelineDetailsContentHelper(model.targ et(), linkifier, relatedNodesMap, false); | 590 var contentHelper = new WebInspector.TimelineDetailsContentHelper(model.targ et(), linkifier, relatedNodesMap); |
| 592 | 591 contentHelper.addSection(WebInspector.TimelineUIUtils.eventTitle(event), Web Inspector.TimelineUIUtils.eventStyle(event).category); |
| 593 if (event.warning) | |
| 594 contentHelper.appendWarningRow(event); | |
| 595 | |
| 596 if (detailed) { | |
| 597 contentHelper.appendTextRow(WebInspector.UIString("Type"), WebInspector. TimelineUIUtils.eventTitle(event)); | |
| 598 contentHelper.appendTextRow(WebInspector.UIString("Total Time"), Number. millisToString(event.duration || 0, true)); | |
| 599 contentHelper.appendTextRow(WebInspector.UIString("Self Time"), Number.m illisToString(event.selfTime, true)); | |
| 600 } | |
| 601 if (event.previewElement) | |
| 602 contentHelper.appendElementRow(WebInspector.UIString("Preview"), event.p reviewElement); | |
| 603 | 592 |
| 604 var eventData = event.args["data"]; | 593 var eventData = event.args["data"]; |
| 605 var initiator = event.initiator; | 594 var initiator = event.initiator; |
| 606 | 595 |
| 596 if (event.warning) | |
| 597 contentHelper.appendWarningRow(event); | |
| 598 if (event.name === recordTypes.JSFrame) { | |
| 599 var deoptReason = eventData["deoptReason"]; | |
| 600 if (deoptReason && deoptReason != "no reason") | |
| 601 contentHelper.appendWarningRow(event, WebInspector.TimelineModel.War ningType.V8Deopt); | |
| 602 } | |
| 603 | |
| 604 if (detailed) { | |
| 605 contentHelper.appendTextRow(WebInspector.UIString("Self Time"), Number.m illisToString(event.selfTime, true)); | |
| 606 contentHelper.appendTextRow(WebInspector.UIString("Total Time"), Number. millisToString(event.duration || 0, true)); | |
| 607 } | |
| 608 | |
| 607 switch (event.name) { | 609 switch (event.name) { |
| 608 case recordTypes.GCEvent: | 610 case recordTypes.GCEvent: |
| 609 case recordTypes.MajorGC: | 611 case recordTypes.MajorGC: |
| 610 case recordTypes.MinorGC: | 612 case recordTypes.MinorGC: |
| 611 var delta = event.args["usedHeapSizeBefore"] - event.args["usedHeapSizeA fter"]; | 613 var delta = event.args["usedHeapSizeBefore"] - event.args["usedHeapSizeA fter"]; |
| 612 contentHelper.appendTextRow(WebInspector.UIString("Collected"), Number.b ytesToString(delta)); | 614 contentHelper.appendTextRow(WebInspector.UIString("Collected"), Number.b ytesToString(delta)); |
| 613 break; | 615 break; |
| 614 case recordTypes.JSFrame: | 616 case recordTypes.JSFrame: |
| 615 var detailsNode = WebInspector.TimelineUIUtils.buildDetailsNodeForTraceE vent(event, model.target(), linkifier); | 617 var detailsNode = WebInspector.TimelineUIUtils.buildDetailsNodeForTraceE vent(event, model.target(), linkifier); |
| 616 if (detailsNode) | 618 if (detailsNode) |
| 617 contentHelper.appendElementRow(WebInspector.UIString("Function"), de tailsNode); | 619 contentHelper.appendElementRow(WebInspector.UIString("Function"), de tailsNode); |
| 618 var deoptReason = eventData["deoptReason"]; | |
| 619 if (deoptReason && deoptReason != "no reason") | |
| 620 contentHelper.appendWarningRow(event, WebInspector.TimelineModel.War ningType.V8Deopt); | |
| 621 break; | 620 break; |
| 622 case recordTypes.TimerFire: | 621 case recordTypes.TimerFire: |
| 623 case recordTypes.TimerInstall: | 622 case recordTypes.TimerInstall: |
| 624 case recordTypes.TimerRemove: | 623 case recordTypes.TimerRemove: |
| 625 contentHelper.appendTextRow(WebInspector.UIString("Timer ID"), eventData ["timerId"]); | 624 contentHelper.appendTextRow(WebInspector.UIString("Timer ID"), eventData ["timerId"]); |
| 626 if (event.name === recordTypes.TimerInstall) { | 625 if (event.name === recordTypes.TimerInstall) { |
| 627 contentHelper.appendTextRow(WebInspector.UIString("Timeout"), Number .millisToString(eventData["timeout"])); | 626 contentHelper.appendTextRow(WebInspector.UIString("Timeout"), Number .millisToString(eventData["timeout"])); |
| 628 contentHelper.appendTextRow(WebInspector.UIString("Repeats"), !event Data["singleShot"]); | 627 contentHelper.appendTextRow(WebInspector.UIString("Repeats"), !event Data["singleShot"]); |
| 629 } | 628 } |
| 630 break; | 629 break; |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 688 if (url) | 687 if (url) |
| 689 contentHelper.appendElementRow(WebInspector.UIString("Stylesheet URL "), WebInspector.linkifyResourceAsNode(url)); | 688 contentHelper.appendElementRow(WebInspector.UIString("Stylesheet URL "), WebInspector.linkifyResourceAsNode(url)); |
| 690 break; | 689 break; |
| 691 case recordTypes.UpdateLayoutTree: // We don't want to see default details. | 690 case recordTypes.UpdateLayoutTree: // We don't want to see default details. |
| 692 case recordTypes.RecalculateStyles: | 691 case recordTypes.RecalculateStyles: |
| 693 contentHelper.appendTextRow(WebInspector.UIString("Elements Affected"), event.args["elementCount"]); | 692 contentHelper.appendTextRow(WebInspector.UIString("Elements Affected"), event.args["elementCount"]); |
| 694 break; | 693 break; |
| 695 case recordTypes.Layout: | 694 case recordTypes.Layout: |
| 696 var beginData = event.args["beginData"]; | 695 var beginData = event.args["beginData"]; |
| 697 contentHelper.appendTextRow(WebInspector.UIString("Nodes That Need Layou t"), beginData["dirtyObjects"]); | 696 contentHelper.appendTextRow(WebInspector.UIString("Nodes That Need Layou t"), beginData["dirtyObjects"]); |
| 698 contentHelper.appendTextRow(WebInspector.UIString("Layout Tree Size"), b eginData["totalObjects"]); | |
| 699 contentHelper.appendTextRow(WebInspector.UIString("Layout Scope"), | |
| 700 beginData["partialLayout"] ? WebInspector.UI String("Partial") : WebInspector.UIString("Whole document")); | |
| 701 relatedNodeLabel = WebInspector.UIString("Layout root"); | 697 relatedNodeLabel = WebInspector.UIString("Layout root"); |
| 702 break; | 698 break; |
| 703 case recordTypes.ConsoleTime: | 699 case recordTypes.ConsoleTime: |
| 704 contentHelper.appendTextRow(WebInspector.UIString("Message"), event.name ); | 700 contentHelper.appendTextRow(WebInspector.UIString("Message"), event.name ); |
| 705 break; | 701 break; |
| 706 case recordTypes.WebSocketCreate: | 702 case recordTypes.WebSocketCreate: |
| 707 case recordTypes.WebSocketSendHandshakeRequest: | 703 case recordTypes.WebSocketSendHandshakeRequest: |
| 708 case recordTypes.WebSocketReceiveHandshakeResponse: | 704 case recordTypes.WebSocketReceiveHandshakeResponse: |
| 709 case recordTypes.WebSocketDestroy: | 705 case recordTypes.WebSocketDestroy: |
| 710 var initiatorData = initiator ? initiator.args["data"] : eventData; | 706 var initiatorData = initiator ? initiator.args["data"] : eventData; |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 744 contentHelper.appendTextRow(WebInspector.UIString("Type"), eventData["ty pe"]); | 740 contentHelper.appendTextRow(WebInspector.UIString("Type"), eventData["ty pe"]); |
| 745 break; | 741 break; |
| 746 | 742 |
| 747 default: | 743 default: |
| 748 var detailsNode = WebInspector.TimelineUIUtils.buildDetailsNodeForTraceE vent(event, model.target(), linkifier); | 744 var detailsNode = WebInspector.TimelineUIUtils.buildDetailsNodeForTraceE vent(event, model.target(), linkifier); |
| 749 if (detailsNode) | 745 if (detailsNode) |
| 750 contentHelper.appendElementRow(WebInspector.UIString("Details"), det ailsNode); | 746 contentHelper.appendElementRow(WebInspector.UIString("Details"), det ailsNode); |
| 751 break; | 747 break; |
| 752 } | 748 } |
| 753 | 749 |
| 750 if (event.previewElement) { | |
| 751 contentHelper.addSection(); | |
| 752 contentHelper.appendElementRow(WebInspector.UIString("Preview"), event.p reviewElement); | |
| 753 } | |
| 754 | |
| 754 var relatedNode = contentHelper.nodeForBackendId(event.backendNodeId); | 755 var relatedNode = contentHelper.nodeForBackendId(event.backendNodeId); |
| 755 if (relatedNode) | 756 if (relatedNode) |
| 756 contentHelper.appendElementRow(relatedNodeLabel || WebInspector.UIString ("Related Node"), WebInspector.DOMPresentationUtils.linkifyNodeReference(related Node)); | 757 contentHelper.appendElementRow(relatedNodeLabel || WebInspector.UIString ("Related Node"), WebInspector.DOMPresentationUtils.linkifyNodeReference(related Node)); |
|
caseq
2015/12/09 02:28:15
So this will go into the same section with preview
| |
| 757 | 758 |
| 758 if (eventData && eventData["scriptName"] && event.name !== recordTypes.Funct ionCall) | 759 if (eventData && eventData["scriptName"] && event.name !== recordTypes.Funct ionCall) { |
| 760 contentHelper.addSection(); | |
| 759 contentHelper.appendLocationRow(WebInspector.UIString("Function Call"), eventData["scriptName"], eventData["scriptLine"]); | 761 contentHelper.appendLocationRow(WebInspector.UIString("Function Call"), eventData["scriptName"], eventData["scriptLine"]); |
| 762 } | |
| 760 | 763 |
| 761 if (event.stackTrace || (event.initiator && event.initiator.stackTrace) || e vent.invalidationTrackingEvents) | 764 if (event.stackTrace || (event.initiator && event.initiator.stackTrace) || e vent.invalidationTrackingEvents) { |
|
alph
2015/12/09 02:51:56
drop {}
| |
| 762 WebInspector.TimelineUIUtils._generateCauses(event, model.target(), cont entHelper); | 765 WebInspector.TimelineUIUtils._generateCauses(event, model.target(), cont entHelper); |
| 766 } | |
| 763 | 767 |
| 764 var showPieChart = detailed && WebInspector.TimelineUIUtils._aggregatedStats ForTraceEvent(stats, model, event); | 768 var showPieChart = detailed && WebInspector.TimelineUIUtils._aggregatedStats ForTraceEvent(stats, model, event); |
| 765 if (showPieChart) { | 769 if (showPieChart) { |
| 770 contentHelper.addSection(WebInspector.UIString("Aggregated Time")); | |
|
alph
2015/12/09 02:51:56
could you turn it into the element name?
| |
| 766 var pieChart = WebInspector.TimelineUIUtils.generatePieChart(stats, WebI nspector.TimelineUIUtils.eventStyle(event).category, event.selfTime); | 771 var pieChart = WebInspector.TimelineUIUtils.generatePieChart(stats, WebI nspector.TimelineUIUtils.eventStyle(event).category, event.selfTime); |
| 767 contentHelper.appendElementRow(WebInspector.UIString("Aggregated Time"), pieChart); | 772 contentHelper.appendElementRow("", pieChart); |
| 768 } | 773 } |
| 769 | 774 |
| 770 fragment.appendChild(contentHelper.element); | 775 return contentHelper.fragment; |
| 771 | |
| 772 return fragment; | |
| 773 } | 776 } |
| 774 | 777 |
| 775 WebInspector.TimelineUIUtils._aggregatedStatsKey = Symbol("aggregatedStats"); | 778 WebInspector.TimelineUIUtils._aggregatedStatsKey = Symbol("aggregatedStats"); |
| 776 | 779 |
| 777 /** | 780 /** |
| 778 * @param {!WebInspector.TimelineModel} model | 781 * @param {!WebInspector.TimelineModel} model |
| 779 * @param {number} startTime | 782 * @param {number} startTime |
| 780 * @param {number} endTime | 783 * @param {number} endTime |
| 781 * @return {!Element} | 784 * @return {!DocumentFragment} |
| 782 */ | 785 */ |
| 783 WebInspector.TimelineUIUtils.buildRangeStats = function(model, startTime, endTim e) | 786 WebInspector.TimelineUIUtils.buildRangeStats = function(model, startTime, endTim e) |
| 784 { | 787 { |
| 785 var aggregatedStats = {}; | 788 var aggregatedStats = {}; |
| 786 | 789 |
| 787 /** | 790 /** |
| 788 * @param {number} value | 791 * @param {number} value |
| 789 * @param {!WebInspector.TimelineModel.Record} task | 792 * @param {!WebInspector.TimelineModel.Record} task |
| 790 * @return {number} | 793 * @return {number} |
| 791 */ | 794 */ |
| (...skipping 20 matching lines...) Expand all Loading... | |
| 812 continue; | 815 continue; |
| 813 } | 816 } |
| 814 WebInspector.TimelineUIUtils._collectAggregatedStatsForRecord(task, star tTime, endTime, aggregatedStats); | 817 WebInspector.TimelineUIUtils._collectAggregatedStatsForRecord(task, star tTime, endTime, aggregatedStats); |
| 815 } | 818 } |
| 816 | 819 |
| 817 var aggregatedTotal = 0; | 820 var aggregatedTotal = 0; |
| 818 for (var categoryName in aggregatedStats) | 821 for (var categoryName in aggregatedStats) |
| 819 aggregatedTotal += aggregatedStats[categoryName]; | 822 aggregatedTotal += aggregatedStats[categoryName]; |
| 820 aggregatedStats["idle"] = Math.max(0, endTime - startTime - aggregatedTotal) ; | 823 aggregatedStats["idle"] = Math.max(0, endTime - startTime - aggregatedTotal) ; |
| 821 | 824 |
| 822 var contentHelper = new WebInspector.TimelineDetailsContentHelper(null, null , null, false); | |
| 823 var pieChart = WebInspector.TimelineUIUtils.generatePieChart(aggregatedStats ); | |
| 824 | |
| 825 var startOffset = startTime - model.minimumRecordTime(); | 825 var startOffset = startTime - model.minimumRecordTime(); |
| 826 var endOffset = endTime - model.minimumRecordTime(); | 826 var endOffset = endTime - model.minimumRecordTime(); |
| 827 contentHelper.appendTextRow(WebInspector.UIString("Range"), WebInspector.UIS tring("%s \u2013 %s", Number.millisToString(startOffset), Number.millisToString( endOffset))); | |
| 828 contentHelper.appendElementRow(WebInspector.UIString("Aggregated Time"), pie Chart); | |
| 829 | 827 |
| 830 return contentHelper.element; | 828 var contentHelper = new WebInspector.TimelineDetailsContentHelper(null, null , null); |
| 829 contentHelper.addSection(WebInspector.UIString("Range: %s \u2013 %s", Numbe r.millisToString(startOffset), Number.millisToString(endOffset))); | |
| 830 var pieChart = WebInspector.TimelineUIUtils.generatePieChart(aggregatedStats ); | |
| 831 contentHelper.appendElementRow("", pieChart); | |
| 832 return contentHelper.fragment; | |
| 831 } | 833 } |
| 832 | 834 |
| 833 /** | 835 /** |
| 834 * @param {!WebInspector.TimelineModel.Record} record | 836 * @param {!WebInspector.TimelineModel.Record} record |
| 835 * @param {number} startTime | 837 * @param {number} startTime |
| 836 * @param {number} endTime | 838 * @param {number} endTime |
| 837 * @param {!Object} aggregatedStats | 839 * @param {!Object} aggregatedStats |
| 838 */ | 840 */ |
| 839 WebInspector.TimelineUIUtils._collectAggregatedStatsForRecord = function(record, startTime, endTime, aggregatedStats) | 841 WebInspector.TimelineUIUtils._collectAggregatedStatsForRecord = function(record, startTime, endTime, aggregatedStats) |
| 840 { | 842 { |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 881 } | 883 } |
| 882 | 884 |
| 883 /** | 885 /** |
| 884 * @param {!WebInspector.TimelineModel.NetworkRequest} request | 886 * @param {!WebInspector.TimelineModel.NetworkRequest} request |
| 885 * @param {!WebInspector.TimelineModel} model | 887 * @param {!WebInspector.TimelineModel} model |
| 886 * @param {!WebInspector.Linkifier} linkifier | 888 * @param {!WebInspector.Linkifier} linkifier |
| 887 * @return {!Promise<!DocumentFragment>} | 889 * @return {!Promise<!DocumentFragment>} |
| 888 */ | 890 */ |
| 889 WebInspector.TimelineUIUtils.buildNetworkRequestDetails = function(request, mode l, linkifier) | 891 WebInspector.TimelineUIUtils.buildNetworkRequestDetails = function(request, mode l, linkifier) |
| 890 { | 892 { |
| 891 var fragment = createDocumentFragment(); | |
| 892 var target = model.target(); | 893 var target = model.target(); |
| 893 var contentHelper = new WebInspector.TimelineDetailsContentHelper(target, li nkifier, null, true); | 894 var contentHelper = new WebInspector.TimelineDetailsContentHelper(target, li nkifier, null); |
| 894 | 895 |
| 895 var info = WebInspector.TimelineUIUtils.buildNetworkRequestInfo(request); | 896 var info = WebInspector.TimelineUIUtils.buildNetworkRequestInfo(request); |
| 896 for (var item of info) { | 897 for (var item of info) { |
| 897 if (typeof item.value === "string") | 898 if (typeof item.value === "string") |
| 898 contentHelper.appendTextRow(item.title, item.value); | 899 contentHelper.appendTextRow(item.title, item.value); |
| 899 else | 900 else |
| 900 contentHelper.appendElementRow(item.title, item.value); | 901 contentHelper.appendElementRow(item.title, item.value); |
| 901 } | 902 } |
| 902 | 903 |
| 903 /** | 904 /** |
| (...skipping 17 matching lines...) Expand all Loading... | |
| 921 else | 922 else |
| 922 previewPromise = request.url && target ? new Promise(action) : Promise.r esolve(null); | 923 previewPromise = request.url && target ? new Promise(action) : Promise.r esolve(null); |
| 923 /** | 924 /** |
| 924 * @param {?Element} element | 925 * @param {?Element} element |
| 925 * @return {!DocumentFragment} | 926 * @return {!DocumentFragment} |
| 926 */ | 927 */ |
| 927 function appendPreview(element) | 928 function appendPreview(element) |
| 928 { | 929 { |
| 929 if (element) | 930 if (element) |
| 930 contentHelper.appendElementRow(WebInspector.UIString("Preview"), req uest.previewElement); | 931 contentHelper.appendElementRow(WebInspector.UIString("Preview"), req uest.previewElement); |
| 931 fragment.appendChild(contentHelper.element); | 932 return contentHelper.fragment; |
| 932 return fragment; | |
| 933 } | 933 } |
| 934 return previewPromise.then(appendPreview); | 934 return previewPromise.then(appendPreview); |
| 935 } | 935 } |
| 936 | 936 |
| 937 /** | 937 /** |
| 938 * @param {!WebInspector.TracingModel.Event} event | 938 * @param {!WebInspector.TracingModel.Event} event |
| 939 * @param {?WebInspector.Target} target | 939 * @param {?WebInspector.Target} target |
| 940 * @param {!WebInspector.TimelineDetailsContentHelper} contentHelper | 940 * @param {!WebInspector.TimelineDetailsContentHelper} contentHelper |
| 941 */ | 941 */ |
| 942 WebInspector.TimelineUIUtils._generateCauses = function(event, target, contentHe lper) | 942 WebInspector.TimelineUIUtils._generateCauses = function(event, target, contentHe lper) |
| (...skipping 18 matching lines...) Expand all Loading... | |
| 961 case recordTypes.RecalculateStyles: | 961 case recordTypes.RecalculateStyles: |
| 962 stackLabel = WebInspector.UIString("Recalculation Forced"); | 962 stackLabel = WebInspector.UIString("Recalculation Forced"); |
| 963 break; | 963 break; |
| 964 case recordTypes.Layout: | 964 case recordTypes.Layout: |
| 965 callSiteStackLabel = WebInspector.UIString("First Layout Invalidation"); | 965 callSiteStackLabel = WebInspector.UIString("First Layout Invalidation"); |
| 966 stackLabel = WebInspector.UIString("Layout Forced"); | 966 stackLabel = WebInspector.UIString("Layout Forced"); |
| 967 break; | 967 break; |
| 968 } | 968 } |
| 969 | 969 |
| 970 // Direct cause. | 970 // Direct cause. |
| 971 if (event.stackTrace) | 971 if (event.stackTrace && event.stackTrace.length) { |
| 972 contentHelper.addSection(WebInspector.UIString("Call Stacks")); | |
| 972 contentHelper.appendStackTrace(stackLabel || WebInspector.UIString("Stac k Trace"), event.stackTrace); | 973 contentHelper.appendStackTrace(stackLabel || WebInspector.UIString("Stac k Trace"), event.stackTrace); |
|
alph
2015/12/09 02:51:56
Two titles "call stacks" and "stack trace" look st
| |
| 974 } | |
| 973 | 975 |
| 974 // Indirect causes. | 976 // Indirect causes. |
| 975 if (event.invalidationTrackingEvents && target) { // Full invalidation track ing (experimental). | 977 if (event.invalidationTrackingEvents && target) { // Full invalidation track ing (experimental). |
| 976 WebInspector.TimelineUIUtils._generateInvalidations(event, target, conte ntHelper); | 978 WebInspector.TimelineUIUtils._generateInvalidations(event, target, conte ntHelper); |
| 977 } else if (initiator && initiator.stackTrace) { // Partial invalidation trac king. | 979 } else if (initiator && initiator.stackTrace) { // Partial invalidation trac king. |
| 978 contentHelper.appendStackTrace(callSiteStackLabel || WebInspector.UIStri ng("First Invalidated"), initiator.stackTrace); | 980 contentHelper.appendStackTrace(callSiteStackLabel || WebInspector.UIStri ng("First Invalidated"), initiator.stackTrace); |
| 979 } | 981 } |
| 980 } | 982 } |
| 981 | 983 |
| 982 /** | 984 /** |
| (...skipping 557 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1540 | 1542 |
| 1541 /** | 1543 /** |
| 1542 * @param {!WebInspector.TimelineFrameModelBase} frameModel | 1544 * @param {!WebInspector.TimelineFrameModelBase} frameModel |
| 1543 * @param {!WebInspector.TimelineFrame} frame | 1545 * @param {!WebInspector.TimelineFrame} frame |
| 1544 * @param {?WebInspector.FilmStripModel.Frame} filmStripFrame | 1546 * @param {?WebInspector.FilmStripModel.Frame} filmStripFrame |
| 1545 * @return {!Element} | 1547 * @return {!Element} |
| 1546 */ | 1548 */ |
| 1547 WebInspector.TimelineUIUtils.generateDetailsContentForFrame = function(frameMode l, frame, filmStripFrame) | 1549 WebInspector.TimelineUIUtils.generateDetailsContentForFrame = function(frameMode l, frame, filmStripFrame) |
| 1548 { | 1550 { |
| 1549 var pieChart = WebInspector.TimelineUIUtils.generatePieChart(frame.timeByCat egory); | 1551 var pieChart = WebInspector.TimelineUIUtils.generatePieChart(frame.timeByCat egory); |
| 1550 var contentHelper = new WebInspector.TimelineDetailsContentHelper(null, null , null, false); | 1552 var contentHelper = new WebInspector.TimelineDetailsContentHelper(null, null , null); |
| 1553 contentHelper.addSection(WebInspector.UIString("Frame")); | |
| 1554 | |
| 1551 var duration = WebInspector.TimelineUIUtils.frameDuration(frame); | 1555 var duration = WebInspector.TimelineUIUtils.frameDuration(frame); |
| 1552 contentHelper.appendElementRow(WebInspector.UIString("Duration"), duration, frame.hasWarnings()); | 1556 contentHelper.appendElementRow(WebInspector.UIString("Duration"), duration, frame.hasWarnings()); |
| 1553 if (filmStripFrame) { | 1557 if (filmStripFrame) { |
| 1554 var filmStripPreview = createElementWithClass("img", "timeline-filmstrip -preview"); | 1558 var filmStripPreview = createElementWithClass("img", "timeline-filmstrip -preview"); |
| 1555 filmStripFrame.imageDataPromise().then(onGotImageData.bind(null, filmStr ipPreview)); | 1559 filmStripFrame.imageDataPromise().then(onGotImageData.bind(null, filmStr ipPreview)); |
| 1556 contentHelper.appendElementRow(WebInspector.UIString("Screenshot"), film StripPreview); | 1560 contentHelper.appendElementRow("", filmStripPreview); |
| 1557 filmStripPreview.addEventListener("click", frameClicked.bind(null, filmS tripFrame), false); | 1561 filmStripPreview.addEventListener("click", frameClicked.bind(null, filmS tripFrame), false); |
| 1558 } | 1562 } |
| 1559 var durationInMillis = frame.endTime - frame.startTime; | 1563 var durationInMillis = frame.endTime - frame.startTime; |
| 1560 contentHelper.appendTextRow(WebInspector.UIString("FPS"), Math.floor(1000 / durationInMillis)); | 1564 contentHelper.appendTextRow(WebInspector.UIString("FPS"), Math.floor(1000 / durationInMillis)); |
| 1561 contentHelper.appendTextRow(WebInspector.UIString("CPU time"), Number.millis ToString(frame.cpuTime, true)); | 1565 contentHelper.appendTextRow(WebInspector.UIString("CPU time"), Number.millis ToString(frame.cpuTime, true)); |
| 1562 contentHelper.appendElementRow(WebInspector.UIString("Aggregated Time"), pie Chart); | 1566 |
| 1563 if (Runtime.experiments.isEnabled("layersPanel") && frame.layerTree) { | 1567 if (Runtime.experiments.isEnabled("layersPanel") && frame.layerTree) { |
| 1564 contentHelper.appendElementRow(WebInspector.UIString("Layer tree"), | 1568 contentHelper.appendElementRow(WebInspector.UIString("Layer tree"), |
| 1565 WebInspector.Linkifier.linkifyUsingReveal er(frame.layerTree, WebInspector.UIString("show"))); | 1569 WebInspector.Linkifier.linkifyUsingReveal er(frame.layerTree, WebInspector.UIString("show"))); |
| 1566 } | 1570 } |
| 1567 | 1571 |
| 1568 /** | 1572 /** |
| 1569 * @param {!Element} image | 1573 * @param {!Element} image |
| 1570 * @param {?string} data | 1574 * @param {?string} data |
| 1571 */ | 1575 */ |
| 1572 function onGotImageData(image, data) | 1576 function onGotImageData(image, data) |
| 1573 { | 1577 { |
| 1574 if (data) | 1578 if (data) |
| 1575 image.src = "data:image/jpg;base64," + data; | 1579 image.src = "data:image/jpg;base64," + data; |
| 1576 } | 1580 } |
| 1577 | 1581 |
| 1578 /** | 1582 /** |
| 1579 * @param {!WebInspector.FilmStripModel.Frame} filmStripFrame | 1583 * @param {!WebInspector.FilmStripModel.Frame} filmStripFrame |
| 1580 */ | 1584 */ |
| 1581 function frameClicked(filmStripFrame) | 1585 function frameClicked(filmStripFrame) |
| 1582 { | 1586 { |
| 1583 new WebInspector.FilmStripView.Dialog(filmStripFrame, 0); | 1587 new WebInspector.FilmStripView.Dialog(filmStripFrame, 0); |
| 1584 } | 1588 } |
| 1585 | 1589 |
| 1586 return contentHelper.element; | 1590 return contentHelper.fragment; |
| 1587 } | 1591 } |
| 1588 | 1592 |
| 1589 /** | 1593 /** |
| 1590 * @param {!WebInspector.TimelineFrame} frame | 1594 * @param {!WebInspector.TimelineFrame} frame |
| 1591 * @return {!Element} | 1595 * @return {!Element} |
| 1592 */ | 1596 */ |
| 1593 WebInspector.TimelineUIUtils.frameDuration = function(frame) | 1597 WebInspector.TimelineUIUtils.frameDuration = function(frame) |
| 1594 { | 1598 { |
| 1595 var durationText = WebInspector.UIString("%s (at %s)", Number.millisToString (frame.endTime - frame.startTime, true), | 1599 var durationText = WebInspector.UIString("%s (at %s)", Number.millisToString (frame.endTime - frame.startTime, true), |
| 1596 Number.millisToString(frame.startTimeOffset, true)); | 1600 Number.millisToString(frame.startTimeOffset, true)); |
| (...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1916 row.appendChild(cell); | 1920 row.appendChild(cell); |
| 1917 this._contentTable.appendChild(row); | 1921 this._contentTable.appendChild(row); |
| 1918 } | 1922 } |
| 1919 } | 1923 } |
| 1920 | 1924 |
| 1921 /** | 1925 /** |
| 1922 * @constructor | 1926 * @constructor |
| 1923 * @param {?WebInspector.Target} target | 1927 * @param {?WebInspector.Target} target |
| 1924 * @param {?WebInspector.Linkifier} linkifier | 1928 * @param {?WebInspector.Linkifier} linkifier |
| 1925 * @param {?Map<number, ?WebInspector.DOMNode>} relatedNodesMap | 1929 * @param {?Map<number, ?WebInspector.DOMNode>} relatedNodesMap |
| 1926 * @param {boolean} monospaceValues | |
| 1927 */ | 1930 */ |
| 1928 WebInspector.TimelineDetailsContentHelper = function(target, linkifier, relatedN odesMap, monospaceValues) | 1931 WebInspector.TimelineDetailsContentHelper = function(target, linkifier, relatedN odesMap) |
| 1929 { | 1932 { |
| 1933 this.fragment = createDocumentFragment(); | |
| 1934 | |
| 1930 this._linkifier = linkifier; | 1935 this._linkifier = linkifier; |
| 1931 this._target = target; | 1936 this._target = target; |
| 1932 this._relatedNodesMap = relatedNodesMap; | 1937 this._relatedNodesMap = relatedNodesMap; |
| 1933 this.element = createElement("div"); | 1938 |
| 1934 this.element.className = "timeline-details-view-block"; | 1939 this.element = createElementWithClass("div", "timeline-details-view-block"); |
|
caseq
2015/12/09 02:28:15
s/element/_currentElement/ (note this needs to be
| |
| 1935 this._monospaceValues = monospaceValues; | 1940 this._tableElement = this.element.createChild("div", "vbox timeline-details- chip-body"); |
| 1941 this.fragment.appendChild(this.element); | |
| 1936 } | 1942 } |
| 1937 | 1943 |
| 1938 WebInspector.TimelineDetailsContentHelper.prototype = { | 1944 WebInspector.TimelineDetailsContentHelper.prototype = { |
| 1939 /** | 1945 /** |
| 1946 * @param {string=} title | |
| 1947 * @param {!WebInspector.TimelineCategory=} category | |
| 1948 */ | |
| 1949 addSection: function(title, category) | |
| 1950 { | |
| 1951 if (!this._tableElement.hasChildNodes()) { | |
| 1952 this.element.removeChildren(); | |
| 1953 } else { | |
| 1954 this.element = createElementWithClass("div", "timeline-details-view- block"); | |
| 1955 this.fragment.appendChild(this.element); | |
| 1956 } | |
| 1957 | |
| 1958 if (title) { | |
| 1959 var titleElement = this.element.createChild("div", "timeline-details -chip-title"); | |
| 1960 if (category) | |
| 1961 titleElement.createChild("div", "timeline-" + category.name); | |
| 1962 titleElement.createTextChild(title); | |
| 1963 } | |
| 1964 | |
| 1965 this._tableElement = this.element.createChild("div", "vbox timeline-deta ils-chip-body"); | |
| 1966 this.fragment.appendChild(this.element); | |
| 1967 }, | |
| 1968 | |
| 1969 /** | |
| 1940 * @return {?WebInspector.Linkifier} | 1970 * @return {?WebInspector.Linkifier} |
| 1941 */ | 1971 */ |
| 1942 linkifier: function() | 1972 linkifier: function() |
| 1943 { | 1973 { |
| 1944 return this._linkifier; | 1974 return this._linkifier; |
| 1945 }, | 1975 }, |
| 1946 | 1976 |
| 1947 /** | 1977 /** |
| 1948 * @param {?number} backendNodeId | 1978 * @param {?number} backendNodeId |
| 1949 * @return {?WebInspector.DOMNode} | 1979 * @return {?WebInspector.DOMNode} |
| 1950 */ | 1980 */ |
| 1951 nodeForBackendId: function(backendNodeId) | 1981 nodeForBackendId: function(backendNodeId) |
| 1952 { | 1982 { |
| 1953 if (!backendNodeId || !this._relatedNodesMap) | 1983 if (!backendNodeId || !this._relatedNodesMap) |
| 1954 return null; | 1984 return null; |
| 1955 return this._relatedNodesMap.get(backendNodeId) || null; | 1985 return this._relatedNodesMap.get(backendNodeId) || null; |
| 1956 }, | 1986 }, |
| 1957 | 1987 |
| 1958 /** | 1988 /** |
| 1959 * @param {string} title | 1989 * @param {string} title |
| 1960 * @param {string|number|boolean} value | 1990 * @param {string|number|boolean} value |
| 1961 */ | 1991 */ |
| 1962 appendTextRow: function(title, value) | 1992 appendTextRow: function(title, value) |
| 1963 { | 1993 { |
| 1964 var rowElement = this.element.createChild("div", "timeline-details-view- row"); | 1994 var rowElement = this._tableElement.createChild("div", "timeline-details -view-row"); |
| 1965 rowElement.createChild("div", "timeline-details-view-row-title").textCon tent = title; | 1995 rowElement.createChild("div", "timeline-details-view-row-title").textCon tent = title; |
| 1966 rowElement.createChild("div", "timeline-details-view-row-value" + (this. _monospaceValues ? " monospace" : "")).textContent = value; | 1996 rowElement.createChild("div", "timeline-details-view-row-value").textCon tent = value; |
| 1967 }, | 1997 }, |
| 1968 | 1998 |
| 1969 /** | 1999 /** |
| 1970 * @param {string} title | 2000 * @param {string} title |
| 1971 * @param {!Node|string} content | 2001 * @param {!Node|string} content |
| 1972 * @param {boolean=} isWarning | 2002 * @param {boolean=} isWarning |
| 2003 * @param {boolean=} isStacked | |
| 1973 */ | 2004 */ |
| 1974 appendElementRow: function(title, content, isWarning) | 2005 appendElementRow: function(title, content, isWarning, isStacked) |
| 1975 { | 2006 { |
| 1976 var rowElement = this.element.createChild("div", "timeline-details-view- row"); | 2007 var rowElement = this._tableElement.createChild("div", "timeline-details -view-row"); |
| 1977 if (isWarning) | 2008 if (isWarning) |
| 1978 rowElement.classList.add("timeline-details-warning"); | 2009 rowElement.classList.add("timeline-details-warning"); |
| 2010 if (isStacked) | |
| 2011 rowElement.classList.add("timeline-details-stack-values"); | |
| 1979 var titleElement = rowElement.createChild("div", "timeline-details-view- row-title"); | 2012 var titleElement = rowElement.createChild("div", "timeline-details-view- row-title"); |
| 1980 titleElement.textContent = title; | 2013 titleElement.textContent = title; |
| 1981 var valueElement = rowElement.createChild("div", "timeline-details-view- row-value" + (this._monospaceValues ? " monospace" : "")); | 2014 var valueElement = rowElement.createChild("div", "timeline-details-view- row-value"); |
| 1982 if (content instanceof Node) | 2015 if (content instanceof Node) |
| 1983 valueElement.appendChild(content); | 2016 valueElement.appendChild(content); |
| 1984 else | 2017 else |
| 1985 valueElement.createTextChild(content || ""); | 2018 valueElement.createTextChild(content || ""); |
| 1986 }, | 2019 }, |
| 1987 | 2020 |
| 1988 /** | 2021 /** |
| 1989 * @param {string} title | 2022 * @param {string} title |
| 1990 * @param {string} url | 2023 * @param {string} url |
| 1991 * @param {number} startLine | 2024 * @param {number} startLine |
| (...skipping 26 matching lines...) Expand all Loading... | |
| 2018 | 2051 |
| 2019 /** | 2052 /** |
| 2020 * @param {string} title | 2053 * @param {string} title |
| 2021 * @param {!Array.<!ConsoleAgent.CallFrame>} stackTrace | 2054 * @param {!Array.<!ConsoleAgent.CallFrame>} stackTrace |
| 2022 */ | 2055 */ |
| 2023 appendStackTrace: function(title, stackTrace) | 2056 appendStackTrace: function(title, stackTrace) |
| 2024 { | 2057 { |
| 2025 if (!this._linkifier || !this._target) | 2058 if (!this._linkifier || !this._target) |
| 2026 return; | 2059 return; |
| 2027 | 2060 |
| 2028 var rowElement = this.element.createChild("div", "timeline-details-view- row"); | 2061 var rowElement = this._tableElement.createChild("div", "timeline-details -view-row"); |
| 2029 rowElement.createChild("div", "timeline-details-view-row-title").textCon tent = title; | 2062 rowElement.createChild("div", "timeline-details-view-row-title").textCon tent = title; |
| 2030 this.createChildStackTraceElement(rowElement, stackTrace); | 2063 this.createChildStackTraceElement(rowElement, stackTrace); |
| 2031 }, | 2064 }, |
| 2032 | 2065 |
| 2033 /** | 2066 /** |
| 2034 * @param {!Element} parentElement | 2067 * @param {!Element} parentElement |
| 2035 * @param {!Array.<!ConsoleAgent.CallFrame>} stackTrace | 2068 * @param {!Array.<!ConsoleAgent.CallFrame>} stackTrace |
| 2036 */ | 2069 */ |
| 2037 createChildStackTraceElement: function(parentElement, stackTrace) | 2070 createChildStackTraceElement: function(parentElement, stackTrace) |
| 2038 { | 2071 { |
| 2039 if (!this._linkifier || !this._target) | 2072 if (!this._linkifier || !this._target) |
| 2040 return; | 2073 return; |
| 2041 | 2074 parentElement.classList.add("timeline-details-stack-values"); |
| 2042 var stackTraceElement = parentElement.createChild("div", "timeline-detai ls-view-row-value timeline-details-view-row-stack-trace monospace"); | 2075 var stackTraceElement = parentElement.createChild("div", "timeline-detai ls-view-row-value timeline-details-view-row-stack-trace"); |
| 2043 | |
| 2044 var callFrameElem = WebInspector.DOMPresentationUtils.buildStackTracePre viewContents(this._target, this._linkifier, stackTrace); | 2076 var callFrameElem = WebInspector.DOMPresentationUtils.buildStackTracePre viewContents(this._target, this._linkifier, stackTrace); |
| 2045 | |
| 2046 stackTraceElement.appendChild(callFrameElem); | 2077 stackTraceElement.appendChild(callFrameElem); |
| 2047 }, | 2078 }, |
| 2048 | 2079 |
| 2049 /** | 2080 /** |
| 2050 * @param {!WebInspector.TracingModel.Event} event | 2081 * @param {!WebInspector.TracingModel.Event} event |
| 2051 * @param {string=} warningType | 2082 * @param {string=} warningType |
| 2052 */ | 2083 */ |
| 2053 appendWarningRow: function(event, warningType) | 2084 appendWarningRow: function(event, warningType) |
| 2054 { | 2085 { |
| 2055 var warning = WebInspector.TimelineUIUtils.eventWarning(event, warningTy pe); | 2086 var warning = WebInspector.TimelineUIUtils.eventWarning(event, warningTy pe); |
| (...skipping 30 matching lines...) Expand all Loading... | |
| 2086 case warnings.V8Deopt: | 2117 case warnings.V8Deopt: |
| 2087 span.appendChild(WebInspector.linkifyURLAsNode("https://github.com/Googl eChrome/devtools-docs/issues/53", | 2118 span.appendChild(WebInspector.linkifyURLAsNode("https://github.com/Googl eChrome/devtools-docs/issues/53", |
| 2088 WebInspector.UIString("Not optimized"), undefined, true)); | 2119 WebInspector.UIString("Not optimized"), undefined, true)); |
| 2089 span.createTextChild(WebInspector.UIString(": %s", eventData["deoptReaso n"])); | 2120 span.createTextChild(WebInspector.UIString(": %s", eventData["deoptReaso n"])); |
| 2090 break; | 2121 break; |
| 2091 default: | 2122 default: |
| 2092 console.assert(false, "Unhandled TimelineModel.WarningType"); | 2123 console.assert(false, "Unhandled TimelineModel.WarningType"); |
| 2093 } | 2124 } |
| 2094 return span; | 2125 return span; |
| 2095 } | 2126 } |
| OLD | NEW |