Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(37)

Side by Side Diff: Source/devtools/front_end/timeline/TimelineUIUtilsImpl.js

Issue 400143002: DevTools: Make target on TimelineRecord nullable (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Rebase on master Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
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
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
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
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 }
OLDNEW
« no previous file with comments | « Source/devtools/front_end/timeline/TimelineUIUtils.js ('k') | Source/devtools/front_end/timeline/TimelineView.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698