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

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
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 570 matching lines...) Expand 10 before | Expand all | Expand 10 after
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(); 584 var fragment = createDocumentFragment();
585 var stats = {}; 585 var stats = {};
586 var recordTypes = WebInspector.TimelineModel.RecordType; 586 var recordTypes = WebInspector.TimelineModel.RecordType;
587 587
588 // This message may vary per event.name; 588 // This message may vary per event.name;
589 var relatedNodeLabel; 589 var relatedNodeLabel;
590 590
591 var contentHelper = new WebInspector.TimelineDetailsContentHelper(model.targ et(), linkifier, relatedNodesMap, false); 591 var contentHelper = new WebInspector.TimelineDetailsContentHelper(model.targ et(), linkifier, relatedNodesMap, WebInspector.TimelineUIUtils.eventTitle(event) , WebInspector.TimelineUIUtils.eventStyle(event).category);
592
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 contentHelper.element.classList.add("timeline-details-lineup");
caseq 2015/12/09 00:47:19 What does this do?
608 }
609
607 switch (event.name) { 610 switch (event.name) {
608 case recordTypes.GCEvent: 611 case recordTypes.GCEvent:
609 case recordTypes.MajorGC: 612 case recordTypes.MajorGC:
610 case recordTypes.MinorGC: 613 case recordTypes.MinorGC:
611 var delta = event.args["usedHeapSizeBefore"] - event.args["usedHeapSizeA fter"]; 614 var delta = event.args["usedHeapSizeBefore"] - event.args["usedHeapSizeA fter"];
612 contentHelper.appendTextRow(WebInspector.UIString("Collected"), Number.b ytesToString(delta)); 615 contentHelper.appendTextRow(WebInspector.UIString("Collected"), Number.b ytesToString(delta));
613 break; 616 break;
614 case recordTypes.JSFrame: 617 case recordTypes.JSFrame:
615 var detailsNode = WebInspector.TimelineUIUtils.buildDetailsNodeForTraceE vent(event, model.target(), linkifier); 618 var detailsNode = WebInspector.TimelineUIUtils.buildDetailsNodeForTraceE vent(event, model.target(), linkifier);
616 if (detailsNode) 619 if (detailsNode)
617 contentHelper.appendElementRow(WebInspector.UIString("Function"), de tailsNode); 620 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; 621 break;
622 case recordTypes.TimerFire: 622 case recordTypes.TimerFire:
623 case recordTypes.TimerInstall: 623 case recordTypes.TimerInstall:
624 case recordTypes.TimerRemove: 624 case recordTypes.TimerRemove:
625 contentHelper.appendTextRow(WebInspector.UIString("Timer ID"), eventData ["timerId"]); 625 contentHelper.appendTextRow(WebInspector.UIString("Timer ID"), eventData ["timerId"]);
626 if (event.name === recordTypes.TimerInstall) { 626 if (event.name === recordTypes.TimerInstall) {
627 contentHelper.appendTextRow(WebInspector.UIString("Timeout"), Number .millisToString(eventData["timeout"])); 627 contentHelper.appendTextRow(WebInspector.UIString("Timeout"), Number .millisToString(eventData["timeout"]));
628 contentHelper.appendTextRow(WebInspector.UIString("Repeats"), !event Data["singleShot"]); 628 contentHelper.appendTextRow(WebInspector.UIString("Repeats"), !event Data["singleShot"]);
629 } 629 }
630 break; 630 break;
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
687 var url = eventData["styleSheetUrl"]; 687 var url = eventData["styleSheetUrl"];
688 if (url) 688 if (url)
689 contentHelper.appendElementRow(WebInspector.UIString("Stylesheet URL "), WebInspector.linkifyResourceAsNode(url)); 689 contentHelper.appendElementRow(WebInspector.UIString("Stylesheet URL "), WebInspector.linkifyResourceAsNode(url));
690 break; 690 break;
691 case recordTypes.UpdateLayoutTree: // We don't want to see default details. 691 case recordTypes.UpdateLayoutTree: // We don't want to see default details.
692 case recordTypes.RecalculateStyles: 692 case recordTypes.RecalculateStyles:
693 contentHelper.appendTextRow(WebInspector.UIString("Elements Affected"), event.args["elementCount"]); 693 contentHelper.appendTextRow(WebInspector.UIString("Elements Affected"), event.args["elementCount"]);
694 break; 694 break;
695 case recordTypes.Layout: 695 case recordTypes.Layout:
696 var beginData = event.args["beginData"]; 696 var beginData = event.args["beginData"];
697 contentHelper.appendTextRow(WebInspector.UIString("Nodes That Need Layou t"), beginData["dirtyObjects"]); 697 contentHelper.appendTextRow(WebInspector.UIString("Nodes That Need Layou t"), beginData["dirtyObjects"]);
alph 2015/12/09 01:07:11 may be keep total, e.g.: 16 of 33.
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"); 698 relatedNodeLabel = WebInspector.UIString("Layout root");
702 break; 699 break;
703 case recordTypes.ConsoleTime: 700 case recordTypes.ConsoleTime:
704 contentHelper.appendTextRow(WebInspector.UIString("Message"), event.name ); 701 contentHelper.appendTextRow(WebInspector.UIString("Message"), event.name );
705 break; 702 break;
706 case recordTypes.WebSocketCreate: 703 case recordTypes.WebSocketCreate:
707 case recordTypes.WebSocketSendHandshakeRequest: 704 case recordTypes.WebSocketSendHandshakeRequest:
708 case recordTypes.WebSocketReceiveHandshakeResponse: 705 case recordTypes.WebSocketReceiveHandshakeResponse:
709 case recordTypes.WebSocketDestroy: 706 case recordTypes.WebSocketDestroy:
710 var initiatorData = initiator ? initiator.args["data"] : eventData; 707 var initiatorData = initiator ? initiator.args["data"] : eventData;
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
744 contentHelper.appendTextRow(WebInspector.UIString("Type"), eventData["ty pe"]); 741 contentHelper.appendTextRow(WebInspector.UIString("Type"), eventData["ty pe"]);
745 break; 742 break;
746 743
747 default: 744 default:
748 var detailsNode = WebInspector.TimelineUIUtils.buildDetailsNodeForTraceE vent(event, model.target(), linkifier); 745 var detailsNode = WebInspector.TimelineUIUtils.buildDetailsNodeForTraceE vent(event, model.target(), linkifier);
749 if (detailsNode) 746 if (detailsNode)
750 contentHelper.appendElementRow(WebInspector.UIString("Details"), det ailsNode); 747 contentHelper.appendElementRow(WebInspector.UIString("Details"), det ailsNode);
751 break; 748 break;
752 } 749 }
753 750
751 if (event.previewElement) {
752 contentHelper = new WebInspector.TimelineDetailsContentHelper(model.targ et(), linkifier, relatedNodesMap);
caseq 2015/12/09 00:51:33 What is this meant to do? What happens to the cont
753 contentHelper.appendElementRow(WebInspector.UIString("Preview"), event.p reviewElement);
754 }
755
754 var relatedNode = contentHelper.nodeForBackendId(event.backendNodeId); 756 var relatedNode = contentHelper.nodeForBackendId(event.backendNodeId);
755 if (relatedNode) 757 if (relatedNode)
756 contentHelper.appendElementRow(relatedNodeLabel || WebInspector.UIString ("Related Node"), WebInspector.DOMPresentationUtils.linkifyNodeReference(related Node)); 758 contentHelper.appendElementRow(relatedNodeLabel || WebInspector.UIString ("Related Node"), WebInspector.DOMPresentationUtils.linkifyNodeReference(related Node));
757 759
758 if (eventData && eventData["scriptName"] && event.name !== recordTypes.Funct ionCall) 760 if (eventData && eventData["scriptName"] && event.name !== recordTypes.Funct ionCall) {
761 fragment.appendChild(contentHelper.element);
762 contentHelper = new WebInspector.TimelineDetailsContentHelper(model.targ et(), linkifier, relatedNodesMap);
759 contentHelper.appendLocationRow(WebInspector.UIString("Function Call"), eventData["scriptName"], eventData["scriptLine"]); 763 contentHelper.appendLocationRow(WebInspector.UIString("Function Call"), eventData["scriptName"], eventData["scriptLine"]);
764 }
760 765
761 if (event.stackTrace || (event.initiator && event.initiator.stackTrace) || e vent.invalidationTrackingEvents) 766 if (event.stackTrace || (event.initiator && event.initiator.stackTrace) || e vent.invalidationTrackingEvents) {
767 fragment.appendChild(contentHelper.element);
768 contentHelper = new WebInspector.TimelineDetailsContentHelper(model.targ et(), linkifier, relatedNodesMap, WebInspector.UIString("Call Stacks"));
762 WebInspector.TimelineUIUtils._generateCauses(event, model.target(), cont entHelper); 769 WebInspector.TimelineUIUtils._generateCauses(event, model.target(), cont entHelper);
770 }
763 771
764 var showPieChart = detailed && WebInspector.TimelineUIUtils._aggregatedStats ForTraceEvent(stats, model, event); 772 var showPieChart = detailed && WebInspector.TimelineUIUtils._aggregatedStats ForTraceEvent(stats, model, event);
765 if (showPieChart) { 773 if (showPieChart) {
774 fragment.appendChild(contentHelper.element);
775 contentHelper = new WebInspector.TimelineDetailsContentHelper(model.targ et(), linkifier, relatedNodesMap, WebInspector.UIString("Aggregated Time"));
766 var pieChart = WebInspector.TimelineUIUtils.generatePieChart(stats, WebI nspector.TimelineUIUtils.eventStyle(event).category, event.selfTime); 776 var pieChart = WebInspector.TimelineUIUtils.generatePieChart(stats, WebI nspector.TimelineUIUtils.eventStyle(event).category, event.selfTime);
767 contentHelper.appendElementRow(WebInspector.UIString("Aggregated Time"), pieChart); 777 contentHelper.appendElementRow("", pieChart);
768 } 778 }
769
770 fragment.appendChild(contentHelper.element); 779 fragment.appendChild(contentHelper.element);
771 780
772 return fragment; 781 return fragment;
773 } 782 }
774 783
775 WebInspector.TimelineUIUtils._aggregatedStatsKey = Symbol("aggregatedStats"); 784 WebInspector.TimelineUIUtils._aggregatedStatsKey = Symbol("aggregatedStats");
776 785
777 /** 786 /**
778 * @param {!WebInspector.TimelineModel} model 787 * @param {!WebInspector.TimelineModel} model
779 * @param {number} startTime 788 * @param {number} startTime
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
812 continue; 821 continue;
813 } 822 }
814 WebInspector.TimelineUIUtils._collectAggregatedStatsForRecord(task, star tTime, endTime, aggregatedStats); 823 WebInspector.TimelineUIUtils._collectAggregatedStatsForRecord(task, star tTime, endTime, aggregatedStats);
815 } 824 }
816 825
817 var aggregatedTotal = 0; 826 var aggregatedTotal = 0;
818 for (var categoryName in aggregatedStats) 827 for (var categoryName in aggregatedStats)
819 aggregatedTotal += aggregatedStats[categoryName]; 828 aggregatedTotal += aggregatedStats[categoryName];
820 aggregatedStats["idle"] = Math.max(0, endTime - startTime - aggregatedTotal) ; 829 aggregatedStats["idle"] = Math.max(0, endTime - startTime - aggregatedTotal) ;
821 830
822 var contentHelper = new WebInspector.TimelineDetailsContentHelper(null, null , null, false); 831 var startOffset = startTime - model.minimumRecordTime();
832 var endOffset = endTime - model.minimumRecordTime();
833
834 var contentHelper = new WebInspector.TimelineDetailsContentHelper(null, null , null, WebInspector.UIString("Range: %s \u2013 %s", Number.millisToString(star tOffset), Number.millisToString(endOffset)));
823 var pieChart = WebInspector.TimelineUIUtils.generatePieChart(aggregatedStats ); 835 var pieChart = WebInspector.TimelineUIUtils.generatePieChart(aggregatedStats );
824 836
825 var startOffset = startTime - model.minimumRecordTime(); 837 contentHelper.appendElementRow("", pieChart);
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 838
830 return contentHelper.element; 839 return contentHelper.element;
831 } 840 }
832 841
833 /** 842 /**
834 * @param {!WebInspector.TimelineModel.Record} record 843 * @param {!WebInspector.TimelineModel.Record} record
835 * @param {number} startTime 844 * @param {number} startTime
836 * @param {number} endTime 845 * @param {number} endTime
837 * @param {!Object} aggregatedStats 846 * @param {!Object} aggregatedStats
838 */ 847 */
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
883 /** 892 /**
884 * @param {!WebInspector.TimelineModel.NetworkRequest} request 893 * @param {!WebInspector.TimelineModel.NetworkRequest} request
885 * @param {!WebInspector.TimelineModel} model 894 * @param {!WebInspector.TimelineModel} model
886 * @param {!WebInspector.Linkifier} linkifier 895 * @param {!WebInspector.Linkifier} linkifier
887 * @return {!Promise<!DocumentFragment>} 896 * @return {!Promise<!DocumentFragment>}
888 */ 897 */
889 WebInspector.TimelineUIUtils.buildNetworkRequestDetails = function(request, mode l, linkifier) 898 WebInspector.TimelineUIUtils.buildNetworkRequestDetails = function(request, mode l, linkifier)
890 { 899 {
891 var fragment = createDocumentFragment(); 900 var fragment = createDocumentFragment();
892 var target = model.target(); 901 var target = model.target();
893 var contentHelper = new WebInspector.TimelineDetailsContentHelper(target, li nkifier, null, true); 902 var contentHelper = new WebInspector.TimelineDetailsContentHelper(target, li nkifier, null);
894 903
895 var info = WebInspector.TimelineUIUtils.buildNetworkRequestInfo(request); 904 var info = WebInspector.TimelineUIUtils.buildNetworkRequestInfo(request);
896 for (var item of info) { 905 for (var item of info) {
897 if (typeof item.value === "string") 906 if (typeof item.value === "string")
898 contentHelper.appendTextRow(item.title, item.value); 907 contentHelper.appendTextRow(item.title, item.value);
899 else 908 else
900 contentHelper.appendElementRow(item.title, item.value); 909 contentHelper.appendElementRow(item.title, item.value);
901 } 910 }
902 911
903 /** 912 /**
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
961 case recordTypes.RecalculateStyles: 970 case recordTypes.RecalculateStyles:
962 stackLabel = WebInspector.UIString("Recalculation Forced"); 971 stackLabel = WebInspector.UIString("Recalculation Forced");
963 break; 972 break;
964 case recordTypes.Layout: 973 case recordTypes.Layout:
965 callSiteStackLabel = WebInspector.UIString("First Layout Invalidation"); 974 callSiteStackLabel = WebInspector.UIString("First Layout Invalidation");
966 stackLabel = WebInspector.UIString("Layout Forced"); 975 stackLabel = WebInspector.UIString("Layout Forced");
967 break; 976 break;
968 } 977 }
969 978
970 // Direct cause. 979 // Direct cause.
971 if (event.stackTrace) 980 if (event.stackTrace && event.stackTrace.length)
972 contentHelper.appendStackTrace(stackLabel || WebInspector.UIString("Stac k Trace"), event.stackTrace); 981 contentHelper.appendStackTrace(stackLabel || WebInspector.UIString("Stac k Trace"), event.stackTrace);
973 982
974 // Indirect causes. 983 // Indirect causes.
975 if (event.invalidationTrackingEvents && target) { // Full invalidation track ing (experimental). 984 if (event.invalidationTrackingEvents && target) { // Full invalidation track ing (experimental).
976 WebInspector.TimelineUIUtils._generateInvalidations(event, target, conte ntHelper); 985 WebInspector.TimelineUIUtils._generateInvalidations(event, target, conte ntHelper);
977 } else if (initiator && initiator.stackTrace) { // Partial invalidation trac king. 986 } else if (initiator && initiator.stackTrace) { // Partial invalidation trac king.
978 contentHelper.appendStackTrace(callSiteStackLabel || WebInspector.UIStri ng("First Invalidated"), initiator.stackTrace); 987 contentHelper.appendStackTrace(callSiteStackLabel || WebInspector.UIStri ng("First Invalidated"), initiator.stackTrace);
979 } 988 }
980 } 989 }
981 990
(...skipping 557 matching lines...) Expand 10 before | Expand all | Expand 10 after
1539 } 1548 }
1540 1549
1541 /** 1550 /**
1542 * @param {!WebInspector.TimelineFrameModelBase} frameModel 1551 * @param {!WebInspector.TimelineFrameModelBase} frameModel
1543 * @param {!WebInspector.TimelineFrame} frame 1552 * @param {!WebInspector.TimelineFrame} frame
1544 * @param {?WebInspector.FilmStripModel.Frame} filmStripFrame 1553 * @param {?WebInspector.FilmStripModel.Frame} filmStripFrame
1545 * @return {!Element} 1554 * @return {!Element}
1546 */ 1555 */
1547 WebInspector.TimelineUIUtils.generateDetailsContentForFrame = function(frameMode l, frame, filmStripFrame) 1556 WebInspector.TimelineUIUtils.generateDetailsContentForFrame = function(frameMode l, frame, filmStripFrame)
1548 { 1557 {
1558 var result = createElementWithClass("div", "vbox");
1549 var pieChart = WebInspector.TimelineUIUtils.generatePieChart(frame.timeByCat egory); 1559 var pieChart = WebInspector.TimelineUIUtils.generatePieChart(frame.timeByCat egory);
1550 var contentHelper = new WebInspector.TimelineDetailsContentHelper(null, null , null, false); 1560 var contentHelper = new WebInspector.TimelineDetailsContentHelper(null, null , null, WebInspector.UIString("Frame"));
1561
1562 if (frame.hasWarnings()) {
1563 var value = createElement("span");
1564 value.createTextChild(WebInspector.UIString("Long frame times are an ind ication of "));
1565 value.appendChild(WebInspector.linkifyURLAsNode("https://developers.goog le.com/web/fundamentals/performance/rendering/",
1566 WebInspector.UIString("jan k"), undefined, true));
1567 value.createTextChild(".");
1568 contentHelper.appendElementRow(WebInspector.UIString("Warning"), value, true);
1569 }
1570
1551 var duration = WebInspector.TimelineUIUtils.frameDuration(frame); 1571 var duration = WebInspector.TimelineUIUtils.frameDuration(frame);
1552 contentHelper.appendElementRow(WebInspector.UIString("Duration"), duration, frame.hasWarnings()); 1572 contentHelper.appendElementRow(WebInspector.UIString("Duration"), duration, false);
1553 if (filmStripFrame) { 1573 if (filmStripFrame) {
1554 var filmStripPreview = createElementWithClass("img", "timeline-filmstrip -preview"); 1574 var filmStripPreview = createElementWithClass("img", "timeline-filmstrip -preview");
1555 filmStripFrame.imageDataPromise().then(onGotImageData.bind(null, filmStr ipPreview)); 1575 filmStripFrame.imageDataPromise().then(onGotImageData.bind(null, filmStr ipPreview));
1556 contentHelper.appendElementRow(WebInspector.UIString("Screenshot"), film StripPreview); 1576 contentHelper.appendElementRow("", filmStripPreview);
1557 filmStripPreview.addEventListener("click", frameClicked.bind(null, filmS tripFrame), false); 1577 filmStripPreview.addEventListener("click", frameClicked.bind(null, filmS tripFrame), false);
1558 } 1578 }
1559 var durationInMillis = frame.endTime - frame.startTime; 1579 var durationInMillis = frame.endTime - frame.startTime;
1560 contentHelper.appendTextRow(WebInspector.UIString("FPS"), Math.floor(1000 / durationInMillis)); 1580 contentHelper.appendTextRow(WebInspector.UIString("FPS"), Math.floor(1000 / durationInMillis));
1561 contentHelper.appendTextRow(WebInspector.UIString("CPU time"), Number.millis ToString(frame.cpuTime, true)); 1581 contentHelper.appendTextRow(WebInspector.UIString("CPU time"), Number.millis ToString(frame.cpuTime, true));
1562 contentHelper.appendElementRow(WebInspector.UIString("Aggregated Time"), pie Chart); 1582 result.appendChild(contentHelper.element);
1583
1563 if (Runtime.experiments.isEnabled("layersPanel") && frame.layerTree) { 1584 if (Runtime.experiments.isEnabled("layersPanel") && frame.layerTree) {
1564 contentHelper.appendElementRow(WebInspector.UIString("Layer tree"), 1585 contentHelper.appendElementRow(WebInspector.UIString("Layer tree"),
1565 WebInspector.Linkifier.linkifyUsingReveal er(frame.layerTree, WebInspector.UIString("show"))); 1586 WebInspector.Linkifier.linkifyUsingReveal er(frame.layerTree, WebInspector.UIString("show")));
1566 } 1587 }
1567 1588
1568 /** 1589 /**
1569 * @param {!Element} image 1590 * @param {!Element} image
1570 * @param {?string} data 1591 * @param {?string} data
1571 */ 1592 */
1572 function onGotImageData(image, data) 1593 function onGotImageData(image, data)
1573 { 1594 {
1574 if (data) 1595 if (data)
1575 image.src = "data:image/jpg;base64," + data; 1596 image.src = "data:image/jpg;base64," + data;
1576 } 1597 }
1577 1598
1578 /** 1599 /**
1579 * @param {!WebInspector.FilmStripModel.Frame} filmStripFrame 1600 * @param {!WebInspector.FilmStripModel.Frame} filmStripFrame
1580 */ 1601 */
1581 function frameClicked(filmStripFrame) 1602 function frameClicked(filmStripFrame)
1582 { 1603 {
1583 new WebInspector.FilmStripView.Dialog(filmStripFrame, 0); 1604 new WebInspector.FilmStripView.Dialog(filmStripFrame, 0);
1584 } 1605 }
1585 1606
1586 return contentHelper.element; 1607 result.appendChild(contentHelper.element);
alph 2015/12/09 01:07:11 doing it twice.
1608 return result;
1587 } 1609 }
1588 1610
1589 /** 1611 /**
1590 * @param {!WebInspector.TimelineFrame} frame 1612 * @param {!WebInspector.TimelineFrame} frame
1591 * @return {!Element} 1613 * @return {!Element}
1592 */ 1614 */
1593 WebInspector.TimelineUIUtils.frameDuration = function(frame) 1615 WebInspector.TimelineUIUtils.frameDuration = function(frame)
1594 { 1616 {
1595 var durationText = WebInspector.UIString("%s (at %s)", Number.millisToString (frame.endTime - frame.startTime, true), 1617 var durationText = WebInspector.UIString("%s (at %s)", Number.millisToString (frame.endTime - frame.startTime, true),
1596 Number.millisToString(frame.startTimeOffset, true)); 1618 Number.millisToString(frame.startTimeOffset, true));
1597 var element = createElement("span"); 1619 var element = createElement("span");
1598 element.createTextChild(durationText); 1620 element.createTextChild(durationText);
1599 if (!frame.hasWarnings())
1600 return element;
1601 element.createTextChild(WebInspector.UIString(". Long frame times are an ind ication of "));
1602 element.appendChild(WebInspector.linkifyURLAsNode("https://developers.google .com/web/fundamentals/performance/rendering/",
1603 WebInspector.UIString("jan k"), undefined, true));
1604 element.createTextChild(".");
1605 return element; 1621 return element;
1606 } 1622 }
1607 1623
1608 /** 1624 /**
1609 * @param {!CanvasRenderingContext2D} context 1625 * @param {!CanvasRenderingContext2D} context
1610 * @param {number} width 1626 * @param {number} width
1611 * @param {number} height 1627 * @param {number} height
1612 * @param {string} color0 1628 * @param {string} color0
1613 * @param {string} color1 1629 * @param {string} color1
1614 * @param {string} color2 1630 * @param {string} color2
(...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after
1916 row.appendChild(cell); 1932 row.appendChild(cell);
1917 this._contentTable.appendChild(row); 1933 this._contentTable.appendChild(row);
1918 } 1934 }
1919 } 1935 }
1920 1936
1921 /** 1937 /**
1922 * @constructor 1938 * @constructor
1923 * @param {?WebInspector.Target} target 1939 * @param {?WebInspector.Target} target
1924 * @param {?WebInspector.Linkifier} linkifier 1940 * @param {?WebInspector.Linkifier} linkifier
1925 * @param {?Map<number, ?WebInspector.DOMNode>} relatedNodesMap 1941 * @param {?Map<number, ?WebInspector.DOMNode>} relatedNodesMap
1926 * @param {boolean} monospaceValues 1942 * @param {string=} title
1943 * @param {!WebInspector.TimelineCategory=} category
1927 */ 1944 */
1928 WebInspector.TimelineDetailsContentHelper = function(target, linkifier, relatedN odesMap, monospaceValues) 1945 WebInspector.TimelineDetailsContentHelper = function(target, linkifier, relatedN odesMap, title, category)
1929 { 1946 {
1930 this._linkifier = linkifier; 1947 this._linkifier = linkifier;
1931 this._target = target; 1948 this._target = target;
1932 this._relatedNodesMap = relatedNodesMap; 1949 this._relatedNodesMap = relatedNodesMap;
1933 this.element = createElement("div"); 1950 this.element = createElementWithClass("div", "timeline-details-view-block");
1934 this.element.className = "timeline-details-view-block"; 1951
1935 this._monospaceValues = monospaceValues; 1952 if (title) {
1953 var titleElement = this.element.createChild("div", "timeline-details-chi p-title");
1954 if (category)
1955 titleElement.createChild("div", "timeline-" + category.name);
1956 titleElement.createTextChild(title);
1957 }
1958 this._tableElement = this.element.createChild("div", "vbox timeline-details- chip-body");
1936 } 1959 }
1937 1960
1938 WebInspector.TimelineDetailsContentHelper.prototype = { 1961 WebInspector.TimelineDetailsContentHelper.prototype = {
1939 /** 1962 /**
1940 * @return {?WebInspector.Linkifier} 1963 * @return {?WebInspector.Linkifier}
1941 */ 1964 */
1942 linkifier: function() 1965 linkifier: function()
1943 { 1966 {
1944 return this._linkifier; 1967 return this._linkifier;
1945 }, 1968 },
1946 1969
1947 /** 1970 /**
1948 * @param {?number} backendNodeId 1971 * @param {?number} backendNodeId
1949 * @return {?WebInspector.DOMNode} 1972 * @return {?WebInspector.DOMNode}
1950 */ 1973 */
1951 nodeForBackendId: function(backendNodeId) 1974 nodeForBackendId: function(backendNodeId)
1952 { 1975 {
1953 if (!backendNodeId || !this._relatedNodesMap) 1976 if (!backendNodeId || !this._relatedNodesMap)
1954 return null; 1977 return null;
1955 return this._relatedNodesMap.get(backendNodeId) || null; 1978 return this._relatedNodesMap.get(backendNodeId) || null;
1956 }, 1979 },
1957 1980
1958 /** 1981 /**
1959 * @param {string} title 1982 * @param {string} title
1960 * @param {string|number|boolean} value 1983 * @param {string|number|boolean} value
1961 */ 1984 */
1962 appendTextRow: function(title, value) 1985 appendTextRow: function(title, value)
1963 { 1986 {
1964 var rowElement = this.element.createChild("div", "timeline-details-view- row"); 1987 var rowElement = this._tableElement.createChild("div", "timeline-details -view-row");
1965 rowElement.createChild("div", "timeline-details-view-row-title").textCon tent = title; 1988 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; 1989 rowElement.createChild("div", "timeline-details-view-row-value").textCon tent = value;
1967 }, 1990 },
1968 1991
1969 /** 1992 /**
1970 * @param {string} title 1993 * @param {string} title
1971 * @param {!Node|string} content 1994 * @param {!Node|string} content
1972 * @param {boolean=} isWarning 1995 * @param {boolean=} isWarning
1996 * @param {boolean=} isStacked
1973 */ 1997 */
1974 appendElementRow: function(title, content, isWarning) 1998 appendElementRow: function(title, content, isWarning, isStacked)
1975 { 1999 {
1976 var rowElement = this.element.createChild("div", "timeline-details-view- row"); 2000 var rowElement = this._tableElement.createChild("div", "timeline-details -view-row");
1977 if (isWarning) 2001 if (isWarning)
1978 rowElement.classList.add("timeline-details-warning"); 2002 rowElement.classList.add("timeline-details-warning");
2003 if (isStacked)
2004 rowElement.classList.add("timeline-details-stack-values");
1979 var titleElement = rowElement.createChild("div", "timeline-details-view- row-title"); 2005 var titleElement = rowElement.createChild("div", "timeline-details-view- row-title");
1980 titleElement.textContent = title; 2006 titleElement.textContent = title;
1981 var valueElement = rowElement.createChild("div", "timeline-details-view- row-value" + (this._monospaceValues ? " monospace" : "")); 2007 var valueElement = rowElement.createChild("div", "timeline-details-view- row-value");
1982 if (content instanceof Node) 2008 if (content instanceof Node)
1983 valueElement.appendChild(content); 2009 valueElement.appendChild(content);
1984 else 2010 else
1985 valueElement.createTextChild(content || ""); 2011 valueElement.createTextChild(content || "");
1986 }, 2012 },
1987 2013
1988 /** 2014 /**
1989 * @param {string} title 2015 * @param {string} title
1990 * @param {string} url 2016 * @param {string} url
1991 * @param {number} startLine 2017 * @param {number} startLine
(...skipping 26 matching lines...) Expand all
2018 2044
2019 /** 2045 /**
2020 * @param {string} title 2046 * @param {string} title
2021 * @param {!Array.<!ConsoleAgent.CallFrame>} stackTrace 2047 * @param {!Array.<!ConsoleAgent.CallFrame>} stackTrace
2022 */ 2048 */
2023 appendStackTrace: function(title, stackTrace) 2049 appendStackTrace: function(title, stackTrace)
2024 { 2050 {
2025 if (!this._linkifier || !this._target) 2051 if (!this._linkifier || !this._target)
2026 return; 2052 return;
2027 2053
2028 var rowElement = this.element.createChild("div", "timeline-details-view- row"); 2054 var rowElement = this._tableElement.createChild("div", "timeline-details -view-row");
2029 rowElement.createChild("div", "timeline-details-view-row-title").textCon tent = title; 2055 rowElement.createChild("div", "timeline-details-view-row-title").textCon tent = title;
2030 this.createChildStackTraceElement(rowElement, stackTrace); 2056 this.createChildStackTraceElement(rowElement, stackTrace);
2031 }, 2057 },
2032 2058
2033 /** 2059 /**
2034 * @param {!Element} parentElement 2060 * @param {!Element} parentElement
2035 * @param {!Array.<!ConsoleAgent.CallFrame>} stackTrace 2061 * @param {!Array.<!ConsoleAgent.CallFrame>} stackTrace
2036 */ 2062 */
2037 createChildStackTraceElement: function(parentElement, stackTrace) 2063 createChildStackTraceElement: function(parentElement, stackTrace)
2038 { 2064 {
2039 if (!this._linkifier || !this._target) 2065 if (!this._linkifier || !this._target)
2040 return; 2066 return;
2041 2067 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"); 2068 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); 2069 var callFrameElem = WebInspector.DOMPresentationUtils.buildStackTracePre viewContents(this._target, this._linkifier, stackTrace);
2045
2046 stackTraceElement.appendChild(callFrameElem); 2070 stackTraceElement.appendChild(callFrameElem);
2047 }, 2071 },
2048 2072
2049 /** 2073 /**
2050 * @param {!WebInspector.TracingModel.Event} event 2074 * @param {!WebInspector.TracingModel.Event} event
2051 * @param {string=} warningType 2075 * @param {string=} warningType
2052 */ 2076 */
2053 appendWarningRow: function(event, warningType) 2077 appendWarningRow: function(event, warningType)
2054 { 2078 {
2055 var warning = WebInspector.TimelineUIUtils.eventWarning(event, warningTy pe); 2079 var warning = WebInspector.TimelineUIUtils.eventWarning(event, warningTy pe);
(...skipping 30 matching lines...) Expand all
2086 case warnings.V8Deopt: 2110 case warnings.V8Deopt:
2087 span.appendChild(WebInspector.linkifyURLAsNode("https://github.com/Googl eChrome/devtools-docs/issues/53", 2111 span.appendChild(WebInspector.linkifyURLAsNode("https://github.com/Googl eChrome/devtools-docs/issues/53",
2088 WebInspector.UIString("Not optimized"), undefined, true)); 2112 WebInspector.UIString("Not optimized"), undefined, true));
2089 span.createTextChild(WebInspector.UIString(": %s", eventData["deoptReaso n"])); 2113 span.createTextChild(WebInspector.UIString(": %s", eventData["deoptReaso n"]));
2090 break; 2114 break;
2091 default: 2115 default:
2092 console.assert(false, "Unhandled TimelineModel.WarningType"); 2116 console.assert(false, "Unhandled TimelineModel.WarningType");
2093 } 2117 }
2094 return span; 2118 return span;
2095 } 2119 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698