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 |