| 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 |