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

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

Issue 1514483002: DevTools: brush up new details cards on timeline. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years 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 | « no previous file | third_party/WebKit/Source/devtools/front_end/timeline/TimelineView.js » ('j') | 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) 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
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
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 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
754 var relatedNode = contentHelper.nodeForBackendId(event.backendNodeId); 750 var relatedNode = contentHelper.nodeForBackendId(event.backendNodeId);
755 if (relatedNode) 751 if (relatedNode)
756 contentHelper.appendElementRow(relatedNodeLabel || WebInspector.UIString ("Related Node"), WebInspector.DOMPresentationUtils.linkifyNodeReference(related Node)); 752 contentHelper.appendElementRow(relatedNodeLabel || WebInspector.UIString ("Related Node"), WebInspector.DOMPresentationUtils.linkifyNodeReference(related Node));
757 753
758 if (eventData && eventData["scriptName"] && event.name !== recordTypes.Funct ionCall) 754 if (event.previewElement) {
759 contentHelper.appendLocationRow(WebInspector.UIString("Function Call"), eventData["scriptName"], eventData["scriptLine"]); 755 contentHelper.addSection(WebInspector.UIString("Preview"));
756 contentHelper.appendElementRow("", event.previewElement);
757 }
760 758
761 if (event.stackTrace || (event.initiator && event.initiator.stackTrace) || e vent.invalidationTrackingEvents) 759 if (event.stackTrace || (event.initiator && event.initiator.stackTrace) || e vent.invalidationTrackingEvents)
762 WebInspector.TimelineUIUtils._generateCauses(event, model.target(), cont entHelper); 760 WebInspector.TimelineUIUtils._generateCauses(event, model.target(), cont entHelper);
763 761
764 var showPieChart = detailed && WebInspector.TimelineUIUtils._aggregatedStats ForTraceEvent(stats, model, event); 762 var showPieChart = detailed && WebInspector.TimelineUIUtils._aggregatedStats ForTraceEvent(stats, model, event);
765 if (showPieChart) { 763 if (showPieChart) {
764 contentHelper.addSection(WebInspector.UIString("Aggregated Time"));
766 var pieChart = WebInspector.TimelineUIUtils.generatePieChart(stats, WebI nspector.TimelineUIUtils.eventStyle(event).category, event.selfTime); 765 var pieChart = WebInspector.TimelineUIUtils.generatePieChart(stats, WebI nspector.TimelineUIUtils.eventStyle(event).category, event.selfTime);
767 contentHelper.appendElementRow(WebInspector.UIString("Aggregated Time"), pieChart); 766 contentHelper.appendElementRow("", pieChart);
768 } 767 }
769 768
770 fragment.appendChild(contentHelper.element); 769 return contentHelper.fragment;
771
772 return fragment;
773 } 770 }
774 771
775 WebInspector.TimelineUIUtils._aggregatedStatsKey = Symbol("aggregatedStats"); 772 WebInspector.TimelineUIUtils._aggregatedStatsKey = Symbol("aggregatedStats");
776 773
777 /** 774 /**
778 * @param {!WebInspector.TimelineModel} model 775 * @param {!WebInspector.TimelineModel} model
779 * @param {number} startTime 776 * @param {number} startTime
780 * @param {number} endTime 777 * @param {number} endTime
781 * @return {!Element} 778 * @return {!DocumentFragment}
782 */ 779 */
783 WebInspector.TimelineUIUtils.buildRangeStats = function(model, startTime, endTim e) 780 WebInspector.TimelineUIUtils.buildRangeStats = function(model, startTime, endTim e)
784 { 781 {
785 var aggregatedStats = {}; 782 var aggregatedStats = {};
786 783
787 /** 784 /**
788 * @param {number} value 785 * @param {number} value
789 * @param {!WebInspector.TimelineModel.Record} task 786 * @param {!WebInspector.TimelineModel.Record} task
790 * @return {number} 787 * @return {number}
791 */ 788 */
(...skipping 20 matching lines...) Expand all
812 continue; 809 continue;
813 } 810 }
814 WebInspector.TimelineUIUtils._collectAggregatedStatsForRecord(task, star tTime, endTime, aggregatedStats); 811 WebInspector.TimelineUIUtils._collectAggregatedStatsForRecord(task, star tTime, endTime, aggregatedStats);
815 } 812 }
816 813
817 var aggregatedTotal = 0; 814 var aggregatedTotal = 0;
818 for (var categoryName in aggregatedStats) 815 for (var categoryName in aggregatedStats)
819 aggregatedTotal += aggregatedStats[categoryName]; 816 aggregatedTotal += aggregatedStats[categoryName];
820 aggregatedStats["idle"] = Math.max(0, endTime - startTime - aggregatedTotal) ; 817 aggregatedStats["idle"] = Math.max(0, endTime - startTime - aggregatedTotal) ;
821 818
822 var contentHelper = new WebInspector.TimelineDetailsContentHelper(null, null , null, false);
823 var pieChart = WebInspector.TimelineUIUtils.generatePieChart(aggregatedStats );
824
825 var startOffset = startTime - model.minimumRecordTime(); 819 var startOffset = startTime - model.minimumRecordTime();
826 var endOffset = endTime - model.minimumRecordTime(); 820 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 821
830 return contentHelper.element; 822 var contentHelper = new WebInspector.TimelineDetailsContentHelper(null, null , null);
823 contentHelper.addSection(WebInspector.UIString("Range: %s \u2013 %s", Numbe r.millisToString(startOffset), Number.millisToString(endOffset)));
824 var pieChart = WebInspector.TimelineUIUtils.generatePieChart(aggregatedStats );
825 contentHelper.appendElementRow("", pieChart);
826 return contentHelper.fragment;
831 } 827 }
832 828
833 /** 829 /**
834 * @param {!WebInspector.TimelineModel.Record} record 830 * @param {!WebInspector.TimelineModel.Record} record
835 * @param {number} startTime 831 * @param {number} startTime
836 * @param {number} endTime 832 * @param {number} endTime
837 * @param {!Object} aggregatedStats 833 * @param {!Object} aggregatedStats
838 */ 834 */
839 WebInspector.TimelineUIUtils._collectAggregatedStatsForRecord = function(record, startTime, endTime, aggregatedStats) 835 WebInspector.TimelineUIUtils._collectAggregatedStatsForRecord = function(record, startTime, endTime, aggregatedStats)
840 { 836 {
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
881 } 877 }
882 878
883 /** 879 /**
884 * @param {!WebInspector.TimelineModel.NetworkRequest} request 880 * @param {!WebInspector.TimelineModel.NetworkRequest} request
885 * @param {!WebInspector.TimelineModel} model 881 * @param {!WebInspector.TimelineModel} model
886 * @param {!WebInspector.Linkifier} linkifier 882 * @param {!WebInspector.Linkifier} linkifier
887 * @return {!Promise<!DocumentFragment>} 883 * @return {!Promise<!DocumentFragment>}
888 */ 884 */
889 WebInspector.TimelineUIUtils.buildNetworkRequestDetails = function(request, mode l, linkifier) 885 WebInspector.TimelineUIUtils.buildNetworkRequestDetails = function(request, mode l, linkifier)
890 { 886 {
891 var fragment = createDocumentFragment();
892 var target = model.target(); 887 var target = model.target();
893 var contentHelper = new WebInspector.TimelineDetailsContentHelper(target, li nkifier, null, true); 888 var contentHelper = new WebInspector.TimelineDetailsContentHelper(target, li nkifier, null);
894 889
895 var info = WebInspector.TimelineUIUtils.buildNetworkRequestInfo(request); 890 var info = WebInspector.TimelineUIUtils.buildNetworkRequestInfo(request);
896 for (var item of info) { 891 for (var item of info) {
897 if (typeof item.value === "string") 892 if (typeof item.value === "string")
898 contentHelper.appendTextRow(item.title, item.value); 893 contentHelper.appendTextRow(item.title, item.value);
899 else 894 else
900 contentHelper.appendElementRow(item.title, item.value); 895 contentHelper.appendElementRow(item.title, item.value);
901 } 896 }
902 897
903 /** 898 /**
(...skipping 17 matching lines...) Expand all
921 else 916 else
922 previewPromise = request.url && target ? new Promise(action) : Promise.r esolve(null); 917 previewPromise = request.url && target ? new Promise(action) : Promise.r esolve(null);
923 /** 918 /**
924 * @param {?Element} element 919 * @param {?Element} element
925 * @return {!DocumentFragment} 920 * @return {!DocumentFragment}
926 */ 921 */
927 function appendPreview(element) 922 function appendPreview(element)
928 { 923 {
929 if (element) 924 if (element)
930 contentHelper.appendElementRow(WebInspector.UIString("Preview"), req uest.previewElement); 925 contentHelper.appendElementRow(WebInspector.UIString("Preview"), req uest.previewElement);
931 fragment.appendChild(contentHelper.element); 926 return contentHelper.fragment;
932 return fragment;
933 } 927 }
934 return previewPromise.then(appendPreview); 928 return previewPromise.then(appendPreview);
935 } 929 }
936 930
937 /** 931 /**
938 * @param {!WebInspector.TracingModel.Event} event 932 * @param {!WebInspector.TracingModel.Event} event
939 * @param {?WebInspector.Target} target 933 * @param {?WebInspector.Target} target
940 * @param {!WebInspector.TimelineDetailsContentHelper} contentHelper 934 * @param {!WebInspector.TimelineDetailsContentHelper} contentHelper
941 */ 935 */
942 WebInspector.TimelineUIUtils._generateCauses = function(event, target, contentHe lper) 936 WebInspector.TimelineUIUtils._generateCauses = function(event, target, contentHe lper)
(...skipping 18 matching lines...) Expand all
961 case recordTypes.RecalculateStyles: 955 case recordTypes.RecalculateStyles:
962 stackLabel = WebInspector.UIString("Recalculation Forced"); 956 stackLabel = WebInspector.UIString("Recalculation Forced");
963 break; 957 break;
964 case recordTypes.Layout: 958 case recordTypes.Layout:
965 callSiteStackLabel = WebInspector.UIString("First Layout Invalidation"); 959 callSiteStackLabel = WebInspector.UIString("First Layout Invalidation");
966 stackLabel = WebInspector.UIString("Layout Forced"); 960 stackLabel = WebInspector.UIString("Layout Forced");
967 break; 961 break;
968 } 962 }
969 963
970 // Direct cause. 964 // Direct cause.
971 if (event.stackTrace) 965 if (event.stackTrace && event.stackTrace.length) {
966 contentHelper.addSection(WebInspector.UIString("Call Stacks"));
972 contentHelper.appendStackTrace(stackLabel || WebInspector.UIString("Stac k Trace"), event.stackTrace); 967 contentHelper.appendStackTrace(stackLabel || WebInspector.UIString("Stac k Trace"), event.stackTrace);
968 }
973 969
974 // Indirect causes. 970 // Indirect causes.
975 if (event.invalidationTrackingEvents && target) { // Full invalidation track ing (experimental). 971 if (event.invalidationTrackingEvents && target) { // Full invalidation track ing (experimental).
976 WebInspector.TimelineUIUtils._generateInvalidations(event, target, conte ntHelper); 972 WebInspector.TimelineUIUtils._generateInvalidations(event, target, conte ntHelper);
977 } else if (initiator && initiator.stackTrace) { // Partial invalidation trac king. 973 } else if (initiator && initiator.stackTrace) { // Partial invalidation trac king.
978 contentHelper.appendStackTrace(callSiteStackLabel || WebInspector.UIStri ng("First Invalidated"), initiator.stackTrace); 974 contentHelper.appendStackTrace(callSiteStackLabel || WebInspector.UIStri ng("First Invalidated"), initiator.stackTrace);
979 } 975 }
980 } 976 }
981 977
982 /** 978 /**
(...skipping 557 matching lines...) Expand 10 before | Expand all | Expand 10 after
1540 1536
1541 /** 1537 /**
1542 * @param {!WebInspector.TimelineFrameModelBase} frameModel 1538 * @param {!WebInspector.TimelineFrameModelBase} frameModel
1543 * @param {!WebInspector.TimelineFrame} frame 1539 * @param {!WebInspector.TimelineFrame} frame
1544 * @param {?WebInspector.FilmStripModel.Frame} filmStripFrame 1540 * @param {?WebInspector.FilmStripModel.Frame} filmStripFrame
1545 * @return {!Element} 1541 * @return {!Element}
1546 */ 1542 */
1547 WebInspector.TimelineUIUtils.generateDetailsContentForFrame = function(frameMode l, frame, filmStripFrame) 1543 WebInspector.TimelineUIUtils.generateDetailsContentForFrame = function(frameMode l, frame, filmStripFrame)
1548 { 1544 {
1549 var pieChart = WebInspector.TimelineUIUtils.generatePieChart(frame.timeByCat egory); 1545 var pieChart = WebInspector.TimelineUIUtils.generatePieChart(frame.timeByCat egory);
1550 var contentHelper = new WebInspector.TimelineDetailsContentHelper(null, null , null, false); 1546 var contentHelper = new WebInspector.TimelineDetailsContentHelper(null, null , null);
1547 contentHelper.addSection(WebInspector.UIString("Frame"));
1548
1551 var duration = WebInspector.TimelineUIUtils.frameDuration(frame); 1549 var duration = WebInspector.TimelineUIUtils.frameDuration(frame);
1552 contentHelper.appendElementRow(WebInspector.UIString("Duration"), duration, frame.hasWarnings()); 1550 contentHelper.appendElementRow(WebInspector.UIString("Duration"), duration, frame.hasWarnings());
1553 if (filmStripFrame) { 1551 if (filmStripFrame) {
1554 var filmStripPreview = createElementWithClass("img", "timeline-filmstrip -preview"); 1552 var filmStripPreview = createElementWithClass("img", "timeline-filmstrip -preview");
1555 filmStripFrame.imageDataPromise().then(onGotImageData.bind(null, filmStr ipPreview)); 1553 filmStripFrame.imageDataPromise().then(onGotImageData.bind(null, filmStr ipPreview));
1556 contentHelper.appendElementRow(WebInspector.UIString("Screenshot"), film StripPreview); 1554 contentHelper.appendElementRow("", filmStripPreview);
1557 filmStripPreview.addEventListener("click", frameClicked.bind(null, filmS tripFrame), false); 1555 filmStripPreview.addEventListener("click", frameClicked.bind(null, filmS tripFrame), false);
1558 } 1556 }
1559 var durationInMillis = frame.endTime - frame.startTime; 1557 var durationInMillis = frame.endTime - frame.startTime;
1560 contentHelper.appendTextRow(WebInspector.UIString("FPS"), Math.floor(1000 / durationInMillis)); 1558 contentHelper.appendTextRow(WebInspector.UIString("FPS"), Math.floor(1000 / durationInMillis));
1561 contentHelper.appendTextRow(WebInspector.UIString("CPU time"), Number.millis ToString(frame.cpuTime, true)); 1559 contentHelper.appendTextRow(WebInspector.UIString("CPU time"), Number.millis ToString(frame.cpuTime, true));
1562 contentHelper.appendElementRow(WebInspector.UIString("Aggregated Time"), pie Chart); 1560
1563 if (Runtime.experiments.isEnabled("layersPanel") && frame.layerTree) { 1561 if (Runtime.experiments.isEnabled("layersPanel") && frame.layerTree) {
1564 contentHelper.appendElementRow(WebInspector.UIString("Layer tree"), 1562 contentHelper.appendElementRow(WebInspector.UIString("Layer tree"),
1565 WebInspector.Linkifier.linkifyUsingReveal er(frame.layerTree, WebInspector.UIString("show"))); 1563 WebInspector.Linkifier.linkifyUsingReveal er(frame.layerTree, WebInspector.UIString("show")));
1566 } 1564 }
1567 1565
1568 /** 1566 /**
1569 * @param {!Element} image 1567 * @param {!Element} image
1570 * @param {?string} data 1568 * @param {?string} data
1571 */ 1569 */
1572 function onGotImageData(image, data) 1570 function onGotImageData(image, data)
1573 { 1571 {
1574 if (data) 1572 if (data)
1575 image.src = "data:image/jpg;base64," + data; 1573 image.src = "data:image/jpg;base64," + data;
1576 } 1574 }
1577 1575
1578 /** 1576 /**
1579 * @param {!WebInspector.FilmStripModel.Frame} filmStripFrame 1577 * @param {!WebInspector.FilmStripModel.Frame} filmStripFrame
1580 */ 1578 */
1581 function frameClicked(filmStripFrame) 1579 function frameClicked(filmStripFrame)
1582 { 1580 {
1583 new WebInspector.FilmStripView.Dialog(filmStripFrame, 0); 1581 new WebInspector.FilmStripView.Dialog(filmStripFrame, 0);
1584 } 1582 }
1585 1583
1586 return contentHelper.element; 1584 return contentHelper.fragment;
1587 } 1585 }
1588 1586
1589 /** 1587 /**
1590 * @param {!WebInspector.TimelineFrame} frame 1588 * @param {!WebInspector.TimelineFrame} frame
1591 * @return {!Element} 1589 * @return {!Element}
1592 */ 1590 */
1593 WebInspector.TimelineUIUtils.frameDuration = function(frame) 1591 WebInspector.TimelineUIUtils.frameDuration = function(frame)
1594 { 1592 {
1595 var durationText = WebInspector.UIString("%s (at %s)", Number.millisToString (frame.endTime - frame.startTime, true), 1593 var durationText = WebInspector.UIString("%s (at %s)", Number.millisToString (frame.endTime - frame.startTime, true),
1596 Number.millisToString(frame.startTimeOffset, true)); 1594 Number.millisToString(frame.startTimeOffset, true));
(...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after
1916 row.appendChild(cell); 1914 row.appendChild(cell);
1917 this._contentTable.appendChild(row); 1915 this._contentTable.appendChild(row);
1918 } 1916 }
1919 } 1917 }
1920 1918
1921 /** 1919 /**
1922 * @constructor 1920 * @constructor
1923 * @param {?WebInspector.Target} target 1921 * @param {?WebInspector.Target} target
1924 * @param {?WebInspector.Linkifier} linkifier 1922 * @param {?WebInspector.Linkifier} linkifier
1925 * @param {?Map<number, ?WebInspector.DOMNode>} relatedNodesMap 1923 * @param {?Map<number, ?WebInspector.DOMNode>} relatedNodesMap
1926 * @param {boolean} monospaceValues
1927 */ 1924 */
1928 WebInspector.TimelineDetailsContentHelper = function(target, linkifier, relatedN odesMap, monospaceValues) 1925 WebInspector.TimelineDetailsContentHelper = function(target, linkifier, relatedN odesMap)
1929 { 1926 {
1927 this.fragment = createDocumentFragment();
1928
1930 this._linkifier = linkifier; 1929 this._linkifier = linkifier;
1931 this._target = target; 1930 this._target = target;
1932 this._relatedNodesMap = relatedNodesMap; 1931 this._relatedNodesMap = relatedNodesMap;
1933 this.element = createElement("div"); 1932
1934 this.element.className = "timeline-details-view-block"; 1933 this.element = createElementWithClass("div", "timeline-details-view-block");
1935 this._monospaceValues = monospaceValues; 1934 this._tableElement = this.element.createChild("div", "vbox timeline-details- chip-body");
1935 this.fragment.appendChild(this.element);
1936 } 1936 }
1937 1937
1938 WebInspector.TimelineDetailsContentHelper.prototype = { 1938 WebInspector.TimelineDetailsContentHelper.prototype = {
1939 /** 1939 /**
1940 * @param {string} title
1941 * @param {!WebInspector.TimelineCategory=} category
1942 */
1943 addSection: function(title, category)
1944 {
1945 if (!this._tableElement.hasChildNodes()) {
1946 this.element.removeChildren();
1947 } else {
1948 this.element = createElementWithClass("div", "timeline-details-view- block");
1949 this.fragment.appendChild(this.element);
1950 }
1951
1952 if (title) {
1953 var titleElement = this.element.createChild("div", "timeline-details -chip-title");
1954 if (category)
1955 titleElement.createChild("div", "timeline-" + category.name);
1956 titleElement.createTextChild(title);
1957 }
1958
1959 this._tableElement = this.element.createChild("div", "vbox timeline-deta ils-chip-body");
1960 this.fragment.appendChild(this.element);
1961 },
1962
1963 /**
1940 * @return {?WebInspector.Linkifier} 1964 * @return {?WebInspector.Linkifier}
1941 */ 1965 */
1942 linkifier: function() 1966 linkifier: function()
1943 { 1967 {
1944 return this._linkifier; 1968 return this._linkifier;
1945 }, 1969 },
1946 1970
1947 /** 1971 /**
1948 * @param {?number} backendNodeId 1972 * @param {?number} backendNodeId
1949 * @return {?WebInspector.DOMNode} 1973 * @return {?WebInspector.DOMNode}
1950 */ 1974 */
1951 nodeForBackendId: function(backendNodeId) 1975 nodeForBackendId: function(backendNodeId)
1952 { 1976 {
1953 if (!backendNodeId || !this._relatedNodesMap) 1977 if (!backendNodeId || !this._relatedNodesMap)
1954 return null; 1978 return null;
1955 return this._relatedNodesMap.get(backendNodeId) || null; 1979 return this._relatedNodesMap.get(backendNodeId) || null;
1956 }, 1980 },
1957 1981
1958 /** 1982 /**
1959 * @param {string} title 1983 * @param {string} title
1960 * @param {string|number|boolean} value 1984 * @param {string|number|boolean} value
1961 */ 1985 */
1962 appendTextRow: function(title, value) 1986 appendTextRow: function(title, value)
1963 { 1987 {
1964 var rowElement = this.element.createChild("div", "timeline-details-view- row"); 1988 var rowElement = this._tableElement.createChild("div", "timeline-details -view-row");
1965 rowElement.createChild("div", "timeline-details-view-row-title").textCon tent = title; 1989 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; 1990 rowElement.createChild("div", "timeline-details-view-row-value").textCon tent = value;
1967 }, 1991 },
1968 1992
1969 /** 1993 /**
1970 * @param {string} title 1994 * @param {string} title
1971 * @param {!Node|string} content 1995 * @param {!Node|string} content
1972 * @param {boolean=} isWarning 1996 * @param {boolean=} isWarning
1997 * @param {boolean=} isStacked
1973 */ 1998 */
1974 appendElementRow: function(title, content, isWarning) 1999 appendElementRow: function(title, content, isWarning, isStacked)
1975 { 2000 {
1976 var rowElement = this.element.createChild("div", "timeline-details-view- row"); 2001 var rowElement = this._tableElement.createChild("div", "timeline-details -view-row");
1977 if (isWarning) 2002 if (isWarning)
1978 rowElement.classList.add("timeline-details-warning"); 2003 rowElement.classList.add("timeline-details-warning");
2004 if (isStacked)
2005 rowElement.classList.add("timeline-details-stack-values");
1979 var titleElement = rowElement.createChild("div", "timeline-details-view- row-title"); 2006 var titleElement = rowElement.createChild("div", "timeline-details-view- row-title");
1980 titleElement.textContent = title; 2007 titleElement.textContent = title;
1981 var valueElement = rowElement.createChild("div", "timeline-details-view- row-value" + (this._monospaceValues ? " monospace" : "")); 2008 var valueElement = rowElement.createChild("div", "timeline-details-view- row-value");
1982 if (content instanceof Node) 2009 if (content instanceof Node)
1983 valueElement.appendChild(content); 2010 valueElement.appendChild(content);
1984 else 2011 else
1985 valueElement.createTextChild(content || ""); 2012 valueElement.createTextChild(content || "");
1986 }, 2013 },
1987 2014
1988 /** 2015 /**
1989 * @param {string} title 2016 * @param {string} title
1990 * @param {string} url 2017 * @param {string} url
1991 * @param {number} startLine 2018 * @param {number} startLine
(...skipping 26 matching lines...) Expand all
2018 2045
2019 /** 2046 /**
2020 * @param {string} title 2047 * @param {string} title
2021 * @param {!Array.<!ConsoleAgent.CallFrame>} stackTrace 2048 * @param {!Array.<!ConsoleAgent.CallFrame>} stackTrace
2022 */ 2049 */
2023 appendStackTrace: function(title, stackTrace) 2050 appendStackTrace: function(title, stackTrace)
2024 { 2051 {
2025 if (!this._linkifier || !this._target) 2052 if (!this._linkifier || !this._target)
2026 return; 2053 return;
2027 2054
2028 var rowElement = this.element.createChild("div", "timeline-details-view- row"); 2055 var rowElement = this._tableElement.createChild("div", "timeline-details -view-row");
2029 rowElement.createChild("div", "timeline-details-view-row-title").textCon tent = title; 2056 rowElement.createChild("div", "timeline-details-view-row-title").textCon tent = title;
2030 this.createChildStackTraceElement(rowElement, stackTrace); 2057 this.createChildStackTraceElement(rowElement, stackTrace);
2031 }, 2058 },
2032 2059
2033 /** 2060 /**
2034 * @param {!Element} parentElement 2061 * @param {!Element} parentElement
2035 * @param {!Array.<!ConsoleAgent.CallFrame>} stackTrace 2062 * @param {!Array.<!ConsoleAgent.CallFrame>} stackTrace
2036 */ 2063 */
2037 createChildStackTraceElement: function(parentElement, stackTrace) 2064 createChildStackTraceElement: function(parentElement, stackTrace)
2038 { 2065 {
2039 if (!this._linkifier || !this._target) 2066 if (!this._linkifier || !this._target)
2040 return; 2067 return;
2041 2068 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"); 2069 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); 2070 var callFrameElem = WebInspector.DOMPresentationUtils.buildStackTracePre viewContents(this._target, this._linkifier, stackTrace);
2045
2046 stackTraceElement.appendChild(callFrameElem); 2071 stackTraceElement.appendChild(callFrameElem);
2047 }, 2072 },
2048 2073
2049 /** 2074 /**
2050 * @param {!WebInspector.TracingModel.Event} event 2075 * @param {!WebInspector.TracingModel.Event} event
2051 * @param {string=} warningType 2076 * @param {string=} warningType
2052 */ 2077 */
2053 appendWarningRow: function(event, warningType) 2078 appendWarningRow: function(event, warningType)
2054 { 2079 {
2055 var warning = WebInspector.TimelineUIUtils.eventWarning(event, warningTy pe); 2080 var warning = WebInspector.TimelineUIUtils.eventWarning(event, warningTy pe);
(...skipping 30 matching lines...) Expand all
2086 case warnings.V8Deopt: 2111 case warnings.V8Deopt:
2087 span.appendChild(WebInspector.linkifyURLAsNode("https://github.com/Googl eChrome/devtools-docs/issues/53", 2112 span.appendChild(WebInspector.linkifyURLAsNode("https://github.com/Googl eChrome/devtools-docs/issues/53",
2088 WebInspector.UIString("Not optimized"), undefined, true)); 2113 WebInspector.UIString("Not optimized"), undefined, true));
2089 span.createTextChild(WebInspector.UIString(": %s", eventData["deoptReaso n"])); 2114 span.createTextChild(WebInspector.UIString(": %s", eventData["deoptReaso n"]));
2090 break; 2115 break;
2091 default: 2116 default:
2092 console.assert(false, "Unhandled TimelineModel.WarningType"); 2117 console.assert(false, "Unhandled TimelineModel.WarningType");
2093 } 2118 }
2094 return span; 2119 return span;
2095 } 2120 }
OLDNEW
« no previous file with comments | « no previous file | third_party/WebKit/Source/devtools/front_end/timeline/TimelineView.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698