| 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 213 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 224 } | 224 } |
| 225 | 225 |
| 226 /** | 226 /** |
| 227 * @param {!WebInspector.TracingModel.Event} traceEvent | 227 * @param {!WebInspector.TracingModel.Event} traceEvent |
| 228 * @param {!RegExp} regExp | 228 * @param {!RegExp} regExp |
| 229 * @return {boolean} | 229 * @return {boolean} |
| 230 */ | 230 */ |
| 231 static testContentMatching(traceEvent, regExp) { | 231 static testContentMatching(traceEvent, regExp) { |
| 232 var title = WebInspector.TimelineUIUtils.eventStyle(traceEvent).title; | 232 var title = WebInspector.TimelineUIUtils.eventStyle(traceEvent).title; |
| 233 var tokens = [title]; | 233 var tokens = [title]; |
| 234 if (traceEvent.url) | 234 var url = WebInspector.TimelineData.forEvent(traceEvent).url; |
| 235 tokens.push(traceEvent.url); | 235 if (url) |
| 236 tokens.push(url); |
| 236 for (var argName in traceEvent.args) { | 237 for (var argName in traceEvent.args) { |
| 237 var argValue = traceEvent.args[argName]; | 238 var argValue = traceEvent.args[argName]; |
| 238 for (var key in argValue) | 239 for (var key in argValue) |
| 239 tokens.push(argValue[key]); | 240 tokens.push(argValue[key]); |
| 240 } | 241 } |
| 241 return regExp.test(tokens.join('|')); | 242 return regExp.test(tokens.join('|')); |
| 242 } | 243 } |
| 243 | 244 |
| 244 /** | 245 /** |
| 245 * @param {!WebInspector.TimelineModel.Record} record | 246 * @param {!WebInspector.TimelineModel.Record} record |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 299 return title; | 300 return title; |
| 300 if (event.name === WebInspector.TimelineModel.RecordType.TimeStamp) | 301 if (event.name === WebInspector.TimelineModel.RecordType.TimeStamp) |
| 301 return WebInspector.UIString('%s: %s', title, event.args['data']['message'
]); | 302 return WebInspector.UIString('%s: %s', title, event.args['data']['message'
]); |
| 302 if (event.name === WebInspector.TimelineModel.RecordType.Animation && event.
args['data'] && | 303 if (event.name === WebInspector.TimelineModel.RecordType.Animation && event.
args['data'] && |
| 303 event.args['data']['name']) | 304 event.args['data']['name']) |
| 304 return WebInspector.UIString('%s: %s', title, event.args['data']['name']); | 305 return WebInspector.UIString('%s: %s', title, event.args['data']['name']); |
| 305 return title; | 306 return title; |
| 306 } | 307 } |
| 307 | 308 |
| 308 /** | 309 /** |
| 309 * @param {!WebInspector.TracingModel.Event} event | |
| 310 * @return {?string} | |
| 311 */ | |
| 312 static eventURL(event) { | |
| 313 if (event.url) | |
| 314 return event.url; | |
| 315 var data = event.args['data'] || event.args['beginData']; | |
| 316 return data && data.url || null; | |
| 317 } | |
| 318 | |
| 319 /** | |
| 320 * !Map<!WebInspector.TimelineIRModel.Phases, !{color: string, label: string}> | 310 * !Map<!WebInspector.TimelineIRModel.Phases, !{color: string, label: string}> |
| 321 */ | 311 */ |
| 322 static _interactionPhaseStyles() { | 312 static _interactionPhaseStyles() { |
| 323 var map = WebInspector.TimelineUIUtils._interactionPhaseStylesMap; | 313 var map = WebInspector.TimelineUIUtils._interactionPhaseStylesMap; |
| 324 if (!map) { | 314 if (!map) { |
| 325 map = new Map([ | 315 map = new Map([ |
| 326 [WebInspector.TimelineIRModel.Phases.Idle, {color: 'white', label: 'Idle
'}], | 316 [WebInspector.TimelineIRModel.Phases.Idle, {color: 'white', label: 'Idle
'}], |
| 327 [ | 317 [ |
| 328 WebInspector.TimelineIRModel.Phases.Response, | 318 WebInspector.TimelineIRModel.Phases.Response, |
| 329 {color: 'hsl(43, 83%, 64%)', label: WebInspector.UIString('Response')} | 319 {color: 'hsl(43, 83%, 64%)', label: WebInspector.UIString('Response')} |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 369 | 359 |
| 370 /** | 360 /** |
| 371 * @param {!Protocol.Runtime.CallFrame} frame | 361 * @param {!Protocol.Runtime.CallFrame} frame |
| 372 * @return {boolean} | 362 * @return {boolean} |
| 373 */ | 363 */ |
| 374 static isUserFrame(frame) { | 364 static isUserFrame(frame) { |
| 375 return frame.scriptId !== '0' && !(frame.url && frame.url.startsWith('native
')); | 365 return frame.scriptId !== '0' && !(frame.url && frame.url.startsWith('native
')); |
| 376 } | 366 } |
| 377 | 367 |
| 378 /** | 368 /** |
| 379 * @param {!WebInspector.TracingModel.Event} event | |
| 380 * @return {?Protocol.Runtime.CallFrame} | |
| 381 */ | |
| 382 static topStackFrame(event) { | |
| 383 var stackTrace = event.stackTrace || event.initiator && event.initiator.stac
kTrace; | |
| 384 return stackTrace && stackTrace.length ? stackTrace[0] : null; | |
| 385 } | |
| 386 | |
| 387 /** | |
| 388 * @param {!WebInspector.TimelineModel.NetworkRequest} request | 369 * @param {!WebInspector.TimelineModel.NetworkRequest} request |
| 389 * @return {!WebInspector.TimelineUIUtils.NetworkCategory} | 370 * @return {!WebInspector.TimelineUIUtils.NetworkCategory} |
| 390 */ | 371 */ |
| 391 static networkRequestCategory(request) { | 372 static networkRequestCategory(request) { |
| 392 var categories = WebInspector.TimelineUIUtils.NetworkCategory; | 373 var categories = WebInspector.TimelineUIUtils.NetworkCategory; |
| 393 switch (request.mimeType) { | 374 switch (request.mimeType) { |
| 394 case 'text/html': | 375 case 'text/html': |
| 395 return categories.HTML; | 376 return categories.HTML; |
| 396 case 'application/javascript': | 377 case 'application/javascript': |
| 397 case 'application/x-javascript': | 378 case 'application/x-javascript': |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 497 case recordType.WebSocketReceiveHandshakeResponse: | 478 case recordType.WebSocketReceiveHandshakeResponse: |
| 498 case recordType.WebSocketDestroy: | 479 case recordType.WebSocketDestroy: |
| 499 case recordType.ResourceSendRequest: | 480 case recordType.ResourceSendRequest: |
| 500 case recordType.ResourceReceivedData: | 481 case recordType.ResourceReceivedData: |
| 501 case recordType.ResourceReceiveResponse: | 482 case recordType.ResourceReceiveResponse: |
| 502 case recordType.ResourceFinish: | 483 case recordType.ResourceFinish: |
| 503 case recordType.PaintImage: | 484 case recordType.PaintImage: |
| 504 case recordType.DecodeImage: | 485 case recordType.DecodeImage: |
| 505 case recordType.ResizeImage: | 486 case recordType.ResizeImage: |
| 506 case recordType.DecodeLazyPixelRef: | 487 case recordType.DecodeLazyPixelRef: |
| 507 if (event.url) | 488 var url = WebInspector.TimelineData.forEvent(event).url; |
| 508 detailsText = WebInspector.displayNameForURL(event.url); | 489 if (url) |
| 490 detailsText = WebInspector.displayNameForURL(url); |
| 509 break; | 491 break; |
| 510 | 492 |
| 511 case recordType.EmbedderCallback: | 493 case recordType.EmbedderCallback: |
| 512 detailsText = eventData['callbackName']; | 494 detailsText = eventData['callbackName']; |
| 513 break; | 495 break; |
| 514 | 496 |
| 515 case recordType.Animation: | 497 case recordType.Animation: |
| 516 detailsText = eventData && eventData['name']; | 498 detailsText = eventData && eventData['name']; |
| 517 break; | 499 break; |
| 518 | 500 |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 552 if (!rawLocation) | 534 if (!rawLocation) |
| 553 return null; | 535 return null; |
| 554 var uiLocation = WebInspector.debuggerWorkspaceBinding.rawLocationToUILoca
tion(rawLocation); | 536 var uiLocation = WebInspector.debuggerWorkspaceBinding.rawLocationToUILoca
tion(rawLocation); |
| 555 return uiLocation.linkText(); | 537 return uiLocation.linkText(); |
| 556 } | 538 } |
| 557 | 539 |
| 558 /** | 540 /** |
| 559 * @return {?string} | 541 * @return {?string} |
| 560 */ | 542 */ |
| 561 function linkifyTopCallFrameAsText() { | 543 function linkifyTopCallFrameAsText() { |
| 562 var frame = WebInspector.TimelineUIUtils.topStackFrame(event); | 544 var frame = WebInspector.TimelineData.forEvent(event).topFrame(); |
| 563 if (!frame) | 545 if (!frame) |
| 564 return null; | 546 return null; |
| 565 var text = linkifyLocationAsText(frame.scriptId, frame.lineNumber, frame.c
olumnNumber); | 547 var text = linkifyLocationAsText(frame.scriptId, frame.lineNumber, frame.c
olumnNumber); |
| 566 if (!text) { | 548 if (!text) { |
| 567 text = frame.url; | 549 text = frame.url; |
| 568 if (typeof frame.lineNumber === 'number') | 550 if (typeof frame.lineNumber === 'number') |
| 569 text += ':' + (frame.lineNumber + 1); | 551 text += ':' + (frame.lineNumber + 1); |
| 570 } | 552 } |
| 571 return text; | 553 return text; |
| 572 } | 554 } |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 604 case recordType.PaintImage: | 586 case recordType.PaintImage: |
| 605 case recordType.DecodeImage: | 587 case recordType.DecodeImage: |
| 606 case recordType.ResizeImage: | 588 case recordType.ResizeImage: |
| 607 case recordType.DecodeLazyPixelRef: | 589 case recordType.DecodeLazyPixelRef: |
| 608 case recordType.XHRReadyStateChange: | 590 case recordType.XHRReadyStateChange: |
| 609 case recordType.XHRLoad: | 591 case recordType.XHRLoad: |
| 610 case recordType.ResourceSendRequest: | 592 case recordType.ResourceSendRequest: |
| 611 case recordType.ResourceReceivedData: | 593 case recordType.ResourceReceivedData: |
| 612 case recordType.ResourceReceiveResponse: | 594 case recordType.ResourceReceiveResponse: |
| 613 case recordType.ResourceFinish: | 595 case recordType.ResourceFinish: |
| 614 if (event.url) | 596 var url = WebInspector.TimelineData.forEvent(event).url; |
| 615 details = WebInspector.linkifyResourceAsNode(event.url); | 597 if (url) |
| 598 details = WebInspector.linkifyResourceAsNode(url); |
| 616 break; | 599 break; |
| 617 case recordType.FunctionCall: | 600 case recordType.FunctionCall: |
| 618 case recordType.JSFrame: | 601 case recordType.JSFrame: |
| 619 details = createElement('span'); | 602 details = createElement('span'); |
| 620 details.createTextChild(WebInspector.beautifyFunctionName(eventData['fun
ctionName'])); | 603 details.createTextChild(WebInspector.beautifyFunctionName(eventData['fun
ctionName'])); |
| 621 var location = linkifyLocation( | 604 var location = linkifyLocation( |
| 622 eventData['scriptId'], eventData['url'], eventData['lineNumber'], ev
entData['columnNumber']); | 605 eventData['scriptId'], eventData['url'], eventData['lineNumber'], ev
entData['columnNumber']); |
| 623 if (location) { | 606 if (location) { |
| 624 details.createTextChild(' @ '); | 607 details.createTextChild(' @ '); |
| 625 details.appendChild(location); | 608 details.appendChild(location); |
| (...skipping 30 matching lines...) Expand all Loading... |
| 656 * @return {?Element} | 639 * @return {?Element} |
| 657 */ | 640 */ |
| 658 function linkifyLocation(scriptId, url, lineNumber, columnNumber) { | 641 function linkifyLocation(scriptId, url, lineNumber, columnNumber) { |
| 659 return linkifier.linkifyScriptLocation(target, scriptId, url, lineNumber,
columnNumber, 'timeline-details'); | 642 return linkifier.linkifyScriptLocation(target, scriptId, url, lineNumber,
columnNumber, 'timeline-details'); |
| 660 } | 643 } |
| 661 | 644 |
| 662 /** | 645 /** |
| 663 * @return {?Element} | 646 * @return {?Element} |
| 664 */ | 647 */ |
| 665 function linkifyTopCallFrame() { | 648 function linkifyTopCallFrame() { |
| 666 var frame = WebInspector.TimelineUIUtils.topStackFrame(event); | 649 var frame = WebInspector.TimelineData.forEvent(event).topFrame(); |
| 667 return frame ? linkifier.maybeLinkifyConsoleCallFrame(target, frame, 'time
line-details') : null; | 650 return frame ? linkifier.maybeLinkifyConsoleCallFrame(target, frame, 'time
line-details') : null; |
| 668 } | 651 } |
| 669 } | 652 } |
| 670 | 653 |
| 671 /** | 654 /** |
| 672 * @param {!WebInspector.TracingModel.Event} event | 655 * @param {!WebInspector.TracingModel.Event} event |
| 673 * @param {!WebInspector.TimelineModel} model | 656 * @param {!WebInspector.TimelineModel} model |
| 674 * @param {!WebInspector.Linkifier} linkifier | 657 * @param {!WebInspector.Linkifier} linkifier |
| 675 * @param {boolean} detailed | 658 * @param {boolean} detailed |
| 676 * @param {function(!DocumentFragment)} callback | 659 * @param {function(!DocumentFragment)} callback |
| 677 */ | 660 */ |
| 678 static buildTraceEventDetails(event, model, linkifier, detailed, callback) { | 661 static buildTraceEventDetails(event, model, linkifier, detailed, callback) { |
| 679 var target = model.targetByEvent(event); | 662 var target = model.targetByEvent(event); |
| 680 if (!target) { | 663 if (!target) { |
| 681 callbackWrapper(); | 664 callbackWrapper(); |
| 682 return; | 665 return; |
| 683 } | 666 } |
| 684 var relatedNodes = null; | 667 var relatedNodes = null; |
| 685 var barrier = new CallbackBarrier(); | 668 var barrier = new CallbackBarrier(); |
| 686 if (!event.previewElement) { | 669 if (!event[WebInspector.TimelineUIUtils._previewElementSymbol]) { |
| 687 if (event.url) | 670 var url = WebInspector.TimelineData.forEvent(event).url; |
| 671 if (url) { |
| 688 WebInspector.DOMPresentationUtils.buildImagePreviewContents( | 672 WebInspector.DOMPresentationUtils.buildImagePreviewContents( |
| 689 target, event.url, false, barrier.createCallback(saveImage)); | 673 target, url, false, barrier.createCallback(saveImage)); |
| 690 else if (event.picture) | 674 } else if (WebInspector.TimelineData.forEvent(event).picture) { |
| 691 WebInspector.TimelineUIUtils.buildPicturePreviewContent(event, target, b
arrier.createCallback(saveImage)); | 675 WebInspector.TimelineUIUtils.buildPicturePreviewContent(event, target, b
arrier.createCallback(saveImage)); |
| 676 } |
| 692 } | 677 } |
| 693 var nodeIdsToResolve = new Set(); | 678 var nodeIdsToResolve = new Set(); |
| 694 if (event.backendNodeId) | 679 var timelineData = WebInspector.TimelineData.forEvent(event); |
| 695 nodeIdsToResolve.add(event.backendNodeId); | 680 if (timelineData.backendNodeId) |
| 696 if (event.invalidationTrackingEvents) | 681 nodeIdsToResolve.add(timelineData.backendNodeId); |
| 697 WebInspector.TimelineUIUtils._collectInvalidationNodeIds(nodeIdsToResolve,
event.invalidationTrackingEvents); | 682 var invalidationTrackingEvents = WebInspector.InvalidationTracker.invalidati
onEventsFor(event); |
| 683 if (invalidationTrackingEvents) |
| 684 WebInspector.TimelineUIUtils._collectInvalidationNodeIds(nodeIdsToResolve,
invalidationTrackingEvents); |
| 698 if (nodeIdsToResolve.size) { | 685 if (nodeIdsToResolve.size) { |
| 699 var domModel = WebInspector.DOMModel.fromTarget(target); | 686 var domModel = WebInspector.DOMModel.fromTarget(target); |
| 700 if (domModel) | 687 if (domModel) |
| 701 domModel.pushNodesByBackendIdsToFrontend(nodeIdsToResolve, barrier.creat
eCallback(setRelatedNodeMap)); | 688 domModel.pushNodesByBackendIdsToFrontend(nodeIdsToResolve, barrier.creat
eCallback(setRelatedNodeMap)); |
| 702 } | 689 } |
| 703 barrier.callWhenDone(callbackWrapper); | 690 barrier.callWhenDone(callbackWrapper); |
| 704 | 691 |
| 705 /** | 692 /** |
| 706 * @param {!Element=} element | 693 * @param {!Element=} element |
| 707 */ | 694 */ |
| 708 function saveImage(element) { | 695 function saveImage(element) { |
| 709 event.previewElement = element || null; | 696 event[WebInspector.TimelineUIUtils._previewElementSymbol] = element || nul
l; |
| 710 } | 697 } |
| 711 | 698 |
| 712 /** | 699 /** |
| 713 * @param {?Map<number, ?WebInspector.DOMNode>} nodeMap | 700 * @param {?Map<number, ?WebInspector.DOMNode>} nodeMap |
| 714 */ | 701 */ |
| 715 function setRelatedNodeMap(nodeMap) { | 702 function setRelatedNodeMap(nodeMap) { |
| 716 relatedNodes = nodeMap; | 703 relatedNodes = nodeMap; |
| 717 } | 704 } |
| 718 | 705 |
| 719 function callbackWrapper() { | 706 function callbackWrapper() { |
| 720 callback(WebInspector.TimelineUIUtils._buildTraceEventDetailsSynchronously
( | 707 callback(WebInspector.TimelineUIUtils._buildTraceEventDetailsSynchronously
( |
| 721 event, model, linkifier, detailed, relatedNodes)); | 708 event, model, linkifier, detailed, relatedNodes)); |
| 722 } | 709 } |
| 723 } | 710 } |
| 724 | 711 |
| 725 /** | 712 /** |
| 726 * @param {!WebInspector.TracingModel.Event} event | 713 * @param {!WebInspector.TracingModel.Event} event |
| 727 * @param {!WebInspector.TimelineModel} model | 714 * @param {!WebInspector.TimelineModel} model |
| 728 * @param {!WebInspector.Linkifier} linkifier | 715 * @param {!WebInspector.Linkifier} linkifier |
| 729 * @param {boolean} detailed | 716 * @param {boolean} detailed |
| 730 * @param {?Map<number, ?WebInspector.DOMNode>} relatedNodesMap | 717 * @param {?Map<number, ?WebInspector.DOMNode>} relatedNodesMap |
| 731 * @return {!DocumentFragment} | 718 * @return {!DocumentFragment} |
| 732 */ | 719 */ |
| 733 static _buildTraceEventDetailsSynchronously(event, model, linkifier, detailed,
relatedNodesMap) { | 720 static _buildTraceEventDetailsSynchronously(event, model, linkifier, detailed,
relatedNodesMap) { |
| 734 var stats = {}; | |
| 735 var recordTypes = WebInspector.TimelineModel.RecordType; | 721 var recordTypes = WebInspector.TimelineModel.RecordType; |
| 736 | |
| 737 // This message may vary per event.name; | 722 // This message may vary per event.name; |
| 738 var relatedNodeLabel; | 723 var relatedNodeLabel; |
| 739 | 724 |
| 740 var contentHelper = new WebInspector.TimelineDetailsContentHelper(model.targ
etByEvent(event), linkifier); | 725 var contentHelper = new WebInspector.TimelineDetailsContentHelper(model.targ
etByEvent(event), linkifier); |
| 741 contentHelper.addSection( | 726 contentHelper.addSection( |
| 742 WebInspector.TimelineUIUtils.eventTitle(event), WebInspector.TimelineUIU
tils.eventStyle(event).category); | 727 WebInspector.TimelineUIUtils.eventTitle(event), WebInspector.TimelineUIU
tils.eventStyle(event).category); |
| 743 | 728 |
| 744 var eventData = event.args['data']; | 729 var eventData = event.args['data']; |
| 745 var initiator = event.initiator; | 730 var timelineData = WebInspector.TimelineData.forEvent(event); |
| 731 var initiator = timelineData.initiator(); |
| 746 | 732 |
| 747 if (event.warning) | 733 if (timelineData.warning) |
| 748 contentHelper.appendWarningRow(event); | 734 contentHelper.appendWarningRow(event); |
| 749 if (event.name === recordTypes.JSFrame && eventData['deoptReason']) | 735 if (event.name === recordTypes.JSFrame && eventData['deoptReason']) |
| 750 contentHelper.appendWarningRow(event, WebInspector.TimelineModel.WarningTy
pe.V8Deopt); | 736 contentHelper.appendWarningRow(event, WebInspector.TimelineModel.WarningTy
pe.V8Deopt); |
| 751 | 737 |
| 752 if (detailed) { | 738 if (detailed) { |
| 753 contentHelper.appendTextRow(WebInspector.UIString('Self Time'), Number.mil
lisToString(event.selfTime, true)); | 739 contentHelper.appendTextRow(WebInspector.UIString('Self Time'), Number.mil
lisToString(event.selfTime, true)); |
| 754 contentHelper.appendTextRow( | 740 contentHelper.appendTextRow( |
| 755 WebInspector.UIString('Total Time'), Number.millisToString(event.durat
ion || 0, true)); | 741 WebInspector.UIString('Total Time'), Number.millisToString(event.durat
ion || 0, true)); |
| 756 } | 742 } |
| 757 | 743 |
| (...skipping 20 matching lines...) Expand all Loading... |
| 778 contentHelper.appendTextRow(WebInspector.UIString('Repeats'), !eventDa
ta['singleShot']); | 764 contentHelper.appendTextRow(WebInspector.UIString('Repeats'), !eventDa
ta['singleShot']); |
| 779 } | 765 } |
| 780 break; | 766 break; |
| 781 case recordTypes.FireAnimationFrame: | 767 case recordTypes.FireAnimationFrame: |
| 782 contentHelper.appendTextRow(WebInspector.UIString('Callback ID'), eventD
ata['id']); | 768 contentHelper.appendTextRow(WebInspector.UIString('Callback ID'), eventD
ata['id']); |
| 783 break; | 769 break; |
| 784 case recordTypes.ResourceSendRequest: | 770 case recordTypes.ResourceSendRequest: |
| 785 case recordTypes.ResourceReceiveResponse: | 771 case recordTypes.ResourceReceiveResponse: |
| 786 case recordTypes.ResourceReceivedData: | 772 case recordTypes.ResourceReceivedData: |
| 787 case recordTypes.ResourceFinish: | 773 case recordTypes.ResourceFinish: |
| 788 var url = (event.name === recordTypes.ResourceSendRequest) ? eventData['
url'] : | 774 var url = timelineData.url; |
| 789 initiator &
& initiator.args['data']['url']; | |
| 790 if (url) | 775 if (url) |
| 791 contentHelper.appendElementRow(WebInspector.UIString('Resource'), WebI
nspector.linkifyResourceAsNode(url)); | 776 contentHelper.appendElementRow(WebInspector.UIString('Resource'), WebI
nspector.linkifyResourceAsNode(url)); |
| 792 if (eventData['requestMethod']) | 777 if (eventData['requestMethod']) |
| 793 contentHelper.appendTextRow(WebInspector.UIString('Request Method'), e
ventData['requestMethod']); | 778 contentHelper.appendTextRow(WebInspector.UIString('Request Method'), e
ventData['requestMethod']); |
| 794 if (typeof eventData['statusCode'] === 'number') | 779 if (typeof eventData['statusCode'] === 'number') |
| 795 contentHelper.appendTextRow(WebInspector.UIString('Status Code'), even
tData['statusCode']); | 780 contentHelper.appendTextRow(WebInspector.UIString('Status Code'), even
tData['statusCode']); |
| 796 if (eventData['mimeType']) | 781 if (eventData['mimeType']) |
| 797 contentHelper.appendTextRow(WebInspector.UIString('MIME Type'), eventD
ata['mimeType']); | 782 contentHelper.appendTextRow(WebInspector.UIString('MIME Type'), eventD
ata['mimeType']); |
| 798 if ('priority' in eventData) { | 783 if ('priority' in eventData) { |
| 799 var priority = WebInspector.uiLabelForPriority(eventData['priority']); | 784 var priority = WebInspector.uiLabelForPriority(eventData['priority']); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 825 case recordTypes.Rasterize: | 810 case recordTypes.Rasterize: |
| 826 case recordTypes.ScrollLayer: | 811 case recordTypes.ScrollLayer: |
| 827 relatedNodeLabel = WebInspector.UIString('Layer Root'); | 812 relatedNodeLabel = WebInspector.UIString('Layer Root'); |
| 828 break; | 813 break; |
| 829 case recordTypes.PaintImage: | 814 case recordTypes.PaintImage: |
| 830 case recordTypes.DecodeLazyPixelRef: | 815 case recordTypes.DecodeLazyPixelRef: |
| 831 case recordTypes.DecodeImage: | 816 case recordTypes.DecodeImage: |
| 832 case recordTypes.ResizeImage: | 817 case recordTypes.ResizeImage: |
| 833 case recordTypes.DrawLazyPixelRef: | 818 case recordTypes.DrawLazyPixelRef: |
| 834 relatedNodeLabel = WebInspector.UIString('Owner Element'); | 819 relatedNodeLabel = WebInspector.UIString('Owner Element'); |
| 835 if (event.url) | 820 if (timelineData.url) |
| 836 contentHelper.appendElementRow( | 821 contentHelper.appendElementRow( |
| 837 WebInspector.UIString('Image URL'), WebInspector.linkifyResourceAs
Node(event.url)); | 822 WebInspector.UIString('Image URL'), WebInspector.linkifyResourceAs
Node(timelineData.url)); |
| 838 break; | 823 break; |
| 839 case recordTypes.ParseAuthorStyleSheet: | 824 case recordTypes.ParseAuthorStyleSheet: |
| 840 var url = eventData['styleSheetUrl']; | 825 var url = eventData['styleSheetUrl']; |
| 841 if (url) | 826 if (url) |
| 842 contentHelper.appendElementRow( | 827 contentHelper.appendElementRow( |
| 843 WebInspector.UIString('Stylesheet URL'), WebInspector.linkifyResou
rceAsNode(url)); | 828 WebInspector.UIString('Stylesheet URL'), WebInspector.linkifyResou
rceAsNode(url)); |
| 844 break; | 829 break; |
| 845 case recordTypes.UpdateLayoutTree: // We don't want to see default detail
s. | 830 case recordTypes.UpdateLayoutTree: // We don't want to see default detail
s. |
| 846 case recordTypes.RecalculateStyles: | 831 case recordTypes.RecalculateStyles: |
| 847 contentHelper.appendTextRow(WebInspector.UIString('Elements Affected'),
event.args['elementCount']); | 832 contentHelper.appendTextRow(WebInspector.UIString('Elements Affected'),
event.args['elementCount']); |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 899 break; | 884 break; |
| 900 | 885 |
| 901 default: | 886 default: |
| 902 var detailsNode = | 887 var detailsNode = |
| 903 WebInspector.TimelineUIUtils.buildDetailsNodeForTraceEvent(event, mo
del.targetByEvent(event), linkifier); | 888 WebInspector.TimelineUIUtils.buildDetailsNodeForTraceEvent(event, mo
del.targetByEvent(event), linkifier); |
| 904 if (detailsNode) | 889 if (detailsNode) |
| 905 contentHelper.appendElementRow(WebInspector.UIString('Details'), detai
lsNode); | 890 contentHelper.appendElementRow(WebInspector.UIString('Details'), detai
lsNode); |
| 906 break; | 891 break; |
| 907 } | 892 } |
| 908 | 893 |
| 909 if (event.timeWaitingForMainThread) | 894 if (timelineData.timeWaitingForMainThread) |
| 910 contentHelper.appendTextRow( | 895 contentHelper.appendTextRow( |
| 911 WebInspector.UIString('Time Waiting for Main Thread'), | 896 WebInspector.UIString('Time Waiting for Main Thread'), |
| 912 Number.millisToString(event.timeWaitingForMainThread, true)); | 897 Number.millisToString(timelineData.timeWaitingForMainThread, true)); |
| 913 | 898 |
| 914 var relatedNode = relatedNodesMap && relatedNodesMap.get(event.backendNodeId
); | 899 var relatedNode = relatedNodesMap && relatedNodesMap.get(timelineData.backen
dNodeId); |
| 915 if (relatedNode) | 900 if (relatedNode) |
| 916 contentHelper.appendElementRow( | 901 contentHelper.appendElementRow( |
| 917 relatedNodeLabel || WebInspector.UIString('Related Node'), | 902 relatedNodeLabel || WebInspector.UIString('Related Node'), |
| 918 WebInspector.DOMPresentationUtils.linkifyNodeReference(relatedNode)); | 903 WebInspector.DOMPresentationUtils.linkifyNodeReference(relatedNode)); |
| 919 | 904 |
| 920 if (event.previewElement) { | 905 if (event[WebInspector.TimelineUIUtils._previewElementSymbol]) { |
| 921 contentHelper.addSection(WebInspector.UIString('Preview')); | 906 contentHelper.addSection(WebInspector.UIString('Preview')); |
| 922 contentHelper.appendElementRow('', event.previewElement); | 907 contentHelper.appendElementRow('', event[WebInspector.TimelineUIUtils._pre
viewElementSymbol]); |
| 923 } | 908 } |
| 924 | 909 |
| 925 if (event.stackTrace || (event.initiator && event.initiator.stackTrace) || e
vent.invalidationTrackingEvents) | 910 if (timelineData.stackTraceForSelfOrInitiator() || WebInspector.Invalidation
Tracker.invalidationEventsFor(event)) |
| 926 WebInspector.TimelineUIUtils._generateCauses(event, model.targetByEvent(ev
ent), relatedNodesMap, contentHelper); | 911 WebInspector.TimelineUIUtils._generateCauses(event, model.targetByEvent(ev
ent), relatedNodesMap, contentHelper); |
| 927 | 912 |
| 913 var stats = {}; |
| 928 var showPieChart = detailed && WebInspector.TimelineUIUtils._aggregatedStats
ForTraceEvent(stats, model, event); | 914 var showPieChart = detailed && WebInspector.TimelineUIUtils._aggregatedStats
ForTraceEvent(stats, model, event); |
| 929 if (showPieChart) { | 915 if (showPieChart) { |
| 930 contentHelper.addSection(WebInspector.UIString('Aggregated Time')); | 916 contentHelper.addSection(WebInspector.UIString('Aggregated Time')); |
| 931 var pieChart = WebInspector.TimelineUIUtils.generatePieChart( | 917 var pieChart = WebInspector.TimelineUIUtils.generatePieChart( |
| 932 stats, WebInspector.TimelineUIUtils.eventStyle(event).category, event.
selfTime); | 918 stats, WebInspector.TimelineUIUtils.eventStyle(event).category, event.
selfTime); |
| 933 contentHelper.appendElementRow('', pieChart); | 919 contentHelper.appendElementRow('', pieChart); |
| 934 } | 920 } |
| 935 | 921 |
| 936 return contentHelper.fragment; | 922 return contentHelper.fragment; |
| 937 } | 923 } |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1036 contentHelper.appendTextRow(WebInspector.UIString('Request Method'), reque
st.requestMethod); | 1022 contentHelper.appendTextRow(WebInspector.UIString('Request Method'), reque
st.requestMethod); |
| 1037 if (typeof request.priority === 'string') { | 1023 if (typeof request.priority === 'string') { |
| 1038 var priority = WebInspector.uiLabelForPriority(/** @type {!Protocol.Networ
k.ResourcePriority} */ (request.priority)); | 1024 var priority = WebInspector.uiLabelForPriority(/** @type {!Protocol.Networ
k.ResourcePriority} */ (request.priority)); |
| 1039 contentHelper.appendTextRow(WebInspector.UIString('Priority'), priority); | 1025 contentHelper.appendTextRow(WebInspector.UIString('Priority'), priority); |
| 1040 } | 1026 } |
| 1041 if (request.mimeType) | 1027 if (request.mimeType) |
| 1042 contentHelper.appendTextRow(WebInspector.UIString('Mime Type'), request.mi
meType); | 1028 contentHelper.appendTextRow(WebInspector.UIString('Mime Type'), request.mi
meType); |
| 1043 | 1029 |
| 1044 var title = WebInspector.UIString('Initiator'); | 1030 var title = WebInspector.UIString('Initiator'); |
| 1045 var sendRequest = request.children[0]; | 1031 var sendRequest = request.children[0]; |
| 1046 var topFrame = WebInspector.TimelineUIUtils.topStackFrame(sendRequest); | 1032 var topFrame = WebInspector.TimelineData.forEvent(sendRequest).topFrame(); |
| 1047 if (topFrame) { | 1033 if (topFrame) { |
| 1048 var link = linkifier.maybeLinkifyConsoleCallFrame(target, topFrame); | 1034 var link = linkifier.maybeLinkifyConsoleCallFrame(target, topFrame); |
| 1049 if (link) | 1035 if (link) |
| 1050 contentHelper.appendElementRow(title, link); | 1036 contentHelper.appendElementRow(title, link); |
| 1051 } else if (sendRequest.initiator) { | 1037 } else { |
| 1052 var initiatorURL = WebInspector.TimelineUIUtils.eventURL(sendRequest.initi
ator); | 1038 var initiator = WebInspector.TimelineData.forEvent(sendRequest).initiator(
); |
| 1053 if (initiatorURL) { | 1039 if (initiator) { |
| 1054 var link = linkifier.maybeLinkifyScriptLocation(target, null, initiatorU
RL, 0); | 1040 var initiatorURL = WebInspector.TimelineData.forEvent(initiator).url; |
| 1055 if (link) | 1041 if (initiatorURL) { |
| 1056 contentHelper.appendElementRow(title, link); | 1042 var link = linkifier.maybeLinkifyScriptLocation(target, null, initiato
rURL, 0); |
| 1043 if (link) |
| 1044 contentHelper.appendElementRow(title, link); |
| 1045 } |
| 1057 } | 1046 } |
| 1058 } | 1047 } |
| 1059 | 1048 |
| 1060 /** | 1049 /** |
| 1061 * @param {function(?Element)} fulfill | 1050 * @param {function(?Element)} fulfill |
| 1062 */ | 1051 */ |
| 1063 function action(fulfill) { | 1052 function action(fulfill) { |
| 1064 WebInspector.DOMPresentationUtils.buildImagePreviewContents( | 1053 WebInspector.DOMPresentationUtils.buildImagePreviewContents( |
| 1065 /** @type {!WebInspector.Target} */ (target), request.url, false, save
Image); | 1054 /** @type {!WebInspector.Target} */ (target), request.url, false, save
Image); |
| 1066 /** | 1055 /** |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1100 * @param {!WebInspector.TracingModel.Event} event | 1089 * @param {!WebInspector.TracingModel.Event} event |
| 1101 * @param {?WebInspector.Target} target | 1090 * @param {?WebInspector.Target} target |
| 1102 * @param {?Map<number, ?WebInspector.DOMNode>} relatedNodesMap | 1091 * @param {?Map<number, ?WebInspector.DOMNode>} relatedNodesMap |
| 1103 * @param {!WebInspector.TimelineDetailsContentHelper} contentHelper | 1092 * @param {!WebInspector.TimelineDetailsContentHelper} contentHelper |
| 1104 */ | 1093 */ |
| 1105 static _generateCauses(event, target, relatedNodesMap, contentHelper) { | 1094 static _generateCauses(event, target, relatedNodesMap, contentHelper) { |
| 1106 var recordTypes = WebInspector.TimelineModel.RecordType; | 1095 var recordTypes = WebInspector.TimelineModel.RecordType; |
| 1107 | 1096 |
| 1108 var callSiteStackLabel; | 1097 var callSiteStackLabel; |
| 1109 var stackLabel; | 1098 var stackLabel; |
| 1110 var initiator = event.initiator; | |
| 1111 | 1099 |
| 1112 switch (event.name) { | 1100 switch (event.name) { |
| 1113 case recordTypes.TimerFire: | 1101 case recordTypes.TimerFire: |
| 1114 callSiteStackLabel = WebInspector.UIString('Timer Installed'); | 1102 callSiteStackLabel = WebInspector.UIString('Timer Installed'); |
| 1115 break; | 1103 break; |
| 1116 case recordTypes.FireAnimationFrame: | 1104 case recordTypes.FireAnimationFrame: |
| 1117 callSiteStackLabel = WebInspector.UIString('Animation Frame Requested'); | 1105 callSiteStackLabel = WebInspector.UIString('Animation Frame Requested'); |
| 1118 break; | 1106 break; |
| 1119 case recordTypes.FireIdleCallback: | 1107 case recordTypes.FireIdleCallback: |
| 1120 callSiteStackLabel = WebInspector.UIString('Idle Callback Requested'); | 1108 callSiteStackLabel = WebInspector.UIString('Idle Callback Requested'); |
| 1121 break; | 1109 break; |
| 1122 case recordTypes.UpdateLayoutTree: | 1110 case recordTypes.UpdateLayoutTree: |
| 1123 case recordTypes.RecalculateStyles: | 1111 case recordTypes.RecalculateStyles: |
| 1124 stackLabel = WebInspector.UIString('Recalculation Forced'); | 1112 stackLabel = WebInspector.UIString('Recalculation Forced'); |
| 1125 break; | 1113 break; |
| 1126 case recordTypes.Layout: | 1114 case recordTypes.Layout: |
| 1127 callSiteStackLabel = WebInspector.UIString('First Layout Invalidation'); | 1115 callSiteStackLabel = WebInspector.UIString('First Layout Invalidation'); |
| 1128 stackLabel = WebInspector.UIString('Layout Forced'); | 1116 stackLabel = WebInspector.UIString('Layout Forced'); |
| 1129 break; | 1117 break; |
| 1130 } | 1118 } |
| 1131 | 1119 |
| 1120 var timelineData = WebInspector.TimelineData.forEvent(event); |
| 1132 // Direct cause. | 1121 // Direct cause. |
| 1133 if (event.stackTrace && event.stackTrace.length) { | 1122 if (timelineData.stackTrace && timelineData.stackTrace.length) { |
| 1134 contentHelper.addSection(WebInspector.UIString('Call Stacks')); | 1123 contentHelper.addSection(WebInspector.UIString('Call Stacks')); |
| 1135 contentHelper.appendStackTrace( | 1124 contentHelper.appendStackTrace( |
| 1136 stackLabel || WebInspector.UIString('Stack Trace'), | 1125 stackLabel || WebInspector.UIString('Stack Trace'), |
| 1137 WebInspector.TimelineUIUtils._stackTraceFromCallFrames(event.stackTrac
e)); | 1126 WebInspector.TimelineUIUtils._stackTraceFromCallFrames(timelineData.st
ackTrace)); |
| 1138 } | 1127 } |
| 1139 | 1128 |
| 1129 var initiator = WebInspector.TimelineData.forEvent(event).initiator(); |
| 1140 // Indirect causes. | 1130 // Indirect causes. |
| 1141 if (event.invalidationTrackingEvents && target) { // Full invalidation trac
king (experimental). | 1131 if (WebInspector.InvalidationTracker.invalidationEventsFor(event) && target)
{ // Full invalidation tracking (experimental). |
| 1142 contentHelper.addSection(WebInspector.UIString('Invalidations')); | 1132 contentHelper.addSection(WebInspector.UIString('Invalidations')); |
| 1143 WebInspector.TimelineUIUtils._generateInvalidations(event, target, related
NodesMap, contentHelper); | 1133 WebInspector.TimelineUIUtils._generateInvalidations(event, target, related
NodesMap, contentHelper); |
| 1144 } else if (initiator && initiator.stackTrace) { // Partial invalidation tra
cking. | 1134 } else if (initiator) { // Partial invalidation tracking. |
| 1145 contentHelper.appendStackTrace( | 1135 var initiatorStackTrace = WebInspector.TimelineData.forEvent(initiator).st
ackTrace; |
| 1146 callSiteStackLabel || WebInspector.UIString('First Invalidated'), | 1136 if (initiatorStackTrace) { |
| 1147 WebInspector.TimelineUIUtils._stackTraceFromCallFrames(initiator.stack
Trace)); | 1137 contentHelper.appendStackTrace( |
| 1138 callSiteStackLabel || WebInspector.UIString('First Invalidated'), |
| 1139 WebInspector.TimelineUIUtils._stackTraceFromCallFrames(initiatorStac
kTrace)); |
| 1140 } |
| 1148 } | 1141 } |
| 1149 } | 1142 } |
| 1150 | 1143 |
| 1151 /** | 1144 /** |
| 1152 * @param {!WebInspector.TracingModel.Event} event | 1145 * @param {!WebInspector.TracingModel.Event} event |
| 1153 * @param {!WebInspector.Target} target | 1146 * @param {!WebInspector.Target} target |
| 1154 * @param {?Map<number, ?WebInspector.DOMNode>} relatedNodesMap | 1147 * @param {?Map<number, ?WebInspector.DOMNode>} relatedNodesMap |
| 1155 * @param {!WebInspector.TimelineDetailsContentHelper} contentHelper | 1148 * @param {!WebInspector.TimelineDetailsContentHelper} contentHelper |
| 1156 */ | 1149 */ |
| 1157 static _generateInvalidations(event, target, relatedNodesMap, contentHelper) { | 1150 static _generateInvalidations(event, target, relatedNodesMap, contentHelper) { |
| 1158 if (!event.invalidationTrackingEvents) | 1151 var invalidationTrackingEvents = WebInspector.InvalidationTracker.invalidati
onEventsFor(event); |
| 1159 return; | |
| 1160 | |
| 1161 var invalidations = {}; | 1152 var invalidations = {}; |
| 1162 event.invalidationTrackingEvents.forEach(function(invalidation) { | 1153 invalidationTrackingEvents.forEach(function(invalidation) { |
| 1163 if (!invalidations[invalidation.type]) | 1154 if (!invalidations[invalidation.type]) |
| 1164 invalidations[invalidation.type] = [invalidation]; | 1155 invalidations[invalidation.type] = [invalidation]; |
| 1165 else | 1156 else |
| 1166 invalidations[invalidation.type].push(invalidation); | 1157 invalidations[invalidation.type].push(invalidation); |
| 1167 }); | 1158 }); |
| 1168 | 1159 |
| 1169 Object.keys(invalidations).forEach(function(type) { | 1160 Object.keys(invalidations).forEach(function(type) { |
| 1170 WebInspector.TimelineUIUtils._generateInvalidationsForType( | 1161 WebInspector.TimelineUIUtils._generateInvalidationsForType( |
| 1171 type, target, invalidations[type], relatedNodesMap, contentHelper); | 1162 type, target, invalidations[type], relatedNodesMap, contentHelper); |
| 1172 }); | 1163 }); |
| (...skipping 535 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1708 } | 1699 } |
| 1709 return WebInspector.TimelineUIUtils.colorForURL._colorGenerator.colorForID(u
rl); | 1700 return WebInspector.TimelineUIUtils.colorForURL._colorGenerator.colorForID(u
rl); |
| 1710 } | 1701 } |
| 1711 | 1702 |
| 1712 /** | 1703 /** |
| 1713 * @param {!WebInspector.TracingModel.Event} event | 1704 * @param {!WebInspector.TracingModel.Event} event |
| 1714 * @param {string=} warningType | 1705 * @param {string=} warningType |
| 1715 * @return {?Element} | 1706 * @return {?Element} |
| 1716 */ | 1707 */ |
| 1717 static eventWarning(event, warningType) { | 1708 static eventWarning(event, warningType) { |
| 1718 var warning = warningType || event.warning; | 1709 var timelineData = WebInspector.TimelineData.forEvent(event); |
| 1710 var warning = warningType || timelineData.warning; |
| 1719 if (!warning) | 1711 if (!warning) |
| 1720 return null; | 1712 return null; |
| 1721 var warnings = WebInspector.TimelineModel.WarningType; | 1713 var warnings = WebInspector.TimelineModel.WarningType; |
| 1722 var span = createElement('span'); | 1714 var span = createElement('span'); |
| 1723 var eventData = event.args['data']; | 1715 var eventData = event.args['data']; |
| 1724 | 1716 |
| 1725 switch (warning) { | 1717 switch (warning) { |
| 1726 case warnings.ForcedStyle: | 1718 case warnings.ForcedStyle: |
| 1727 case warnings.ForcedLayout: | 1719 case warnings.ForcedLayout: |
| 1728 span.appendChild(WebInspector.linkifyDocumentationURLAsNode( | 1720 span.appendChild(WebInspector.linkifyDocumentationURLAsNode( |
| (...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1928 nodeSpan.textContent = WebInspector.UIString('[ %s ]', invalidation.nodeNa
me); | 1920 nodeSpan.textContent = WebInspector.UIString('[ %s ]', invalidation.nodeNa
me); |
| 1929 return nodeSpan; | 1921 return nodeSpan; |
| 1930 } | 1922 } |
| 1931 if (showUnknownNodes) { | 1923 if (showUnknownNodes) { |
| 1932 var nodeSpan = createElement('span'); | 1924 var nodeSpan = createElement('span'); |
| 1933 return nodeSpan.createTextChild(WebInspector.UIString('[ unknown node ]'))
; | 1925 return nodeSpan.createTextChild(WebInspector.UIString('[ unknown node ]'))
; |
| 1934 } | 1926 } |
| 1935 } | 1927 } |
| 1936 }; | 1928 }; |
| 1937 | 1929 |
| 1930 WebInspector.TimelineUIUtils._previewElementSymbol = Symbol('previewElement'); |
| 1938 | 1931 |
| 1939 /** | 1932 /** |
| 1940 * @unrestricted | 1933 * @unrestricted |
| 1941 */ | 1934 */ |
| 1942 WebInspector.TimelineUIUtils.EventDispatchTypeDescriptor = class { | 1935 WebInspector.TimelineUIUtils.EventDispatchTypeDescriptor = class { |
| 1943 /** | 1936 /** |
| 1944 * @param {number} priority | 1937 * @param {number} priority |
| 1945 * @param {string} color | 1938 * @param {string} color |
| 1946 * @param {!Array.<string>} eventTypes | 1939 * @param {!Array.<string>} eventTypes |
| 1947 */ | 1940 */ |
| (...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2220 /** | 2213 /** |
| 2221 * @param {!WebInspector.TracingModel.Event} event | 2214 * @param {!WebInspector.TracingModel.Event} event |
| 2222 * @param {string=} warningType | 2215 * @param {string=} warningType |
| 2223 */ | 2216 */ |
| 2224 appendWarningRow(event, warningType) { | 2217 appendWarningRow(event, warningType) { |
| 2225 var warning = WebInspector.TimelineUIUtils.eventWarning(event, warningType); | 2218 var warning = WebInspector.TimelineUIUtils.eventWarning(event, warningType); |
| 2226 if (warning) | 2219 if (warning) |
| 2227 this.appendElementRow(WebInspector.UIString('Warning'), warning, true); | 2220 this.appendElementRow(WebInspector.UIString('Warning'), warning, true); |
| 2228 } | 2221 } |
| 2229 }; | 2222 }; |
| OLD | NEW |