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.TracingTimelineUIUtils = function() | 9 WebInspector.TracingTimelineUIUtils = function() |
10 { | 10 { |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
85 }, | 85 }, |
86 | 86 |
87 /** | 87 /** |
88 * @param {!WebInspector.TimelineModel.Record} record | 88 * @param {!WebInspector.TimelineModel.Record} record |
89 * @param {!WebInspector.Linkifier} linkifier | 89 * @param {!WebInspector.Linkifier} linkifier |
90 * @param {boolean} loadedFromFile | 90 * @param {boolean} loadedFromFile |
91 * @return {?Node} | 91 * @return {?Node} |
92 */ | 92 */ |
93 buildDetailsNode: function(record, linkifier, loadedFromFile) | 93 buildDetailsNode: function(record, linkifier, loadedFromFile) |
94 { | 94 { |
95 return WebInspector.TracingTimelineUIUtils.buildDetailsNodeForTraceEvent
(record.traceEvent(), linkifier, loadedFromFile, record.target()); | 95 return WebInspector.TracingTimelineUIUtils.buildDetailsNodeForTraceEvent
(record.traceEvent(), linkifier); |
96 }, | 96 }, |
97 | 97 |
98 /** | 98 /** |
99 * @param {!WebInspector.TimelineModel.Record} record | 99 * @param {!WebInspector.TimelineModel.Record} record |
100 * @param {!WebInspector.TimelineModel} model | 100 * @param {!WebInspector.TimelineModel} model |
101 * @param {!WebInspector.Linkifier} linkifier | 101 * @param {!WebInspector.Linkifier} linkifier |
102 * @param {function(!DocumentFragment)} callback | 102 * @param {function(!DocumentFragment)} callback |
103 * @param {boolean} loadedFromFile | 103 * @param {boolean} loadedFromFile |
104 */ | 104 */ |
105 generateDetailsContent: function(record, model, linkifier, callback, loadedF
romFile) | 105 generateDetailsContent: function(record, model, linkifier, callback, loadedF
romFile) |
106 { | 106 { |
107 if (!(model instanceof WebInspector.TracingTimelineModel)) | 107 if (!(model instanceof WebInspector.TracingTimelineModel)) |
108 throw new Error("Illegal argument."); | 108 throw new Error("Illegal argument."); |
109 var tracingTimelineModel = /** @type {!WebInspector.TracingTimelineModel
} */ (model); | 109 var tracingTimelineModel = /** @type {!WebInspector.TracingTimelineModel
} */ (model); |
110 WebInspector.TracingTimelineUIUtils.buildTraceEventDetails(record.traceE
vent(), tracingTimelineModel, linkifier, callback, loadedFromFile, record.target
()); | 110 WebInspector.TracingTimelineUIUtils.buildTraceEventDetails(record.traceE
vent(), tracingTimelineModel, linkifier, callback, loadedFromFile); |
111 }, | 111 }, |
112 | 112 |
113 /** | 113 /** |
114 * @return {!Element} | 114 * @return {!Element} |
115 */ | 115 */ |
116 createBeginFrameDivider: function() | 116 createBeginFrameDivider: function() |
117 { | 117 { |
118 return this.createEventDivider(WebInspector.TracingTimelineModel.RecordT
ype.BeginFrame); | 118 return this.createEventDivider(WebInspector.TracingTimelineModel.RecordT
ype.BeginFrame); |
119 }, | 119 }, |
120 | 120 |
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
323 if (record.type() === recordTypes.MarkFirstPaint) | 323 if (record.type() === recordTypes.MarkFirstPaint) |
324 return true; | 324 return true; |
325 if (record.type() === recordTypes.MarkDOMContent || record.type() === record
Types.MarkLoad) | 325 if (record.type() === recordTypes.MarkDOMContent || record.type() === record
Types.MarkLoad) |
326 return record.data()["isMainFrame"]; | 326 return record.data()["isMainFrame"]; |
327 return false; | 327 return false; |
328 } | 328 } |
329 | 329 |
330 /** | 330 /** |
331 * @param {!WebInspector.TracingModel.Event} event | 331 * @param {!WebInspector.TracingModel.Event} event |
332 * @param {!WebInspector.Linkifier} linkifier | 332 * @param {!WebInspector.Linkifier} linkifier |
333 * @param {boolean} loadedFromFile | |
334 * @param {!WebInspector.Target} target | |
335 * @return {?Node} | 333 * @return {?Node} |
336 */ | 334 */ |
337 WebInspector.TracingTimelineUIUtils.buildDetailsNodeForTraceEvent = function(eve
nt, linkifier, loadedFromFile, target) | 335 WebInspector.TracingTimelineUIUtils.buildDetailsNodeForTraceEvent = function(eve
nt, linkifier) |
338 { | 336 { |
339 var recordType = WebInspector.TracingTimelineModel.RecordType; | 337 var recordType = WebInspector.TracingTimelineModel.RecordType; |
340 | 338 var target = event.thread.target(); |
341 var details; | 339 var details; |
342 var detailsText; | 340 var detailsText; |
343 var eventData = event.args.data; | 341 var eventData = event.args.data; |
344 switch (event.name) { | 342 switch (event.name) { |
345 case recordType.GCEvent: | 343 case recordType.GCEvent: |
346 var delta = event.args["usedHeapSizeBefore"] - event.args["usedHeapSizeA
fter"]; | 344 var delta = event.args["usedHeapSizeBefore"] - event.args["usedHeapSizeA
fter"]; |
347 detailsText = WebInspector.UIString("%s collected", Number.bytesToString
(delta)); | 345 detailsText = WebInspector.UIString("%s collected", Number.bytesToString
(delta)); |
348 break; | 346 break; |
349 case recordType.TimerFire: | 347 case recordType.TimerFire: |
350 detailsText = eventData["timerId"]; | 348 detailsText = eventData["timerId"]; |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
426 return details; | 424 return details; |
427 | 425 |
428 /** | 426 /** |
429 * @param {string} scriptId | 427 * @param {string} scriptId |
430 * @param {string} url | 428 * @param {string} url |
431 * @param {number} lineNumber | 429 * @param {number} lineNumber |
432 * @param {number=} columnNumber | 430 * @param {number=} columnNumber |
433 */ | 431 */ |
434 function linkifyLocation(scriptId, url, lineNumber, columnNumber) | 432 function linkifyLocation(scriptId, url, lineNumber, columnNumber) |
435 { | 433 { |
436 if (!loadedFromFile && scriptId !== "0") { | |
437 var location = new WebInspector.DebuggerModel.Location( | |
438 target, | |
439 scriptId, | |
440 lineNumber - 1, | |
441 (columnNumber || 1) - 1); | |
442 return linkifier.linkifyRawLocation(location, "timeline-details"); | |
443 } | |
444 | |
445 if (!url) | 434 if (!url) |
446 return null; | 435 return null; |
447 | 436 |
448 // FIXME(62725): stack trace line/column numbers are one-based. | 437 // FIXME(62725): stack trace line/column numbers are one-based. |
449 columnNumber = columnNumber ? columnNumber - 1 : 0; | 438 return linkifier.linkifyLocationByScriptId(target, scriptId, url, lineNu
mber - 1, (columnNumber ||1) - 1, "timeline-details"); |
450 return linkifier.linkifyLocation(target, url, lineNumber - 1, columnNumb
er, "timeline-details"); | |
451 } | 439 } |
452 | 440 |
453 /** | 441 /** |
454 * @param {!ConsoleAgent.CallFrame} callFrame | 442 * @param {!ConsoleAgent.CallFrame} callFrame |
455 */ | 443 */ |
456 function linkifyCallFrame(callFrame) | 444 function linkifyCallFrame(callFrame) |
457 { | 445 { |
458 return linkifyLocation(callFrame.scriptId, callFrame.url, callFrame.line
Number, callFrame.columnNumber); | 446 return linkifyLocation(callFrame.scriptId, callFrame.url, callFrame.line
Number, callFrame.columnNumber); |
459 } | 447 } |
460 | 448 |
(...skipping 13 matching lines...) Expand all Loading... |
474 return linkifyCallFrame(stackTrace[0]); | 462 return linkifyCallFrame(stackTrace[0]); |
475 } | 463 } |
476 } | 464 } |
477 | 465 |
478 /** | 466 /** |
479 * @param {!WebInspector.TracingModel.Event} event | 467 * @param {!WebInspector.TracingModel.Event} event |
480 * @param {!WebInspector.TracingTimelineModel} model | 468 * @param {!WebInspector.TracingTimelineModel} model |
481 * @param {!WebInspector.Linkifier} linkifier | 469 * @param {!WebInspector.Linkifier} linkifier |
482 * @param {function(!DocumentFragment)} callback | 470 * @param {function(!DocumentFragment)} callback |
483 * @param {boolean} loadedFromFile | 471 * @param {boolean} loadedFromFile |
484 * @param {!WebInspector.Target} target | |
485 */ | 472 */ |
486 WebInspector.TracingTimelineUIUtils.buildTraceEventDetails = function(event, mod
el, linkifier, callback, loadedFromFile, target) | 473 WebInspector.TracingTimelineUIUtils.buildTraceEventDetails = function(event, mod
el, linkifier, callback, loadedFromFile) |
487 { | 474 { |
| 475 var target = event.thread.target(); |
| 476 //FIXME: support here nullable target |
| 477 if (!target) |
| 478 return; |
| 479 |
488 var relatedNode = null; | 480 var relatedNode = null; |
489 var barrier = new CallbackBarrier(); | 481 var barrier = new CallbackBarrier(); |
490 if (!event.previewElement) { | 482 if (!event.previewElement) { |
491 if (event.imageURL) | 483 if (event.imageURL) |
492 WebInspector.DOMPresentationUtils.buildImagePreviewContents(target,
event.imageURL, false, barrier.createCallback(saveImage)); | 484 WebInspector.DOMPresentationUtils.buildImagePreviewContents(target,
event.imageURL, false, barrier.createCallback(saveImage)); |
493 else if (event.picture) | 485 else if (event.picture) |
494 WebInspector.TracingTimelineUIUtils.buildPicturePreviewContent(model
.target(), event.picture, barrier.createCallback(saveImage)); | 486 WebInspector.TracingTimelineUIUtils.buildPicturePreviewContent(targe
t, event.picture, barrier.createCallback(saveImage)); |
495 } | 487 } |
496 if (event.backendNodeId) | 488 if (event.backendNodeId) |
497 target.domModel.pushNodesByBackendIdsToFrontend([event.backendNodeId], b
arrier.createCallback(setRelatedNode)); | 489 target.domModel.pushNodesByBackendIdsToFrontend([event.backendNodeId], b
arrier.createCallback(setRelatedNode)); |
498 barrier.callWhenDone(callbackWrapper); | 490 barrier.callWhenDone(callbackWrapper); |
499 | 491 |
500 /** | 492 /** |
501 * @param {!Element=} element | 493 * @param {!Element=} element |
502 */ | 494 */ |
503 function saveImage(element) | 495 function saveImage(element) |
504 { | 496 { |
505 event.previewElement = element || null; | 497 event.previewElement = element || null; |
506 } | 498 } |
507 | 499 |
508 /** | 500 /** |
509 * @param {?Array.<!DOMAgent.NodeId>} nodeIds | 501 * @param {?Array.<!DOMAgent.NodeId>} nodeIds |
510 */ | 502 */ |
511 function setRelatedNode(nodeIds) | 503 function setRelatedNode(nodeIds) |
512 { | 504 { |
513 if (nodeIds) | 505 if (nodeIds) |
514 relatedNode = target.domModel.nodeForId(nodeIds[0]); | 506 relatedNode = target.domModel.nodeForId(nodeIds[0]); |
515 } | 507 } |
516 | 508 |
517 function callbackWrapper() | 509 function callbackWrapper() |
518 { | 510 { |
519 callback(WebInspector.TracingTimelineUIUtils._buildTraceEventDetailsSync
hronously(event, model, linkifier, relatedNode, loadedFromFile, target)); | 511 callback(WebInspector.TracingTimelineUIUtils._buildTraceEventDetailsSync
hronously(event, model, linkifier, relatedNode, loadedFromFile, /** @type {!WebI
nspector.Target} */ (target))); |
520 } | 512 } |
521 } | 513 } |
522 | 514 |
523 /** | 515 /** |
524 * @param {!WebInspector.TracingModel.Event} event | 516 * @param {!WebInspector.TracingModel.Event} event |
525 * @param {!WebInspector.TracingTimelineModel} model | 517 * @param {!WebInspector.TracingTimelineModel} model |
526 * @param {!WebInspector.Linkifier} linkifier | 518 * @param {!WebInspector.Linkifier} linkifier |
527 * @param {?WebInspector.DOMNode} relatedNode | 519 * @param {?WebInspector.DOMNode} relatedNode |
528 * @param {boolean} loadedFromFile | 520 * @param {boolean} loadedFromFile |
529 * @param {!WebInspector.Target} target | 521 * @param {!WebInspector.Target} target |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
646 contentHelper.appendTextRow(WebInspector.UIString("URL"), initiatorD
ata["webSocketURL"]); | 638 contentHelper.appendTextRow(WebInspector.UIString("URL"), initiatorD
ata["webSocketURL"]); |
647 if (typeof initiatorData["webSocketProtocol"] !== "undefined") | 639 if (typeof initiatorData["webSocketProtocol"] !== "undefined") |
648 contentHelper.appendTextRow(WebInspector.UIString("WebSocket Protoco
l"), initiatorData["webSocketProtocol"]); | 640 contentHelper.appendTextRow(WebInspector.UIString("WebSocket Protoco
l"), initiatorData["webSocketProtocol"]); |
649 if (typeof eventData["message"] !== "undefined") | 641 if (typeof eventData["message"] !== "undefined") |
650 contentHelper.appendTextRow(WebInspector.UIString("Message"), eventD
ata["message"]); | 642 contentHelper.appendTextRow(WebInspector.UIString("Message"), eventD
ata["message"]); |
651 break; | 643 break; |
652 case recordTypes.EmbedderCallback: | 644 case recordTypes.EmbedderCallback: |
653 contentHelper.appendTextRow(WebInspector.UIString("Callback Function"),
eventData["callbackName"]); | 645 contentHelper.appendTextRow(WebInspector.UIString("Callback Function"),
eventData["callbackName"]); |
654 break; | 646 break; |
655 default: | 647 default: |
656 var detailsNode = WebInspector.TracingTimelineUIUtils.buildDetailsNodeFo
rTraceEvent(event, linkifier, loadedFromFile, target); | 648 var detailsNode = WebInspector.TracingTimelineUIUtils.buildDetailsNodeFo
rTraceEvent(event, linkifier); |
657 if (detailsNode) | 649 if (detailsNode) |
658 contentHelper.appendElementRow(WebInspector.UIString("Details"), det
ailsNode); | 650 contentHelper.appendElementRow(WebInspector.UIString("Details"), det
ailsNode); |
659 break; | 651 break; |
660 } | 652 } |
661 | 653 |
662 if (relatedNode) | 654 if (relatedNode) |
663 contentHelper.appendElementRow(relatedNodeLabel || WebInspector.UIString
("Related node"), WebInspector.DOMPresentationUtils.linkifyNodeReference(related
Node)); | 655 contentHelper.appendElementRow(relatedNodeLabel || WebInspector.UIString
("Related node"), WebInspector.DOMPresentationUtils.linkifyNodeReference(related
Node)); |
664 | 656 |
665 if (eventData && eventData["scriptName"] && event.name !== recordTypes.Funct
ionCall) | 657 if (eventData && eventData["scriptName"] && event.name !== recordTypes.Funct
ionCall) |
666 contentHelper.appendLocationRow(WebInspector.UIString("Function Call"),
eventData["scriptName"], eventData["scriptLine"]); | 658 contentHelper.appendLocationRow(WebInspector.UIString("Function Call"),
eventData["scriptName"], eventData["scriptLine"]); |
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
803 return result; | 795 return result; |
804 } | 796 } |
805 | 797 |
806 /** | 798 /** |
807 * @return {!WebInspector.TracingTimelineModel.Filter} | 799 * @return {!WebInspector.TracingTimelineModel.Filter} |
808 */ | 800 */ |
809 WebInspector.TracingTimelineUIUtils.hiddenEventsFilter = function() | 801 WebInspector.TracingTimelineUIUtils.hiddenEventsFilter = function() |
810 { | 802 { |
811 return new WebInspector.TracingTimelineModel.InclusiveEventNameFilter(WebIns
pector.TracingTimelineUIUtils._visibleTypes()); | 803 return new WebInspector.TracingTimelineModel.InclusiveEventNameFilter(WebIns
pector.TracingTimelineUIUtils._visibleTypes()); |
812 } | 804 } |
OLD | NEW |