| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 /** | 5 /** |
| 6 * @constructor | 6 * @constructor |
| 7 * @extends {WebInspector.TimelineUIUtils} | 7 * @extends {WebInspector.TimelineUIUtils} |
| 8 */ | 8 */ |
| 9 WebInspector.TimelineUIUtilsImpl = function() | 9 WebInspector.TimelineUIUtilsImpl = function() |
| 10 { | 10 { |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 86 * @return {!WebInspector.TimelineCategory} | 86 * @return {!WebInspector.TimelineCategory} |
| 87 */ | 87 */ |
| 88 categoryForRecord: function(record) | 88 categoryForRecord: function(record) |
| 89 { | 89 { |
| 90 return WebInspector.TimelineUIUtilsImpl.recordStyle(record).category; | 90 return WebInspector.TimelineUIUtilsImpl.recordStyle(record).category; |
| 91 }, | 91 }, |
| 92 | 92 |
| 93 /** | 93 /** |
| 94 * @param {!WebInspector.TimelineModel.Record} record | 94 * @param {!WebInspector.TimelineModel.Record} record |
| 95 * @param {!WebInspector.Linkifier} linkifier | 95 * @param {!WebInspector.Linkifier} linkifier |
| 96 * @param {boolean} loadedFromFile | |
| 97 * @return {?Node} | 96 * @return {?Node} |
| 98 */ | 97 */ |
| 99 buildDetailsNode: function(record, linkifier, loadedFromFile) | 98 buildDetailsNode: function(record, linkifier) |
| 100 { | 99 { |
| 101 return WebInspector.TimelineUIUtilsImpl.buildDetailsNode(record, linkifi
er, loadedFromFile); | 100 return WebInspector.TimelineUIUtilsImpl.buildDetailsNode(record, linkifi
er); |
| 102 }, | 101 }, |
| 103 | 102 |
| 104 /** | 103 /** |
| 105 * @param {!WebInspector.TimelineModel.Record} record | 104 * @param {!WebInspector.TimelineModel.Record} record |
| 106 * @param {!WebInspector.TimelineModel} model | 105 * @param {!WebInspector.TimelineModel} model |
| 107 * @param {!WebInspector.Linkifier} linkifier | 106 * @param {!WebInspector.Linkifier} linkifier |
| 108 * @param {function(!DocumentFragment)} callback | 107 * @param {function(!DocumentFragment)} callback |
| 109 * @param {boolean} loadedFromFile | |
| 110 */ | 108 */ |
| 111 generateDetailsContent: function(record, model, linkifier, callback, loadedF
romFile) | 109 generateDetailsContent: function(record, model, linkifier, callback) |
| 112 { | 110 { |
| 113 WebInspector.TimelineUIUtilsImpl.generateDetailsContent(record, model, l
inkifier, callback, loadedFromFile); | 111 WebInspector.TimelineUIUtilsImpl.generateDetailsContent(record, model, l
inkifier, callback); |
| 114 }, | 112 }, |
| 115 | 113 |
| 116 /** | 114 /** |
| 117 * @return {!Element} | 115 * @return {!Element} |
| 118 */ | 116 */ |
| 119 createBeginFrameDivider: function() | 117 createBeginFrameDivider: function() |
| 120 { | 118 { |
| 121 return this.createEventDivider(WebInspector.TimelineModel.RecordType.Beg
inFrame); | 119 return this.createEventDivider(WebInspector.TimelineModel.RecordType.Beg
inFrame); |
| 122 }, | 120 }, |
| 123 | 121 |
| (...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 310 var children = record.children(); | 308 var children = record.children(); |
| 311 for (var i = 0; i < children.length; ++i) | 309 for (var i = 0; i < children.length; ++i) |
| 312 WebInspector.TimelineUIUtilsImpl.aggregateTimeForRecord(total, children[
i]); | 310 WebInspector.TimelineUIUtilsImpl.aggregateTimeForRecord(total, children[
i]); |
| 313 var categoryName = WebInspector.TimelineUIUtilsImpl.recordStyle(record).cate
gory.name; | 311 var categoryName = WebInspector.TimelineUIUtilsImpl.recordStyle(record).cate
gory.name; |
| 314 total[categoryName] = (total[categoryName] || 0) + record.selfTime(); | 312 total[categoryName] = (total[categoryName] || 0) + record.selfTime(); |
| 315 } | 313 } |
| 316 | 314 |
| 317 /** | 315 /** |
| 318 * @param {!WebInspector.TimelineModel.Record} record | 316 * @param {!WebInspector.TimelineModel.Record} record |
| 319 * @param {!WebInspector.Linkifier} linkifier | 317 * @param {!WebInspector.Linkifier} linkifier |
| 320 * @param {boolean} loadedFromFile | |
| 321 * @return {?Node} | 318 * @return {?Node} |
| 322 */ | 319 */ |
| 323 WebInspector.TimelineUIUtilsImpl.buildDetailsNode = function(record, linkifier,
loadedFromFile) | 320 WebInspector.TimelineUIUtilsImpl.buildDetailsNode = function(record, linkifier) |
| 324 { | 321 { |
| 325 var details; | 322 var details; |
| 326 var detailsText; | 323 var detailsText; |
| 327 var recordData = record.data(); | 324 var recordData = record.data(); |
| 328 switch (record.type()) { | 325 switch (record.type()) { |
| 329 case WebInspector.TimelineModel.RecordType.GCEvent: | 326 case WebInspector.TimelineModel.RecordType.GCEvent: |
| 330 detailsText = WebInspector.UIString("%s collected", Number.bytesToString
(recordData["usedHeapSizeDelta"])); | 327 detailsText = WebInspector.UIString("%s collected", Number.bytesToString
(recordData["usedHeapSizeDelta"])); |
| 331 break; | 328 break; |
| 332 case WebInspector.TimelineModel.RecordType.TimerFire: | 329 case WebInspector.TimelineModel.RecordType.TimerFire: |
| 333 detailsText = recordData["timerId"]; | 330 detailsText = recordData["timerId"]; |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 401 return details; | 398 return details; |
| 402 | 399 |
| 403 /** | 400 /** |
| 404 * @param {string} scriptId | 401 * @param {string} scriptId |
| 405 * @param {string} url | 402 * @param {string} url |
| 406 * @param {number} lineNumber | 403 * @param {number} lineNumber |
| 407 * @param {number=} columnNumber | 404 * @param {number=} columnNumber |
| 408 */ | 405 */ |
| 409 function linkifyLocation(scriptId, url, lineNumber, columnNumber) | 406 function linkifyLocation(scriptId, url, lineNumber, columnNumber) |
| 410 { | 407 { |
| 411 if (!loadedFromFile && scriptId !== "0") { | |
| 412 var location = new WebInspector.DebuggerModel.Location( | |
| 413 record.target(), | |
| 414 scriptId, | |
| 415 lineNumber - 1, | |
| 416 (columnNumber || 1) - 1); | |
| 417 return linkifier.linkifyRawLocation(location, "timeline-details"); | |
| 418 } | |
| 419 | |
| 420 if (!url) | 408 if (!url) |
| 421 return null; | 409 return null; |
| 422 | 410 |
| 423 // FIXME(62725): stack trace line/column numbers are one-based. | 411 // FIXME(62725): stack trace line/column numbers are one-based. |
| 424 columnNumber = columnNumber ? columnNumber - 1 : 0; | 412 columnNumber = columnNumber ? columnNumber - 1 : 0; |
| 425 return linkifier.linkifyLocation(record.target(), url, lineNumber - 1, c
olumnNumber, "timeline-details"); | 413 return linkifier.linkifyLocationByScriptId(record.target(), scriptId, ur
l, lineNumber - 1, columnNumber, "timeline-details"); |
| 426 } | 414 } |
| 427 | 415 |
| 428 /** | 416 /** |
| 429 * @param {!ConsoleAgent.CallFrame} callFrame | 417 * @param {!ConsoleAgent.CallFrame} callFrame |
| 430 */ | 418 */ |
| 431 function linkifyCallFrame(callFrame) | 419 function linkifyCallFrame(callFrame) |
| 432 { | 420 { |
| 433 return linkifyLocation(callFrame.scriptId, callFrame.url, callFrame.line
Number, callFrame.columnNumber); | 421 return linkifyLocation(callFrame.scriptId, callFrame.url, callFrame.line
Number, callFrame.columnNumber); |
| 434 } | 422 } |
| 435 | 423 |
| (...skipping 28 matching lines...) Expand all Loading... |
| 464 default: | 452 default: |
| 465 return false; | 453 return false; |
| 466 } | 454 } |
| 467 } | 455 } |
| 468 | 456 |
| 469 /** | 457 /** |
| 470 * @param {!WebInspector.TimelineModel.Record} record | 458 * @param {!WebInspector.TimelineModel.Record} record |
| 471 * @param {!WebInspector.TimelineModel} model | 459 * @param {!WebInspector.TimelineModel} model |
| 472 * @param {!WebInspector.Linkifier} linkifier | 460 * @param {!WebInspector.Linkifier} linkifier |
| 473 * @param {function(!DocumentFragment)} callback | 461 * @param {function(!DocumentFragment)} callback |
| 474 * @param {boolean} loadedFromFile | |
| 475 */ | 462 */ |
| 476 WebInspector.TimelineUIUtilsImpl.generateDetailsContent = function(record, model
, linkifier, callback, loadedFromFile) | 463 WebInspector.TimelineUIUtilsImpl.generateDetailsContent = function(record, model
, linkifier, callback) |
| 477 { | 464 { |
| 478 var imageElement = /** @type {?Element} */ (record.getUserObject("TimelineUI
Utils::preview-element") || null); | 465 var imageElement = /** @type {?Element} */ (record.getUserObject("TimelineUI
Utils::preview-element") || null); |
| 479 var relatedNode = null; | 466 var relatedNode = null; |
| 480 var recordData = record.data(); | 467 var recordData = record.data(); |
| 481 var barrier = new CallbackBarrier(); | 468 var barrier = new CallbackBarrier(); |
| 482 if (!imageElement && WebInspector.TimelineUIUtilsImpl._needsPreviewElement(r
ecord.type())) | 469 var target = record.target(); |
| 483 WebInspector.DOMPresentationUtils.buildImagePreviewContents(record.targe
t(), recordData["url"], false, barrier.createCallback(saveImage)); | 470 if (!imageElement && WebInspector.TimelineUIUtilsImpl._needsPreviewElement(r
ecord.type()) && target) |
| 484 if (recordData["backendNodeId"]) | 471 WebInspector.DOMPresentationUtils.buildImagePreviewContents(target, reco
rdData["url"], false, barrier.createCallback(saveImage)); |
| 485 record.target().domModel.pushNodesByBackendIdsToFrontend([recordData["ba
ckendNodeId"]], barrier.createCallback(setRelatedNode)); | 472 if (recordData["backendNodeId"] && target) |
| 473 target.domModel.pushNodesByBackendIdsToFrontend([recordData["backendNode
Id"]], barrier.createCallback(setRelatedNode)); |
| 486 barrier.callWhenDone(callbackWrapper); | 474 barrier.callWhenDone(callbackWrapper); |
| 487 | 475 |
| 488 /** | 476 /** |
| 489 * @param {!Element=} element | 477 * @param {!Element=} element |
| 490 */ | 478 */ |
| 491 function saveImage(element) | 479 function saveImage(element) |
| 492 { | 480 { |
| 493 imageElement = element || null; | 481 imageElement = element || null; |
| 494 record.setUserObject("TimelineUIUtils::preview-element", element); | 482 record.setUserObject("TimelineUIUtils::preview-element", element); |
| 495 } | 483 } |
| 496 | 484 |
| 497 /** | 485 /** |
| 498 * @param {?Array.<!DOMAgent.NodeId>} nodeIds | 486 * @param {?Array.<!DOMAgent.NodeId>} nodeIds |
| 499 */ | 487 */ |
| 500 function setRelatedNode(nodeIds) | 488 function setRelatedNode(nodeIds) |
| 501 { | 489 { |
| 502 if (nodeIds) | 490 if (nodeIds && target) |
| 503 relatedNode = record.target().domModel.nodeForId(nodeIds[0]); | 491 relatedNode = target.domModel.nodeForId(nodeIds[0]); |
| 504 } | 492 } |
| 505 | 493 |
| 506 function callbackWrapper() | 494 function callbackWrapper() |
| 507 { | 495 { |
| 508 callback(WebInspector.TimelineUIUtilsImpl._generateDetailsContentSynchro
nously(record, model, linkifier, imageElement, relatedNode, loadedFromFile)); | 496 callback(WebInspector.TimelineUIUtilsImpl._generateDetailsContentSynchro
nously(record, model, linkifier, imageElement, relatedNode)); |
| 509 } | 497 } |
| 510 } | 498 } |
| 511 | 499 |
| 512 /** | 500 /** |
| 513 * @param {!WebInspector.TimelineModel.Record} record | 501 * @param {!WebInspector.TimelineModel.Record} record |
| 514 * @param {!WebInspector.TimelineModel} model | 502 * @param {!WebInspector.TimelineModel} model |
| 515 * @param {!WebInspector.Linkifier} linkifier | 503 * @param {!WebInspector.Linkifier} linkifier |
| 516 * @param {?Element} imagePreviewElement | 504 * @param {?Element} imagePreviewElement |
| 517 * @param {?WebInspector.DOMNode} relatedNode | 505 * @param {?WebInspector.DOMNode} relatedNode |
| 518 * @param {boolean} loadedFromFile | |
| 519 * @return {!DocumentFragment} | 506 * @return {!DocumentFragment} |
| 520 */ | 507 */ |
| 521 WebInspector.TimelineUIUtilsImpl._generateDetailsContentSynchronously = function
(record, model, linkifier, imagePreviewElement, relatedNode, loadedFromFile) | 508 WebInspector.TimelineUIUtilsImpl._generateDetailsContentSynchronously = function
(record, model, linkifier, imagePreviewElement, relatedNode) |
| 522 { | 509 { |
| 523 var fragment = document.createDocumentFragment(); | 510 var fragment = document.createDocumentFragment(); |
| 524 var aggregatedStats = {}; | 511 var aggregatedStats = {}; |
| 525 WebInspector.TimelineUIUtilsImpl.aggregateTimeForRecord(aggregatedStats, rec
ord); | 512 WebInspector.TimelineUIUtilsImpl.aggregateTimeForRecord(aggregatedStats, rec
ord); |
| 526 if (record.children().length) | 513 if (record.children().length) |
| 527 fragment.appendChild(WebInspector.TimelineUIUtils.generatePieChart(aggre
gatedStats, WebInspector.TimelineUIUtilsImpl.recordStyle(record).category, recor
d.selfTime())); | 514 fragment.appendChild(WebInspector.TimelineUIUtils.generatePieChart(aggre
gatedStats, WebInspector.TimelineUIUtilsImpl.recordStyle(record).category, recor
d.selfTime())); |
| 528 else | 515 else |
| 529 fragment.appendChild(WebInspector.TimelineUIUtils.generatePieChart(aggre
gatedStats)); | 516 fragment.appendChild(WebInspector.TimelineUIUtils.generatePieChart(aggre
gatedStats)); |
| 530 | 517 |
| 531 const recordTypes = WebInspector.TimelineModel.RecordType; | 518 const recordTypes = WebInspector.TimelineModel.RecordType; |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 641 contentHelper.appendTextRow(WebInspector.UIString("URL"), initia
torData["webSocketURL"]); | 628 contentHelper.appendTextRow(WebInspector.UIString("URL"), initia
torData["webSocketURL"]); |
| 642 if (typeof initiatorData["webSocketProtocol"] !== "undefined") | 629 if (typeof initiatorData["webSocketProtocol"] !== "undefined") |
| 643 contentHelper.appendTextRow(WebInspector.UIString("WebSocket Pro
tocol"), initiatorData["webSocketProtocol"]); | 630 contentHelper.appendTextRow(WebInspector.UIString("WebSocket Pro
tocol"), initiatorData["webSocketProtocol"]); |
| 644 if (typeof recordData["message"] !== "undefined") | 631 if (typeof recordData["message"] !== "undefined") |
| 645 contentHelper.appendTextRow(WebInspector.UIString("Message"), re
cordData["message"]); | 632 contentHelper.appendTextRow(WebInspector.UIString("Message"), re
cordData["message"]); |
| 646 break; | 633 break; |
| 647 case recordTypes.EmbedderCallback: | 634 case recordTypes.EmbedderCallback: |
| 648 contentHelper.appendTextRow(WebInspector.UIString("Callback Function
"), recordData["callbackName"]); | 635 contentHelper.appendTextRow(WebInspector.UIString("Callback Function
"), recordData["callbackName"]); |
| 649 break; | 636 break; |
| 650 default: | 637 default: |
| 651 var detailsNode = WebInspector.TimelineUIUtilsImpl.buildDetailsNode(
record, linkifier, loadedFromFile); | 638 var detailsNode = WebInspector.TimelineUIUtilsImpl.buildDetailsNode(
record, linkifier); |
| 652 if (detailsNode) | 639 if (detailsNode) |
| 653 contentHelper.appendElementRow(WebInspector.UIString("Details"),
detailsNode); | 640 contentHelper.appendElementRow(WebInspector.UIString("Details"),
detailsNode); |
| 654 break; | 641 break; |
| 655 } | 642 } |
| 656 | 643 |
| 657 if (relatedNode) | 644 if (relatedNode) |
| 658 contentHelper.appendElementRow(relatedNodeLabel || WebInspector.UIString
("Related node"), WebInspector.DOMPresentationUtils.linkifyNodeReference(related
Node)); | 645 contentHelper.appendElementRow(relatedNodeLabel || WebInspector.UIString
("Related node"), WebInspector.DOMPresentationUtils.linkifyNodeReference(related
Node)); |
| 659 | 646 |
| 660 if (recordData["scriptName"] && record.type() !== recordTypes.FunctionCall) | 647 if (recordData["scriptName"] && record.type() !== recordTypes.FunctionCall) |
| 661 contentHelper.appendLocationRow(WebInspector.UIString("Function Call"),
recordData["scriptName"], recordData["scriptLine"]); | 648 contentHelper.appendLocationRow(WebInspector.UIString("Function Call"),
recordData["scriptName"], recordData["scriptLine"]); |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 696 else if (recordType === recordTypes.TimeStamp) | 683 else if (recordType === recordTypes.TimeStamp) |
| 697 eventDivider.className += " resources-orange-divider"; | 684 eventDivider.className += " resources-orange-divider"; |
| 698 else if (recordType === recordTypes.BeginFrame) | 685 else if (recordType === recordTypes.BeginFrame) |
| 699 eventDivider.className += " timeline-frame-divider"; | 686 eventDivider.className += " timeline-frame-divider"; |
| 700 | 687 |
| 701 if (title) | 688 if (title) |
| 702 eventDivider.title = title; | 689 eventDivider.title = title; |
| 703 | 690 |
| 704 return eventDivider; | 691 return eventDivider; |
| 705 } | 692 } |
| OLD | NEW |