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

Side by Side Diff: third_party/WebKit/Source/devtools/front_end/timeline/TimelineUIUtils.js

Issue 2486853002: Timeline: remove TimelineModel inferred properties from TracingModel.Event (Closed)
Patch Set: Created 4 years, 1 month 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
OLDNEW
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
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
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
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
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
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
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
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)
alph 2016/11/09 00:46:22 need {}
691 WebInspector.TimelineUIUtils.buildPicturePreviewContent(event, target, b arrier.createCallback(saveImage)); 675 WebInspector.TimelineUIUtils.buildPicturePreviewContent(event, target, b arrier.createCallback(saveImage));
692 } 676 }
693 var nodeIdsToResolve = new Set(); 677 var nodeIdsToResolve = new Set();
694 if (event.backendNodeId) 678 var timelineData = WebInspector.TimelineData.forEvent(event);
695 nodeIdsToResolve.add(event.backendNodeId); 679 if (timelineData.backendNodeId)
696 if (event.invalidationTrackingEvents) 680 nodeIdsToResolve.add(timelineData.backendNodeId);
697 WebInspector.TimelineUIUtils._collectInvalidationNodeIds(nodeIdsToResolve, event.invalidationTrackingEvents); 681 var invalidationTrackingEvents = WebInspector.InvalidationTracker.invalidati onEventsFor(event);
682 if (invalidationTrackingEvents)
683 WebInspector.TimelineUIUtils._collectInvalidationNodeIds(nodeIdsToResolve, invalidationTrackingEvents);
698 if (nodeIdsToResolve.size) { 684 if (nodeIdsToResolve.size) {
699 var domModel = WebInspector.DOMModel.fromTarget(target); 685 var domModel = WebInspector.DOMModel.fromTarget(target);
700 if (domModel) 686 if (domModel)
701 domModel.pushNodesByBackendIdsToFrontend(nodeIdsToResolve, barrier.creat eCallback(setRelatedNodeMap)); 687 domModel.pushNodesByBackendIdsToFrontend(nodeIdsToResolve, barrier.creat eCallback(setRelatedNodeMap));
702 } 688 }
703 barrier.callWhenDone(callbackWrapper); 689 barrier.callWhenDone(callbackWrapper);
704 690
705 /** 691 /**
706 * @param {!Element=} element 692 * @param {!Element=} element
707 */ 693 */
708 function saveImage(element) { 694 function saveImage(element) {
709 event.previewElement = element || null; 695 event[WebInspector.TimelineUIUtils._previewElementSymbol] = element || nul l;
710 } 696 }
711 697
712 /** 698 /**
713 * @param {?Map<number, ?WebInspector.DOMNode>} nodeMap 699 * @param {?Map<number, ?WebInspector.DOMNode>} nodeMap
714 */ 700 */
715 function setRelatedNodeMap(nodeMap) { 701 function setRelatedNodeMap(nodeMap) {
716 relatedNodes = nodeMap; 702 relatedNodes = nodeMap;
717 } 703 }
718 704
719 function callbackWrapper() { 705 function callbackWrapper() {
720 callback(WebInspector.TimelineUIUtils._buildTraceEventDetailsSynchronously ( 706 callback(WebInspector.TimelineUIUtils._buildTraceEventDetailsSynchronously (
721 event, model, linkifier, detailed, relatedNodes)); 707 event, model, linkifier, detailed, relatedNodes));
722 } 708 }
723 } 709 }
724 710
725 /** 711 /**
726 * @param {!WebInspector.TracingModel.Event} event 712 * @param {!WebInspector.TracingModel.Event} event
727 * @param {!WebInspector.TimelineModel} model 713 * @param {!WebInspector.TimelineModel} model
728 * @param {!WebInspector.Linkifier} linkifier 714 * @param {!WebInspector.Linkifier} linkifier
729 * @param {boolean} detailed 715 * @param {boolean} detailed
730 * @param {?Map<number, ?WebInspector.DOMNode>} relatedNodesMap 716 * @param {?Map<number, ?WebInspector.DOMNode>} relatedNodesMap
731 * @return {!DocumentFragment} 717 * @return {!DocumentFragment}
732 */ 718 */
733 static _buildTraceEventDetailsSynchronously(event, model, linkifier, detailed, relatedNodesMap) { 719 static _buildTraceEventDetailsSynchronously(event, model, linkifier, detailed, relatedNodesMap) {
734 var stats = {};
735 var recordTypes = WebInspector.TimelineModel.RecordType; 720 var recordTypes = WebInspector.TimelineModel.RecordType;
736
737 // This message may vary per event.name; 721 // This message may vary per event.name;
738 var relatedNodeLabel; 722 var relatedNodeLabel;
739 723
740 var contentHelper = new WebInspector.TimelineDetailsContentHelper(model.targ etByEvent(event), linkifier); 724 var contentHelper = new WebInspector.TimelineDetailsContentHelper(model.targ etByEvent(event), linkifier);
741 contentHelper.addSection( 725 contentHelper.addSection(
742 WebInspector.TimelineUIUtils.eventTitle(event), WebInspector.TimelineUIU tils.eventStyle(event).category); 726 WebInspector.TimelineUIUtils.eventTitle(event), WebInspector.TimelineUIU tils.eventStyle(event).category);
743 727
744 var eventData = event.args['data']; 728 var eventData = event.args['data'];
745 var initiator = event.initiator; 729 var timelineData = WebInspector.TimelineData.forEvent(event);
730 var initiator = timelineData.initiator();
746 731
747 if (event.warning) 732 if (timelineData.warning)
748 contentHelper.appendWarningRow(event); 733 contentHelper.appendWarningRow(event);
749 if (event.name === recordTypes.JSFrame && eventData['deoptReason']) 734 if (event.name === recordTypes.JSFrame && eventData['deoptReason'])
750 contentHelper.appendWarningRow(event, WebInspector.TimelineModel.WarningTy pe.V8Deopt); 735 contentHelper.appendWarningRow(event, WebInspector.TimelineModel.WarningTy pe.V8Deopt);
751 736
752 if (detailed) { 737 if (detailed) {
753 contentHelper.appendTextRow(WebInspector.UIString('Self Time'), Number.mil lisToString(event.selfTime, true)); 738 contentHelper.appendTextRow(WebInspector.UIString('Self Time'), Number.mil lisToString(event.selfTime, true));
754 contentHelper.appendTextRow( 739 contentHelper.appendTextRow(
755 WebInspector.UIString('Total Time'), Number.millisToString(event.durat ion || 0, true)); 740 WebInspector.UIString('Total Time'), Number.millisToString(event.durat ion || 0, true));
756 } 741 }
757 742
(...skipping 20 matching lines...) Expand all
778 contentHelper.appendTextRow(WebInspector.UIString('Repeats'), !eventDa ta['singleShot']); 763 contentHelper.appendTextRow(WebInspector.UIString('Repeats'), !eventDa ta['singleShot']);
779 } 764 }
780 break; 765 break;
781 case recordTypes.FireAnimationFrame: 766 case recordTypes.FireAnimationFrame:
782 contentHelper.appendTextRow(WebInspector.UIString('Callback ID'), eventD ata['id']); 767 contentHelper.appendTextRow(WebInspector.UIString('Callback ID'), eventD ata['id']);
783 break; 768 break;
784 case recordTypes.ResourceSendRequest: 769 case recordTypes.ResourceSendRequest:
785 case recordTypes.ResourceReceiveResponse: 770 case recordTypes.ResourceReceiveResponse:
786 case recordTypes.ResourceReceivedData: 771 case recordTypes.ResourceReceivedData:
787 case recordTypes.ResourceFinish: 772 case recordTypes.ResourceFinish:
788 var url = (event.name === recordTypes.ResourceSendRequest) ? eventData[' url'] : 773 var url = timelineData.url;
789 initiator & & initiator.args['data']['url'];
790 if (url) 774 if (url)
791 contentHelper.appendElementRow(WebInspector.UIString('Resource'), WebI nspector.linkifyResourceAsNode(url)); 775 contentHelper.appendElementRow(WebInspector.UIString('Resource'), WebI nspector.linkifyResourceAsNode(url));
792 if (eventData['requestMethod']) 776 if (eventData['requestMethod'])
793 contentHelper.appendTextRow(WebInspector.UIString('Request Method'), e ventData['requestMethod']); 777 contentHelper.appendTextRow(WebInspector.UIString('Request Method'), e ventData['requestMethod']);
794 if (typeof eventData['statusCode'] === 'number') 778 if (typeof eventData['statusCode'] === 'number')
795 contentHelper.appendTextRow(WebInspector.UIString('Status Code'), even tData['statusCode']); 779 contentHelper.appendTextRow(WebInspector.UIString('Status Code'), even tData['statusCode']);
796 if (eventData['mimeType']) 780 if (eventData['mimeType'])
797 contentHelper.appendTextRow(WebInspector.UIString('MIME Type'), eventD ata['mimeType']); 781 contentHelper.appendTextRow(WebInspector.UIString('MIME Type'), eventD ata['mimeType']);
798 if ('priority' in eventData) { 782 if ('priority' in eventData) {
799 var priority = WebInspector.uiLabelForPriority(eventData['priority']); 783 var priority = WebInspector.uiLabelForPriority(eventData['priority']);
(...skipping 25 matching lines...) Expand all
825 case recordTypes.Rasterize: 809 case recordTypes.Rasterize:
826 case recordTypes.ScrollLayer: 810 case recordTypes.ScrollLayer:
827 relatedNodeLabel = WebInspector.UIString('Layer Root'); 811 relatedNodeLabel = WebInspector.UIString('Layer Root');
828 break; 812 break;
829 case recordTypes.PaintImage: 813 case recordTypes.PaintImage:
830 case recordTypes.DecodeLazyPixelRef: 814 case recordTypes.DecodeLazyPixelRef:
831 case recordTypes.DecodeImage: 815 case recordTypes.DecodeImage:
832 case recordTypes.ResizeImage: 816 case recordTypes.ResizeImage:
833 case recordTypes.DrawLazyPixelRef: 817 case recordTypes.DrawLazyPixelRef:
834 relatedNodeLabel = WebInspector.UIString('Owner Element'); 818 relatedNodeLabel = WebInspector.UIString('Owner Element');
835 if (event.url) 819 if (timelineData.url)
836 contentHelper.appendElementRow( 820 contentHelper.appendElementRow(
837 WebInspector.UIString('Image URL'), WebInspector.linkifyResourceAs Node(event.url)); 821 WebInspector.UIString('Image URL'), WebInspector.linkifyResourceAs Node(timelineData.url));
838 break; 822 break;
839 case recordTypes.ParseAuthorStyleSheet: 823 case recordTypes.ParseAuthorStyleSheet:
840 var url = eventData['styleSheetUrl']; 824 var url = eventData['styleSheetUrl'];
841 if (url) 825 if (url)
842 contentHelper.appendElementRow( 826 contentHelper.appendElementRow(
843 WebInspector.UIString('Stylesheet URL'), WebInspector.linkifyResou rceAsNode(url)); 827 WebInspector.UIString('Stylesheet URL'), WebInspector.linkifyResou rceAsNode(url));
844 break; 828 break;
845 case recordTypes.UpdateLayoutTree: // We don't want to see default detail s. 829 case recordTypes.UpdateLayoutTree: // We don't want to see default detail s.
846 case recordTypes.RecalculateStyles: 830 case recordTypes.RecalculateStyles:
847 contentHelper.appendTextRow(WebInspector.UIString('Elements Affected'), event.args['elementCount']); 831 contentHelper.appendTextRow(WebInspector.UIString('Elements Affected'), event.args['elementCount']);
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
899 break; 883 break;
900 884
901 default: 885 default:
902 var detailsNode = 886 var detailsNode =
903 WebInspector.TimelineUIUtils.buildDetailsNodeForTraceEvent(event, mo del.targetByEvent(event), linkifier); 887 WebInspector.TimelineUIUtils.buildDetailsNodeForTraceEvent(event, mo del.targetByEvent(event), linkifier);
904 if (detailsNode) 888 if (detailsNode)
905 contentHelper.appendElementRow(WebInspector.UIString('Details'), detai lsNode); 889 contentHelper.appendElementRow(WebInspector.UIString('Details'), detai lsNode);
906 break; 890 break;
907 } 891 }
908 892
909 if (event.timeWaitingForMainThread) 893 if (timelineData.timeWaitingForMainThread)
910 contentHelper.appendTextRow( 894 contentHelper.appendTextRow(
911 WebInspector.UIString('Time Waiting for Main Thread'), 895 WebInspector.UIString('Time Waiting for Main Thread'),
912 Number.millisToString(event.timeWaitingForMainThread, true)); 896 Number.millisToString(timelineData.timeWaitingForMainThread, true));
913 897
914 var relatedNode = relatedNodesMap && relatedNodesMap.get(event.backendNodeId ); 898 var relatedNode = relatedNodesMap && relatedNodesMap.get(timelineData.backen dNodeId);
915 if (relatedNode) 899 if (relatedNode)
916 contentHelper.appendElementRow( 900 contentHelper.appendElementRow(
917 relatedNodeLabel || WebInspector.UIString('Related Node'), 901 relatedNodeLabel || WebInspector.UIString('Related Node'),
918 WebInspector.DOMPresentationUtils.linkifyNodeReference(relatedNode)); 902 WebInspector.DOMPresentationUtils.linkifyNodeReference(relatedNode));
919 903
920 if (event.previewElement) { 904 if (event[WebInspector.TimelineUIUtils._previewElementSymbol]) {
921 contentHelper.addSection(WebInspector.UIString('Preview')); 905 contentHelper.addSection(WebInspector.UIString('Preview'));
922 contentHelper.appendElementRow('', event.previewElement); 906 contentHelper.appendElementRow('', event[WebInspector.TimelineUIUtils._pre viewElementSymbol]);
923 } 907 }
924 908
925 if (event.stackTrace || (event.initiator && event.initiator.stackTrace) || e vent.invalidationTrackingEvents) 909 if (timelineData.stackTraceForSelfOrInitiator() || WebInspector.Invalidation Tracker.invalidationEventsFor(event))
926 WebInspector.TimelineUIUtils._generateCauses(event, model.targetByEvent(ev ent), relatedNodesMap, contentHelper); 910 WebInspector.TimelineUIUtils._generateCauses(event, model.targetByEvent(ev ent), relatedNodesMap, contentHelper);
927 911
912 var stats = {};
928 var showPieChart = detailed && WebInspector.TimelineUIUtils._aggregatedStats ForTraceEvent(stats, model, event); 913 var showPieChart = detailed && WebInspector.TimelineUIUtils._aggregatedStats ForTraceEvent(stats, model, event);
929 if (showPieChart) { 914 if (showPieChart) {
930 contentHelper.addSection(WebInspector.UIString('Aggregated Time')); 915 contentHelper.addSection(WebInspector.UIString('Aggregated Time'));
931 var pieChart = WebInspector.TimelineUIUtils.generatePieChart( 916 var pieChart = WebInspector.TimelineUIUtils.generatePieChart(
932 stats, WebInspector.TimelineUIUtils.eventStyle(event).category, event. selfTime); 917 stats, WebInspector.TimelineUIUtils.eventStyle(event).category, event. selfTime);
933 contentHelper.appendElementRow('', pieChart); 918 contentHelper.appendElementRow('', pieChart);
934 } 919 }
935 920
936 return contentHelper.fragment; 921 return contentHelper.fragment;
937 } 922 }
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
1036 contentHelper.appendTextRow(WebInspector.UIString('Request Method'), reque st.requestMethod); 1021 contentHelper.appendTextRow(WebInspector.UIString('Request Method'), reque st.requestMethod);
1037 if (typeof request.priority === 'string') { 1022 if (typeof request.priority === 'string') {
1038 var priority = WebInspector.uiLabelForPriority(/** @type {!Protocol.Networ k.ResourcePriority} */ (request.priority)); 1023 var priority = WebInspector.uiLabelForPriority(/** @type {!Protocol.Networ k.ResourcePriority} */ (request.priority));
1039 contentHelper.appendTextRow(WebInspector.UIString('Priority'), priority); 1024 contentHelper.appendTextRow(WebInspector.UIString('Priority'), priority);
1040 } 1025 }
1041 if (request.mimeType) 1026 if (request.mimeType)
1042 contentHelper.appendTextRow(WebInspector.UIString('Mime Type'), request.mi meType); 1027 contentHelper.appendTextRow(WebInspector.UIString('Mime Type'), request.mi meType);
1043 1028
1044 var title = WebInspector.UIString('Initiator'); 1029 var title = WebInspector.UIString('Initiator');
1045 var sendRequest = request.children[0]; 1030 var sendRequest = request.children[0];
1046 var topFrame = WebInspector.TimelineUIUtils.topStackFrame(sendRequest); 1031 var topFrame = WebInspector.TimelineData.forEvent(sendRequest).topFrame();
1047 if (topFrame) { 1032 if (topFrame) {
1048 var link = linkifier.maybeLinkifyConsoleCallFrame(target, topFrame); 1033 var link = linkifier.maybeLinkifyConsoleCallFrame(target, topFrame);
1049 if (link) 1034 if (link)
1050 contentHelper.appendElementRow(title, link); 1035 contentHelper.appendElementRow(title, link);
1051 } else if (sendRequest.initiator) { 1036 } else {
1052 var initiatorURL = WebInspector.TimelineUIUtils.eventURL(sendRequest.initi ator); 1037 var initiator = WebInspector.TimelineData.forEvent(sendRequest);
1053 if (initiatorURL) { 1038 if (initiator) {
1054 var link = linkifier.maybeLinkifyScriptLocation(target, null, initiatorU RL, 0); 1039 var initiatorURL = WebInspector.TimelineData.forEvent(initiator).url;
1055 if (link) 1040 if (initiatorURL) {
1056 contentHelper.appendElementRow(title, link); 1041 var link = linkifier.maybeLinkifyScriptLocation(target, null, initiato rURL, 0);
1042 if (link)
1043 contentHelper.appendElementRow(title, link);
1044 }
1057 } 1045 }
1058 } 1046 }
1059 1047
1060 /** 1048 /**
1061 * @param {function(?Element)} fulfill 1049 * @param {function(?Element)} fulfill
1062 */ 1050 */
1063 function action(fulfill) { 1051 function action(fulfill) {
1064 WebInspector.DOMPresentationUtils.buildImagePreviewContents( 1052 WebInspector.DOMPresentationUtils.buildImagePreviewContents(
1065 /** @type {!WebInspector.Target} */ (target), request.url, false, save Image); 1053 /** @type {!WebInspector.Target} */ (target), request.url, false, save Image);
1066 /** 1054 /**
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
1100 * @param {!WebInspector.TracingModel.Event} event 1088 * @param {!WebInspector.TracingModel.Event} event
1101 * @param {?WebInspector.Target} target 1089 * @param {?WebInspector.Target} target
1102 * @param {?Map<number, ?WebInspector.DOMNode>} relatedNodesMap 1090 * @param {?Map<number, ?WebInspector.DOMNode>} relatedNodesMap
1103 * @param {!WebInspector.TimelineDetailsContentHelper} contentHelper 1091 * @param {!WebInspector.TimelineDetailsContentHelper} contentHelper
1104 */ 1092 */
1105 static _generateCauses(event, target, relatedNodesMap, contentHelper) { 1093 static _generateCauses(event, target, relatedNodesMap, contentHelper) {
1106 var recordTypes = WebInspector.TimelineModel.RecordType; 1094 var recordTypes = WebInspector.TimelineModel.RecordType;
1107 1095
1108 var callSiteStackLabel; 1096 var callSiteStackLabel;
1109 var stackLabel; 1097 var stackLabel;
1110 var initiator = event.initiator;
1111 1098
1112 switch (event.name) { 1099 switch (event.name) {
1113 case recordTypes.TimerFire: 1100 case recordTypes.TimerFire:
1114 callSiteStackLabel = WebInspector.UIString('Timer Installed'); 1101 callSiteStackLabel = WebInspector.UIString('Timer Installed');
1115 break; 1102 break;
1116 case recordTypes.FireAnimationFrame: 1103 case recordTypes.FireAnimationFrame:
1117 callSiteStackLabel = WebInspector.UIString('Animation Frame Requested'); 1104 callSiteStackLabel = WebInspector.UIString('Animation Frame Requested');
1118 break; 1105 break;
1119 case recordTypes.FireIdleCallback: 1106 case recordTypes.FireIdleCallback:
1120 callSiteStackLabel = WebInspector.UIString('Idle Callback Requested'); 1107 callSiteStackLabel = WebInspector.UIString('Idle Callback Requested');
1121 break; 1108 break;
1122 case recordTypes.UpdateLayoutTree: 1109 case recordTypes.UpdateLayoutTree:
1123 case recordTypes.RecalculateStyles: 1110 case recordTypes.RecalculateStyles:
1124 stackLabel = WebInspector.UIString('Recalculation Forced'); 1111 stackLabel = WebInspector.UIString('Recalculation Forced');
1125 break; 1112 break;
1126 case recordTypes.Layout: 1113 case recordTypes.Layout:
1127 callSiteStackLabel = WebInspector.UIString('First Layout Invalidation'); 1114 callSiteStackLabel = WebInspector.UIString('First Layout Invalidation');
1128 stackLabel = WebInspector.UIString('Layout Forced'); 1115 stackLabel = WebInspector.UIString('Layout Forced');
1129 break; 1116 break;
1130 } 1117 }
1131 1118
1119 var timelineData = WebInspector.TimelineData.forEvent(event);
1132 // Direct cause. 1120 // Direct cause.
1133 if (event.stackTrace && event.stackTrace.length) { 1121 if (timelineData.stackTrace && timelineData.stackTrace.length) {
1134 contentHelper.addSection(WebInspector.UIString('Call Stacks')); 1122 contentHelper.addSection(WebInspector.UIString('Call Stacks'));
1135 contentHelper.appendStackTrace( 1123 contentHelper.appendStackTrace(
1136 stackLabel || WebInspector.UIString('Stack Trace'), 1124 stackLabel || WebInspector.UIString('Stack Trace'),
1137 WebInspector.TimelineUIUtils._stackTraceFromCallFrames(event.stackTrac e)); 1125 WebInspector.TimelineUIUtils._stackTraceFromCallFrames(timelineData.st ackTrace));
1138 } 1126 }
1139 1127
1128 var initiator = WebInspector.TimelineData.forEvent(event).initiator();
1140 // Indirect causes. 1129 // Indirect causes.
1141 if (event.invalidationTrackingEvents && target) { // Full invalidation trac king (experimental). 1130 if (WebInspector.InvalidationTracker.invalidationEventsFor(event) && target) { // Full invalidation tracking (experimental).
1142 contentHelper.addSection(WebInspector.UIString('Invalidations')); 1131 contentHelper.addSection(WebInspector.UIString('Invalidations'));
1143 WebInspector.TimelineUIUtils._generateInvalidations(event, target, related NodesMap, contentHelper); 1132 WebInspector.TimelineUIUtils._generateInvalidations(event, target, related NodesMap, contentHelper);
1144 } else if (initiator && initiator.stackTrace) { // Partial invalidation tra cking. 1133 } else if (initiator) { // Partial invalidation tracking.
1145 contentHelper.appendStackTrace( 1134 var initiatorStackTrace = WebInspector.TimelineData.forEvent(initiator).st ackTrace;
1146 callSiteStackLabel || WebInspector.UIString('First Invalidated'), 1135 if (initiatorStackTrace) {
1147 WebInspector.TimelineUIUtils._stackTraceFromCallFrames(initiator.stack Trace)); 1136 contentHelper.appendStackTrace(
1137 callSiteStackLabel || WebInspector.UIString('First Invalidated'),
1138 WebInspector.TimelineUIUtils._stackTraceFromCallFrames(initiatorStac kTrace));
1139 }
1148 } 1140 }
1149 } 1141 }
1150 1142
1151 /** 1143 /**
1152 * @param {!WebInspector.TracingModel.Event} event 1144 * @param {!WebInspector.TracingModel.Event} event
1153 * @param {!WebInspector.Target} target 1145 * @param {!WebInspector.Target} target
1154 * @param {?Map<number, ?WebInspector.DOMNode>} relatedNodesMap 1146 * @param {?Map<number, ?WebInspector.DOMNode>} relatedNodesMap
1155 * @param {!WebInspector.TimelineDetailsContentHelper} contentHelper 1147 * @param {!WebInspector.TimelineDetailsContentHelper} contentHelper
1156 */ 1148 */
1157 static _generateInvalidations(event, target, relatedNodesMap, contentHelper) { 1149 static _generateInvalidations(event, target, relatedNodesMap, contentHelper) {
1158 if (!event.invalidationTrackingEvents) 1150 var invalidationTrackingEvents = WebInspector.InvalidationTracker.invalidati onEventsFor(event);
1159 return;
1160
1161 var invalidations = {}; 1151 var invalidations = {};
1162 event.invalidationTrackingEvents.forEach(function(invalidation) { 1152 invalidationTrackingEvents.forEach(function(invalidation) {
1163 if (!invalidations[invalidation.type]) 1153 if (!invalidations[invalidation.type])
1164 invalidations[invalidation.type] = [invalidation]; 1154 invalidations[invalidation.type] = [invalidation];
1165 else 1155 else
1166 invalidations[invalidation.type].push(invalidation); 1156 invalidations[invalidation.type].push(invalidation);
1167 }); 1157 });
1168 1158
1169 Object.keys(invalidations).forEach(function(type) { 1159 Object.keys(invalidations).forEach(function(type) {
1170 WebInspector.TimelineUIUtils._generateInvalidationsForType( 1160 WebInspector.TimelineUIUtils._generateInvalidationsForType(
1171 type, target, invalidations[type], relatedNodesMap, contentHelper); 1161 type, target, invalidations[type], relatedNodesMap, contentHelper);
1172 }); 1162 });
(...skipping 535 matching lines...) Expand 10 before | Expand all | Expand 10 after
1708 } 1698 }
1709 return WebInspector.TimelineUIUtils.colorForURL._colorGenerator.colorForID(u rl); 1699 return WebInspector.TimelineUIUtils.colorForURL._colorGenerator.colorForID(u rl);
1710 } 1700 }
1711 1701
1712 /** 1702 /**
1713 * @param {!WebInspector.TracingModel.Event} event 1703 * @param {!WebInspector.TracingModel.Event} event
1714 * @param {string=} warningType 1704 * @param {string=} warningType
1715 * @return {?Element} 1705 * @return {?Element}
1716 */ 1706 */
1717 static eventWarning(event, warningType) { 1707 static eventWarning(event, warningType) {
1718 var warning = warningType || event.warning; 1708 var timelineData = WebInspector.TimelineData.forEvent(event);
1709 var warning = warningType || timelineData.warning;
1719 if (!warning) 1710 if (!warning)
1720 return null; 1711 return null;
1721 var warnings = WebInspector.TimelineModel.WarningType; 1712 var warnings = WebInspector.TimelineModel.WarningType;
1722 var span = createElement('span'); 1713 var span = createElement('span');
1723 var eventData = event.args['data']; 1714 var eventData = event.args['data'];
1724 1715
1725 switch (warning) { 1716 switch (warning) {
1726 case warnings.ForcedStyle: 1717 case warnings.ForcedStyle:
1727 case warnings.ForcedLayout: 1718 case warnings.ForcedLayout:
1728 span.appendChild(WebInspector.linkifyDocumentationURLAsNode( 1719 span.appendChild(WebInspector.linkifyDocumentationURLAsNode(
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after
1928 nodeSpan.textContent = WebInspector.UIString('[ %s ]', invalidation.nodeNa me); 1919 nodeSpan.textContent = WebInspector.UIString('[ %s ]', invalidation.nodeNa me);
1929 return nodeSpan; 1920 return nodeSpan;
1930 } 1921 }
1931 if (showUnknownNodes) { 1922 if (showUnknownNodes) {
1932 var nodeSpan = createElement('span'); 1923 var nodeSpan = createElement('span');
1933 return nodeSpan.createTextChild(WebInspector.UIString('[ unknown node ]')) ; 1924 return nodeSpan.createTextChild(WebInspector.UIString('[ unknown node ]')) ;
1934 } 1925 }
1935 } 1926 }
1936 }; 1927 };
1937 1928
1929 WebInspector.TimelineUIUtils._previewElementSymbol = Symbol('previewElement');
1938 1930
1939 /** 1931 /**
1940 * @unrestricted 1932 * @unrestricted
1941 */ 1933 */
1942 WebInspector.TimelineUIUtils.EventDispatchTypeDescriptor = class { 1934 WebInspector.TimelineUIUtils.EventDispatchTypeDescriptor = class {
1943 /** 1935 /**
1944 * @param {number} priority 1936 * @param {number} priority
1945 * @param {string} color 1937 * @param {string} color
1946 * @param {!Array.<string>} eventTypes 1938 * @param {!Array.<string>} eventTypes
1947 */ 1939 */
(...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after
2220 /** 2212 /**
2221 * @param {!WebInspector.TracingModel.Event} event 2213 * @param {!WebInspector.TracingModel.Event} event
2222 * @param {string=} warningType 2214 * @param {string=} warningType
2223 */ 2215 */
2224 appendWarningRow(event, warningType) { 2216 appendWarningRow(event, warningType) {
2225 var warning = WebInspector.TimelineUIUtils.eventWarning(event, warningType); 2217 var warning = WebInspector.TimelineUIUtils.eventWarning(event, warningType);
2226 if (warning) 2218 if (warning)
2227 this.appendElementRow(WebInspector.UIString('Warning'), warning, true); 2219 this.appendElementRow(WebInspector.UIString('Warning'), warning, true);
2228 } 2220 }
2229 }; 2221 };
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698