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 422 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 } |
OLD | NEW |