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

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

Issue 2874273003: DevTools: Tweak Group by Product (Closed)
Patch Set: 4 landing Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « third_party/WebKit/LayoutTests/inspector/tracing/timeline-misc/timeline-aggregated-details-expected.txt ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 /** 5 /**
6 * @unrestricted 6 * @unrestricted
7 * @implements {UI.Searchable} 7 * @implements {UI.Searchable}
8 */ 8 */
9 Timeline.TimelineTreeView = class extends UI.VBox { 9 Timeline.TimelineTreeView = class extends UI.VBox {
10 constructor() { 10 constructor() {
(...skipping 654 matching lines...) Expand 10 before | Expand all | Expand 10 after
665 } 665 }
666 666
667 /** 667 /**
668 * @param {!TimelineModel.TimelineProfileTree.Node} node 668 * @param {!TimelineModel.TimelineProfileTree.Node} node
669 * @return {!{name: string, color: string}} 669 * @return {!{name: string, color: string}}
670 */ 670 */
671 _displayInfoForGroupNode(node) { 671 _displayInfoForGroupNode(node) {
672 var categories = Timeline.TimelineUIUtils.categories(); 672 var categories = Timeline.TimelineUIUtils.categories();
673 var color = node.id ? Timeline.TimelineUIUtils.eventColor(/** @type {!SDK.Tr acingModel.Event} */ (node.event)) : 673 var color = node.id ? Timeline.TimelineUIUtils.eventColor(/** @type {!SDK.Tr acingModel.Event} */ (node.event)) :
674 categories['other'].color; 674 categories['other'].color;
675 675 var unattributed = Common.UIString('[unattributed]');
676 /**
677 * @param {string} name
678 * @return {string}
679 * @this {Timeline.AggregatedTimelineTreeView}
680 */
681 function beautifyDomainName(name) {
682 if (Timeline.AggregatedTimelineTreeView._isExtensionInternalURL(name))
683 name = Common.UIString('[Chrome extensions overhead]');
684 else if (Timeline.AggregatedTimelineTreeView._isV8NativeURL(name))
685 name = Common.UIString('[V8 Runtime]');
686 else if (name.startsWith('chrome-extension'))
687 name = this._executionContextNamesByOrigin.get(name) || name;
688 return name;
689 }
676 switch (this._groupBySetting.get()) { 690 switch (this._groupBySetting.get()) {
677 case Timeline.AggregatedTimelineTreeView.GroupBy.Category: 691 case Timeline.AggregatedTimelineTreeView.GroupBy.Category:
678 var category = categories[node.id] || categories['other']; 692 var category = categories[node.id] || categories['other'];
679 return {name: category.title, color: category.color}; 693 return {name: category.title, color: category.color};
680 694
681 case Timeline.AggregatedTimelineTreeView.GroupBy.Domain: 695 case Timeline.AggregatedTimelineTreeView.GroupBy.Domain:
682 case Timeline.AggregatedTimelineTreeView.GroupBy.Subdomain: 696 case Timeline.AggregatedTimelineTreeView.GroupBy.Subdomain:
683 var name = node.id; 697 return {name: beautifyDomainName.call(this, node.id) || unattributed, co lor: color};
684 if (Timeline.AggregatedTimelineTreeView._isExtensionInternalURL(name))
685 name = Common.UIString('[Chrome extensions overhead]');
686 else if (Timeline.AggregatedTimelineTreeView._isV8NativeURL(name))
687 name = Common.UIString('[V8 Runtime]');
688 else if (name.startsWith('chrome-extension'))
689 name = this._executionContextNamesByOrigin.get(name) || name;
690 return {name: name || Common.UIString('unattributed'), color: color};
691 698
692 case Timeline.AggregatedTimelineTreeView.GroupBy.EventName: 699 case Timeline.AggregatedTimelineTreeView.GroupBy.EventName:
693 var name = node.event.name === TimelineModel.TimelineModel.RecordType.JS Frame ? 700 var name = node.event.name === TimelineModel.TimelineModel.RecordType.JS Frame ?
694 Common.UIString('JavaScript') : 701 Common.UIString('JavaScript') :
695 Timeline.TimelineUIUtils.eventTitle(node.event); 702 Timeline.TimelineUIUtils.eventTitle(node.event);
696 return { 703 return {
697 name: name, 704 name: name,
698 color: node.event.name === TimelineModel.TimelineModel.RecordType.JSFr ame ? 705 color: node.event.name === TimelineModel.TimelineModel.RecordType.JSFr ame ?
699 Timeline.TimelineUIUtils.eventStyle(node.event).category.color : 706 Timeline.TimelineUIUtils.eventStyle(node.event).category.color :
700 color 707 color
701 }; 708 };
702 709
703 case Timeline.AggregatedTimelineTreeView.GroupBy.Product: 710 case Timeline.AggregatedTimelineTreeView.GroupBy.Product:
704 var name = node.event ? this._productByEvent(node.event) : ''; 711 var productName = this._productByEvent(/** @type {!SDK.TracingModel.Even t} */ (node.event));
705 return {name: name || Common.UIString('unattributed'), color: Timeline.T imelineUIUtils.colorForId(name)}; 712 color = productName ? Timeline.TimelineUIUtils.colorForId(productName) : '#eee';
713 var name = productName || this._domainByEvent(true, /** @type {!SDK.Trac ingModel.Event} */ (node.event)) || '';
714 return {name: beautifyDomainName.call(this, name) || unattributed, color : color};
706 715
707 case Timeline.AggregatedTimelineTreeView.GroupBy.URL: 716 case Timeline.AggregatedTimelineTreeView.GroupBy.URL:
708 break; 717 break;
709 718
710 case Timeline.AggregatedTimelineTreeView.GroupBy.Frame: 719 case Timeline.AggregatedTimelineTreeView.GroupBy.Frame:
711 var frame = this._model.timelineModel().pageFrameById(node.id); 720 var frame = this._model.timelineModel().pageFrameById(node.id);
712 var frameName = frame ? Timeline.TimelineUIUtils.displayNameForFrame(fra me, 80) : Common.UIString('Page'); 721 var frameName = frame ? Timeline.TimelineUIUtils.displayNameForFrame(fra me, 80) : Common.UIString('Page');
713 return {name: frameName, color: color}; 722 return {name: frameName, color: color};
714 723
715 default: 724 default:
716 console.assert(false, 'Unexpected aggregation type'); 725 console.assert(false, 'Unexpected aggregation type');
717 } 726 }
718 return {name: node.id || Common.UIString('unattributed'), color: color}; 727 return {name: node.id || unattributed, color: color};
719 } 728 }
720 729
721 /** 730 /**
722 * @override 731 * @override
723 * @param {!UI.Toolbar} toolbar 732 * @param {!UI.Toolbar} toolbar
724 */ 733 */
725 populateToolbar(toolbar) { 734 populateToolbar(toolbar) {
726 super.populateToolbar(toolbar); 735 super.populateToolbar(toolbar);
727 var groupBy = Timeline.AggregatedTimelineTreeView.GroupBy; 736 var groupBy = Timeline.AggregatedTimelineTreeView.GroupBy;
728 var options = [ 737 var options = [
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
783 this._stackView.setStack(stack, node); 792 this._stackView.setStack(stack, node);
784 this._stackView.show(this._detailsView.element); 793 this._stackView.show(this._detailsView.element);
785 return true; 794 return true;
786 } 795 }
787 796
788 /** 797 /**
789 * @param {!Timeline.AggregatedTimelineTreeView.GroupBy} groupBy 798 * @param {!Timeline.AggregatedTimelineTreeView.GroupBy} groupBy
790 * @return {?function(!SDK.TracingModel.Event):string} 799 * @return {?function(!SDK.TracingModel.Event):string}
791 */ 800 */
792 _groupingFunction(groupBy) { 801 _groupingFunction(groupBy) {
793 /** 802 var GroupBy = Timeline.AggregatedTimelineTreeView.GroupBy;
794 * @param {!SDK.TracingModel.Event} event
795 * @return {string}
796 */
797 function groupByURL(event) {
798 return TimelineModel.TimelineProfileTree.eventURL(event) || '';
799 }
800
801 /**
802 * @param {boolean} groupSubdomains
803 * @param {!SDK.TracingModel.Event} event
804 * @return {string}
805 */
806 function groupByDomain(groupSubdomains, event) {
807 var url = TimelineModel.TimelineProfileTree.eventURL(event) || '';
808 if (Timeline.AggregatedTimelineTreeView._isExtensionInternalURL(url))
809 return Timeline.AggregatedTimelineTreeView._extensionInternalPrefix;
810 if (Timeline.AggregatedTimelineTreeView._isV8NativeURL(url))
811 return Timeline.AggregatedTimelineTreeView._v8NativePrefix;
812 var parsedURL = url.asParsedURL();
813 if (!parsedURL)
814 return '';
815 if (parsedURL.scheme === 'chrome-extension')
816 return parsedURL.scheme + '://' + parsedURL.host;
817 if (!groupSubdomains)
818 return parsedURL.host;
819 if (/^[.0-9]+$/.test(parsedURL.host))
820 return parsedURL.host;
821 var domainMatch = /([^.]*\.)?[^.]*$/.exec(parsedURL.host);
822 return domainMatch && domainMatch[0] || '';
823 }
824
825 switch (groupBy) { 803 switch (groupBy) {
826 case Timeline.AggregatedTimelineTreeView.GroupBy.None: 804 case GroupBy.None:
827 return null; 805 return null;
828 case Timeline.AggregatedTimelineTreeView.GroupBy.EventName: 806 case GroupBy.EventName:
829 return event => Timeline.TimelineUIUtils.eventStyle(event).title; 807 return event => Timeline.TimelineUIUtils.eventStyle(event).title;
830 case Timeline.AggregatedTimelineTreeView.GroupBy.Category: 808 case GroupBy.Category:
831 return event => Timeline.TimelineUIUtils.eventStyle(event).category.name ; 809 return event => Timeline.TimelineUIUtils.eventStyle(event).category.name ;
832 case Timeline.AggregatedTimelineTreeView.GroupBy.Subdomain: 810 case GroupBy.Subdomain:
833 return groupByDomain.bind(null, false); 811 return this._domainByEvent.bind(this, false);
834 case Timeline.AggregatedTimelineTreeView.GroupBy.Domain: 812 case GroupBy.Domain:
835 return groupByDomain.bind(null, true); 813 return this._domainByEvent.bind(this, true);
836 case Timeline.AggregatedTimelineTreeView.GroupBy.Product: 814 case GroupBy.Product:
837 return this._productByEvent.bind(this); 815 return event => this._productByEvent(event) || this._domainByEvent(true, event);
838 case Timeline.AggregatedTimelineTreeView.GroupBy.URL: 816 case GroupBy.URL:
839 return groupByURL; 817 return event => TimelineModel.TimelineProfileTree.eventURL(event) || '';
840 case Timeline.AggregatedTimelineTreeView.GroupBy.Frame: 818 case GroupBy.Frame:
841 return event => TimelineModel.TimelineData.forEvent(event).frameId; 819 return event => TimelineModel.TimelineData.forEvent(event).frameId;
842 default: 820 default:
843 console.assert(false, `Unexpected aggregation setting: ${groupBy}`); 821 console.assert(false, `Unexpected aggregation setting: ${groupBy}`);
844 return null; 822 return null;
845 } 823 }
846 } 824 }
847 825
848 /** 826 /**
827 * @param {boolean} groupSubdomains
828 * @param {!SDK.TracingModel.Event} event
829 * @return {string}
830 */
831 _domainByEvent(groupSubdomains, event) {
832 var url = TimelineModel.TimelineProfileTree.eventURL(event) || '';
833 if (Timeline.AggregatedTimelineTreeView._isExtensionInternalURL(url))
834 return Timeline.AggregatedTimelineTreeView._extensionInternalPrefix;
835 if (Timeline.AggregatedTimelineTreeView._isV8NativeURL(url))
836 return Timeline.AggregatedTimelineTreeView._v8NativePrefix;
837 var parsedURL = url.asParsedURL();
838 if (!parsedURL)
839 return '';
840 if (parsedURL.scheme === 'chrome-extension')
841 return parsedURL.scheme + '://' + parsedURL.host;
842 if (!groupSubdomains)
843 return parsedURL.host;
844 if (/^[.0-9]+$/.test(parsedURL.host))
845 return parsedURL.host;
846 var domainMatch = /([^.]*\.)?[^.]*$/.exec(parsedURL.host);
847 return domainMatch && domainMatch[0] || '';
848 }
849
850 /**
849 * @param {!SDK.TracingModel.Event} event 851 * @param {!SDK.TracingModel.Event} event
850 * @return {string} 852 * @return {string}
851 */ 853 */
852 _productByEvent(event) { 854 _productByEvent(event) {
855 var url = TimelineModel.TimelineProfileTree.eventURL(event);
856 if (!url)
857 return '';
858 if (this._productByURLCache.has(url))
859 return this._productByURLCache.get(url);
853 if (!this._productRegistry) 860 if (!this._productRegistry)
854 return ''; 861 return '';
855 var url = TimelineModel.TimelineProfileTree.eventURL(event) || '';
856 var name = this._productByURLCache.get(url);
857 if (name)
858 return name;
859 var parsedURL = url.asParsedURL(); 862 var parsedURL = url.asParsedURL();
860 name = parsedURL && this._productRegistry.nameForUrl(parsedURL) || ''; 863 var name = parsedURL && this._productRegistry.nameForUrl(parsedURL) || '';
861 this._productByURLCache.set(url, name); 864 this._productByURLCache.set(url, name);
862 return name; 865 return name;
863 } 866 }
864 867
865 /** 868 /**
866 * @override 869 * @override
867 * @param {!UI.ContextMenu} contextMenu 870 * @param {!UI.ContextMenu} contextMenu
868 * @param {!TimelineModel.TimelineProfileTree.Node} node 871 * @param {!TimelineModel.TimelineProfileTree.Node} node
869 */ 872 */
870 _appendContextMenuItems(contextMenu, node) { 873 _appendContextMenuItems(contextMenu, node) {
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
1004 1007
1005 _onSelectionChanged() { 1008 _onSelectionChanged() {
1006 this.dispatchEventToListeners(Timeline.TimelineStackView.Events.SelectionCha nged); 1009 this.dispatchEventToListeners(Timeline.TimelineStackView.Events.SelectionCha nged);
1007 } 1010 }
1008 }; 1011 };
1009 1012
1010 /** @enum {symbol} */ 1013 /** @enum {symbol} */
1011 Timeline.TimelineStackView.Events = { 1014 Timeline.TimelineStackView.Events = {
1012 SelectionChanged: Symbol('SelectionChanged') 1015 SelectionChanged: Symbol('SelectionChanged')
1013 }; 1016 };
OLDNEW
« no previous file with comments | « third_party/WebKit/LayoutTests/inspector/tracing/timeline-misc/timeline-aggregated-details-expected.txt ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698