13693261870
2022-09-16 354b3dbfbffb3df45212a2a44dbbf48b4acc2594
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
Ext.define('PageAnalyzer.Summary', {
    extend: 'Ext.panel.Panel',
    requires: [
        'Ext.chart.*',
        'Ext.grid.Panel',
        'Ext.grid.feature.Grouping',
 
        'Ext.layout.container.Border',
 
        'PageAnalyzer.models.LayoutTypeSummaryData',
        'PageAnalyzer.models.LayoutIdSummaryData',
        'Ext.tab.Panel'
    ],
 
    layout: 'fit',
    border: false,
 
    toolTipTpl: [
        'layout type: {type}<br/>',
        'total time: {duration}<br/>',
        'calls: {count}<br/>',
        'avg. time: {[Math.round((values.duration / values.count) * 100) / 100]}<br/>',
        'instances: {layoutCount}'
    ],
 
    initComponent: function () {
        var me = this;
 
        me.typeDurationStore = Ext.create('Ext.data.Store', {
            model: 'PageAnalyzer.models.LayoutTypeSummaryData',
            sorters: { property: 'type', direction: 'DESC' }
        });
 
        me.items = [{
            xtype: 'tabpanel',
            deferredRender: false,
            items:[
                me.makeTypeTimeSummaryChart({}),
                me.makeTypeCountSummaryChart({})
            ]
        }];
 
        me.callParent();
    },
 
    makeTypeTimeSummaryChart: function(cfg) {
        var me = this,
            toolTipTpl = me.getTpl('toolTipTpl');
 
        return Ext.apply({
            xtype: 'chart',
            store: me.typeDurationStore,
            itemId: 'durationsByTypeChart',
            title: 'Time By Layout Type',
            theme: 'Base:gradients',
            hideMode: 'offsets',
            axes: [{
                type: 'Numeric',
                title: 'Time (ms)',
                position: 'left',
                fields: ['duration'],
                grid: true
            },{
                type: 'Category',
                position: 'bottom',
                fields: ['type'],
                title: 'Layout Type',
                label:{
                    'text-anchor': 'middle',
                    rotate: {
                        degrees: -35
                    },
                    translate: {
                        x: 10,
                        y: 0
                    }
                }
            }],
            series: [{
                type: 'column',
                axis: 'left',
                label: {
                    field: 'type',
                    font: '12px Arial'
                },
                tips: {
                    trackMouse: true,
                    tpl: toolTipTpl,
                    renderer: function(storeItem, item) {
                        this.update(storeItem.data);
                    }
                },
                xField: 'type',
                yField: 'duration'
            }]
        }, cfg);
    },
 
    makeTypeCountSummaryChart: function(cfg) {
        var me = this,
            toolTipTpl = me.getTpl('toolTipTpl');
 
        return Ext.apply({
            xtype: 'chart',
            store: me.typeDurationStore,
            itemId: 'countsByTypeChart',
            title: 'Calls by Layout Type',
            theme: 'Base:gradients',
            hideMode: 'offsets',
            axes: [{
                type: 'Numeric',
                title: 'Total Calls',
                position: 'left',
                fields: ['count'],
                grid: true
            }, {
                type: 'Category',
                position: 'bottom',
                fields: ['type'],
                title: 'Layout Type',
                label:{
                    'text-anchor': 'middle',
                    rotate: {
                        degrees: -35
                    },
                    translate: {
                        x: 10,
                        y: 0
                    }
                }
            }],
            series: [{
                type: 'column',
                axis: 'left',
                label: {
                    field: 'type',
                    font: '12px Arial'
                },
                tips: {
                    trackMouse: true,
                    tpl: toolTipTpl,
                    renderer: function(storeItem, item) {
                        this.update(storeItem.data);
                    }
 
                },
                xField: 'type',
                yField: 'count'
            }]
        }, cfg);
    },
 
    loadTypeSummary: function (summary) {
        var me = this,
            data = [];
 
        Ext.Object.each(summary, function (type, sum){
            data.push({
                type: type,
                duration: sum.duration,
                count: sum.count,
                layoutCount: sum.layoutCount
            });
        });
 
        me.typeDurationStore.removeAll();
        me.typeDurationStore.loadData(data);
        me.typeDurationStore.sort();
    }
 
});