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

Side by Side Diff: Source/devtools/front_end/TimelineUIUtils.js

Issue 212953003: TimelinePanel: provide scriptId in FunctionCall event. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: minor change Created 6 years, 8 months 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 | Annotate | Revision Log
« no previous file with comments | « Source/devtools/front_end/TimelinePanel.js ('k') | Source/devtools/front_end/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 422 matching lines...) Expand 10 before | Expand all | Expand 10 after
433 return selector + " { background-image: linear-gradient(" + 433 return selector + " { background-image: linear-gradient(" +
434 category.fillColorStop0 + ", " + category.fillColorStop1 + " 25%, " + cat egory.fillColorStop1 + " 25%, " + category.fillColorStop1 + ");" + 434 category.fillColorStop0 + ", " + category.fillColorStop1 + " 25%, " + cat egory.fillColorStop1 + " 25%, " + category.fillColorStop1 + ");" +
435 " border-color: " + category.borderColor + 435 " border-color: " + category.borderColor +
436 "}"; 436 "}";
437 } 437 }
438 438
439 /** 439 /**
440 * @param {!WebInspector.TimelineModel.Record} record 440 * @param {!WebInspector.TimelineModel.Record} record
441 * @param {!WebInspector.Linkifier} linkifier 441 * @param {!WebInspector.Linkifier} linkifier
442 * @param {function(!DocumentFragment)} callback 442 * @param {function(!DocumentFragment)} callback
443 * @param {boolean} loadedFromFile
443 */ 444 */
444 WebInspector.TimelineUIUtils.generatePopupContent = function(record, linkifier, callback) 445 WebInspector.TimelineUIUtils.generatePopupContent = function(record, linkifier, callback, loadedFromFile)
445 { 446 {
446 var imageElement = /** @type {?Element} */ (record.getUserObject("TimelineUI Utils::preview-element") || null); 447 var imageElement = /** @type {?Element} */ (record.getUserObject("TimelineUI Utils::preview-element") || null);
447 var relatedNode = null; 448 var relatedNode = null;
448 449
449 var barrier = new CallbackBarrier(); 450 var barrier = new CallbackBarrier();
450 if (!imageElement && WebInspector.TimelineUIUtils.needsPreviewElement(record .type)) 451 if (!imageElement && WebInspector.TimelineUIUtils.needsPreviewElement(record .type))
451 WebInspector.DOMPresentationUtils.buildImagePreviewContents(record.url, false, barrier.createCallback(saveImage)); 452 WebInspector.DOMPresentationUtils.buildImagePreviewContents(record.url, false, barrier.createCallback(saveImage));
452 if (record.relatedBackendNodeId()) 453 if (record.relatedBackendNodeId())
453 WebInspector.domModel.pushNodesByBackendIdsToFrontend([record.relatedBac kendNodeId()], barrier.createCallback(setRelatedNode)); 454 WebInspector.domModel.pushNodesByBackendIdsToFrontend([record.relatedBac kendNodeId()], barrier.createCallback(setRelatedNode));
454 barrier.callWhenDone(callbackWrapper); 455 barrier.callWhenDone(callbackWrapper);
(...skipping 11 matching lines...) Expand all
466 * @param {?Array.<!DOMAgent.NodeId>} nodeIds 467 * @param {?Array.<!DOMAgent.NodeId>} nodeIds
467 */ 468 */
468 function setRelatedNode(nodeIds) 469 function setRelatedNode(nodeIds)
469 { 470 {
470 if (nodeIds) 471 if (nodeIds)
471 relatedNode = WebInspector.domModel.nodeForId(nodeIds[0]); 472 relatedNode = WebInspector.domModel.nodeForId(nodeIds[0]);
472 } 473 }
473 474
474 function callbackWrapper() 475 function callbackWrapper()
475 { 476 {
476 callback(WebInspector.TimelineUIUtils._generatePopupContentSynchronously (record, linkifier, imageElement, relatedNode)); 477 callback(WebInspector.TimelineUIUtils._generatePopupContentSynchronously (record, linkifier, imageElement, relatedNode, loadedFromFile));
477 } 478 }
478 } 479 }
479 480
480 /** 481 /**
481 * @param {!WebInspector.TimelineModel.Record} record 482 * @param {!WebInspector.TimelineModel.Record} record
482 * @param {!WebInspector.Linkifier} linkifier 483 * @param {!WebInspector.Linkifier} linkifier
483 * @param {?Element} imagePreviewElement 484 * @param {?Element} imagePreviewElement
484 * @param {?WebInspector.DOMNode} relatedNode 485 * @param {?WebInspector.DOMNode} relatedNode
486 * @param {boolean} loadedFromFile
485 * @return {!DocumentFragment} 487 * @return {!DocumentFragment}
486 */ 488 */
487 WebInspector.TimelineUIUtils._generatePopupContentSynchronously = function(recor d, linkifier, imagePreviewElement, relatedNode) 489 WebInspector.TimelineUIUtils._generatePopupContentSynchronously = function(recor d, linkifier, imagePreviewElement, relatedNode, loadedFromFile)
488 { 490 {
489 var fragment = document.createDocumentFragment(); 491 var fragment = document.createDocumentFragment();
490 if (record.children.length) 492 if (record.children.length)
491 fragment.appendChild(WebInspector.TimelineUIUtils.generatePieChart(recor d.aggregatedStats, record.category, record.selfTime)); 493 fragment.appendChild(WebInspector.TimelineUIUtils.generatePieChart(recor d.aggregatedStats, record.category, record.selfTime));
492 else 494 else
493 fragment.appendChild(WebInspector.TimelineUIUtils.generatePieChart(recor d.aggregatedStats)); 495 fragment.appendChild(WebInspector.TimelineUIUtils.generatePieChart(recor d.aggregatedStats));
494 496
495 const recordTypes = WebInspector.TimelineModel.RecordType; 497 const recordTypes = WebInspector.TimelineModel.RecordType;
496 498
497 // The messages may vary per record type; 499 // The messages may vary per record type;
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
607 contentHelper.appendTextRow(WebInspector.UIString("URL"), record .webSocketURL); 609 contentHelper.appendTextRow(WebInspector.UIString("URL"), record .webSocketURL);
608 if (typeof record.webSocketProtocol !== "undefined") 610 if (typeof record.webSocketProtocol !== "undefined")
609 contentHelper.appendTextRow(WebInspector.UIString("WebSocket Pro tocol"), record.webSocketProtocol); 611 contentHelper.appendTextRow(WebInspector.UIString("WebSocket Pro tocol"), record.webSocketProtocol);
610 if (typeof record.data["message"] !== "undefined") 612 if (typeof record.data["message"] !== "undefined")
611 contentHelper.appendTextRow(WebInspector.UIString("Message"), re cord.data["message"]); 613 contentHelper.appendTextRow(WebInspector.UIString("Message"), re cord.data["message"]);
612 break; 614 break;
613 case recordTypes.EmbedderCallback: 615 case recordTypes.EmbedderCallback:
614 contentHelper.appendTextRow(WebInspector.UIString("Callback Function "), record.embedderCallbackName); 616 contentHelper.appendTextRow(WebInspector.UIString("Callback Function "), record.embedderCallbackName);
615 break; 617 break;
616 default: 618 default:
617 var detailsNode = WebInspector.TimelineUIUtils.buildDetailsNode(reco rd, linkifier); 619 var detailsNode = WebInspector.TimelineUIUtils.buildDetailsNode(reco rd, linkifier, loadedFromFile);
618 if (detailsNode) 620 if (detailsNode)
619 contentHelper.appendElementRow(WebInspector.UIString("Details"), detailsNode); 621 contentHelper.appendElementRow(WebInspector.UIString("Details"), detailsNode);
620 break; 622 break;
621 } 623 }
622 624
623 if (relatedNode) 625 if (relatedNode)
624 contentHelper.appendElementRow(relatedNodeLabel || WebInspector.UIString ("Related node"), WebInspector.DOMPresentationUtils.linkifyNodeReference(related Node)); 626 contentHelper.appendElementRow(relatedNodeLabel || WebInspector.UIString ("Related node"), WebInspector.DOMPresentationUtils.linkifyNodeReference(related Node));
625 627
626 if (record.scriptName && record.type !== recordTypes.FunctionCall) 628 if (record.scriptName && record.type !== recordTypes.FunctionCall)
627 contentHelper.appendLocationRow(WebInspector.UIString("Function Call"), record.scriptName, record.scriptLine); 629 contentHelper.appendLocationRow(WebInspector.UIString("Function Call"), record.scriptName, record.scriptLine);
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
665 * @return {number} 667 * @return {number}
666 */ 668 */
667 WebInspector.TimelineUIUtils._quadHeight = function(quad) 669 WebInspector.TimelineUIUtils._quadHeight = function(quad)
668 { 670 {
669 return Math.round(Math.sqrt(Math.pow(quad[0] - quad[6], 2) + Math.pow(quad[1 ] - quad[7], 2))); 671 return Math.round(Math.sqrt(Math.pow(quad[0] - quad[6], 2) + Math.pow(quad[1 ] - quad[7], 2)));
670 } 672 }
671 673
672 /** 674 /**
673 * @param {!WebInspector.TimelineModel.Record} record 675 * @param {!WebInspector.TimelineModel.Record} record
674 * @param {!WebInspector.Linkifier} linkifier 676 * @param {!WebInspector.Linkifier} linkifier
677 * @param {boolean} loadedFromFile
675 * @return {?Node} 678 * @return {?Node}
676 */ 679 */
677 WebInspector.TimelineUIUtils.buildDetailsNode = function(record, linkifier) 680 WebInspector.TimelineUIUtils.buildDetailsNode = function(record, linkifier, load edFromFile)
678 { 681 {
679 var details; 682 var details;
680 var detailsText; 683 var detailsText;
681 684
682 switch (record.type) { 685 switch (record.type) {
683 case WebInspector.TimelineModel.RecordType.GCEvent: 686 case WebInspector.TimelineModel.RecordType.GCEvent:
684 detailsText = WebInspector.UIString("%s collected", Number.bytesToString (record.data["usedHeapSizeDelta"])); 687 detailsText = WebInspector.UIString("%s collected", Number.bytesToString (record.data["usedHeapSizeDelta"]));
685 break; 688 break;
686 case WebInspector.TimelineModel.RecordType.TimerFire: 689 case WebInspector.TimelineModel.RecordType.TimerFire:
687 detailsText = record.data["timerId"]; 690 detailsText = record.data["timerId"];
688 break; 691 break;
689 case WebInspector.TimelineModel.RecordType.FunctionCall: 692 case WebInspector.TimelineModel.RecordType.FunctionCall:
690 if (record.scriptName) 693 details = linkifyLocation(record.data.scriptId, record.data.scriptName, record.data.scriptLine, 0);
691 details = linkifyLocation(record.scriptName, record.scriptLine, 0);
692 break; 694 break;
693 case WebInspector.TimelineModel.RecordType.FireAnimationFrame: 695 case WebInspector.TimelineModel.RecordType.FireAnimationFrame:
694 detailsText = record.data["id"]; 696 detailsText = record.data["id"];
695 break; 697 break;
696 case WebInspector.TimelineModel.RecordType.EventDispatch: 698 case WebInspector.TimelineModel.RecordType.EventDispatch:
697 detailsText = record.data ? record.data["type"] : null; 699 detailsText = record.data ? record.data["type"] : null;
698 break; 700 break;
699 case WebInspector.TimelineModel.RecordType.Paint: 701 case WebInspector.TimelineModel.RecordType.Paint:
700 var width = record.data.clip ? WebInspector.TimelineUIUtils._quadWidth(r ecord.data.clip) : record.data.width; 702 var width = record.data.clip ? WebInspector.TimelineUIUtils._quadWidth(r ecord.data.clip) : record.data.width;
701 var height = record.data.clip ? WebInspector.TimelineUIUtils._quadHeight (record.data.clip) : record.data.height; 703 var height = record.data.clip ? WebInspector.TimelineUIUtils._quadHeight (record.data.clip) : record.data.height;
702 if (width && height) 704 if (width && height)
703 detailsText = WebInspector.UIString("%d\u2009\u00d7\u2009%d", width, height); 705 detailsText = WebInspector.UIString("%d\u2009\u00d7\u2009%d", width, height);
704 break; 706 break;
705 case WebInspector.TimelineModel.RecordType.TimerInstall: 707 case WebInspector.TimelineModel.RecordType.TimerInstall:
706 case WebInspector.TimelineModel.RecordType.TimerRemove: 708 case WebInspector.TimelineModel.RecordType.TimerRemove:
707 details = linkifyTopCallFrame(); 709 details = linkifyTopCallFrame();
708 detailsText = record.data["timerId"]; 710 detailsText = record.data["timerId"];
709 break; 711 break;
710 case WebInspector.TimelineModel.RecordType.RequestAnimationFrame: 712 case WebInspector.TimelineModel.RecordType.RequestAnimationFrame:
711 case WebInspector.TimelineModel.RecordType.CancelAnimationFrame: 713 case WebInspector.TimelineModel.RecordType.CancelAnimationFrame:
712 details = linkifyTopCallFrame(); 714 details = linkifyTopCallFrame();
713 detailsText = record.data["id"]; 715 detailsText = record.data["id"];
714 break; 716 break;
715 case WebInspector.TimelineModel.RecordType.ParseHTML: 717 case WebInspector.TimelineModel.RecordType.ParseHTML:
716 case WebInspector.TimelineModel.RecordType.RecalculateStyles: 718 case WebInspector.TimelineModel.RecordType.RecalculateStyles:
717 details = linkifyTopCallFrame(); 719 details = linkifyTopCallFrame();
718 break; 720 break;
719 case WebInspector.TimelineModel.RecordType.EvaluateScript: 721 case WebInspector.TimelineModel.RecordType.EvaluateScript:
720 details = record.url ? linkifyLocation(record.url, record.data["lineNumb er"], 0) : null; 722 details = linkifyLocation("", record.url, record.data["lineNumber"], 0);
721 break; 723 break;
722 case WebInspector.TimelineModel.RecordType.XHRReadyStateChange: 724 case WebInspector.TimelineModel.RecordType.XHRReadyStateChange:
723 case WebInspector.TimelineModel.RecordType.XHRLoad: 725 case WebInspector.TimelineModel.RecordType.XHRLoad:
724 case WebInspector.TimelineModel.RecordType.ScheduleResourceRequest: 726 case WebInspector.TimelineModel.RecordType.ScheduleResourceRequest:
725 case WebInspector.TimelineModel.RecordType.ResourceSendRequest: 727 case WebInspector.TimelineModel.RecordType.ResourceSendRequest:
726 case WebInspector.TimelineModel.RecordType.ResourceReceivedData: 728 case WebInspector.TimelineModel.RecordType.ResourceReceivedData:
727 case WebInspector.TimelineModel.RecordType.ResourceReceiveResponse: 729 case WebInspector.TimelineModel.RecordType.ResourceReceiveResponse:
728 case WebInspector.TimelineModel.RecordType.ResourceFinish: 730 case WebInspector.TimelineModel.RecordType.ResourceFinish:
729 case WebInspector.TimelineModel.RecordType.DecodeImage: 731 case WebInspector.TimelineModel.RecordType.DecodeImage:
730 case WebInspector.TimelineModel.RecordType.ResizeImage: 732 case WebInspector.TimelineModel.RecordType.ResizeImage:
731 detailsText = WebInspector.displayNameForURL(record.url); 733 detailsText = WebInspector.displayNameForURL(record.url);
732 break; 734 break;
733 case WebInspector.TimelineModel.RecordType.ConsoleTime: 735 case WebInspector.TimelineModel.RecordType.ConsoleTime:
734 detailsText = record.data["message"]; 736 detailsText = record.data["message"];
735 break; 737 break;
736 case WebInspector.TimelineModel.RecordType.EmbedderCallback: 738 case WebInspector.TimelineModel.RecordType.EmbedderCallback:
737 detailsText = record.data["callbackName"]; 739 detailsText = record.data["callbackName"];
738 break; 740 break;
739 default: 741 default:
740 details = record.scriptName ? linkifyLocation(record.scriptName, record. scriptLine, 0) : linkifyTopCallFrame(); 742 details = linkifyTopCallFrame();
741 break; 743 break;
742 } 744 }
743 745
744 if (!details && detailsText) 746 if (!details && detailsText)
745 details = document.createTextNode(detailsText); 747 details = document.createTextNode(detailsText);
746 return details; 748 return details;
747 749
748 /** 750 /**
751 * @param {string} scriptId
749 * @param {string} url 752 * @param {string} url
750 * @param {number} lineNumber 753 * @param {number} lineNumber
751 * @param {number=} columnNumber 754 * @param {number=} columnNumber
752 */ 755 */
753 function linkifyLocation(url, lineNumber, columnNumber) 756 function linkifyLocation(scriptId, url, lineNumber, columnNumber)
754 { 757 {
758 if (!loadedFromFile && scriptId !== "0") {
759 var location = new WebInspector.DebuggerModel.Location(
760 /** @type {!WebInspector.Target} */ (WebInspector.targetManager. activeTarget()),
761 scriptId,
762 lineNumber - 1,
763 (columnNumber || 1) - 1);
764 return linkifier.linkifyRawLocation(location, "timeline-details");
765 }
766
767 if (!url)
768 return null;
769
755 // FIXME(62725): stack trace line/column numbers are one-based. 770 // FIXME(62725): stack trace line/column numbers are one-based.
756 columnNumber = columnNumber ? columnNumber - 1 : 0; 771 columnNumber = columnNumber ? columnNumber - 1 : 0;
757 return linkifier.linkifyLocation(url, lineNumber - 1, columnNumber, "tim eline-details"); 772 return linkifier.linkifyLocation(url, lineNumber - 1, columnNumber, "tim eline-details");
758 } 773 }
759 774
760 /** 775 /**
761 * @param {!ConsoleAgent.CallFrame} callFrame 776 * @param {!ConsoleAgent.CallFrame} callFrame
762 */ 777 */
763 function linkifyCallFrame(callFrame) 778 function linkifyCallFrame(callFrame)
764 { 779 {
765 return linkifyLocation(callFrame.url, callFrame.lineNumber, callFrame.co lumnNumber); 780 return linkifyLocation(callFrame.scriptId, callFrame.url, callFrame.line Number, callFrame.columnNumber);
766 } 781 }
767 782
768 /** 783 /**
769 * @return {?Element} 784 * @return {?Element}
770 */ 785 */
771 function linkifyTopCallFrame() 786 function linkifyTopCallFrame()
772 { 787 {
773 if (record.stackTrace) 788 if (record.stackTrace)
774 return linkifyCallFrame(record.stackTrace[0]); 789 return linkifyCallFrame(record.stackTrace[0]);
775 if (record.callSiteStackTrace) 790 if (record.callSiteStackTrace)
776 return linkifyCallFrame(record.callSiteStackTrace[0]); 791 return linkifyCallFrame(record.callSiteStackTrace[0]);
777 return null; 792 return null;
778 } 793 }
779
780 /**
781 * @return {?Element}
782 */
783 function linkifyScriptLocation()
784 {
785 return record.scriptName ? linkifyLocation(record.scriptName, record.scr iptLine, 0) : null;
786 }
787 } 794 }
788 795
789 /** 796 /**
790 * @constructor 797 * @constructor
791 * @extends {WebInspector.Object} 798 * @extends {WebInspector.Object}
792 * @param {string} name 799 * @param {string} name
793 * @param {string} title 800 * @param {string} title
794 * @param {number} overviewStripGroupIndex 801 * @param {number} overviewStripGroupIndex
795 * @param {string} borderColor 802 * @param {string} borderColor
796 * @param {string} backgroundColor 803 * @param {string} backgroundColor
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
964 for (var i = 0; i < stackTrace.length; ++i) { 971 for (var i = 0; i < stackTrace.length; ++i) {
965 var stackFrame = stackTrace[i]; 972 var stackFrame = stackTrace[i];
966 var row = stackTraceElement.createChild("div"); 973 var row = stackTraceElement.createChild("div");
967 row.createTextChild(stackFrame.functionName || WebInspector.UIString ("(anonymous function)")); 974 row.createTextChild(stackFrame.functionName || WebInspector.UIString ("(anonymous function)"));
968 row.createTextChild(" @ "); 975 row.createTextChild(" @ ");
969 var urlElement = this._linkifier.linkifyLocation(stackFrame.url, sta ckFrame.lineNumber - 1); 976 var urlElement = this._linkifier.linkifyLocation(stackFrame.url, sta ckFrame.lineNumber - 1);
970 row.appendChild(urlElement); 977 row.appendChild(urlElement);
971 } 978 }
972 } 979 }
973 } 980 }
OLDNEW
« no previous file with comments | « Source/devtools/front_end/TimelinePanel.js ('k') | Source/devtools/front_end/TimelineView.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698