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

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: addressed comments and rebased 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) {
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
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
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
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
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
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
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
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
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 };
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698