update compat
[lttv.git] / ltt / branches / poly / lttv / lttv / stats.h
CommitLineData
9c312311 1/* This file is part of the Linux Trace Toolkit viewer
2 * Copyright (C) 2003-2004 Michel Dagenais
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License Version 2 as
6 * published by the Free Software Foundation;
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program; if not, write to the Free Software
15 * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
16 * MA 02111-1307, USA.
17 */
18
b445142a 19#ifndef STATS_H
20#define STATS_H
21
22#include <glib.h>
23#include <lttv/state.h>
dc877563 24
25/* The statistics are for a complete time interval. These structures differ
26 from the system state since they relate to static components of the
27 system (all processes which existed instead of just the currently
28 existing processes).
29
b445142a 30 The basic attributes tree to gather for several different execution modes
31 (e.g., user mode, syscall, irq), thereafter called the "events tree",
32 contains the following attributes: the number of events of each type,
33 the total number of events, the number of bytes written, the time spent
34 executing, waiting for a resource, waiting for a cpu, and possibly many
35 others. The name "facility-event_type" below is to be replaced
36 by specific event types (e.g., core-schedchange, code-syscall_entry...).
37
38 event_types/
39 "facility-event_type"
40 events_count
41 cpu_time
42 elapsed_time
43 wait_time
44 bytes_written
45 packets_sent
46 ...
47
48 The events for several different execution modes are joined together to
49 form the "execution modes tree". The name "execution mode" is to be replaced
50 by "system call", "trap", "irq", "user mode" or "kernel thread".
51 The name "submode" is to be replaced by the specific system call, trap or
52 irq name. The "submode" is an empty string if none is applicable, which is
53 the case for "user mode" and "kernel thread".
54
55 An "events tree" for each "execution mode" contains the sum for all its
56 different submodes. An "events tree" in the "execution modes tree" contains
57 the sum for all its different execution modes.
58
59 mode_types/
60 "execution mode"/
61 submodes/
62 "submode"/
63 Events Tree
64 events/
65 Event Tree
66 events/
67 Events Tree
68
69 Each trace set contains an "execution modes tree". While the traces
70 come from possibly different systems, which may differ in their system
71 calls..., most of the system calls will have the same name, even if their
72 actual internal numeric id differs. Categories such as cpu id and process
73 id are not kept since these are specific to each system. When several
74 traces are taken from the same system, these categories may make sense and
75 could eventually be considered.
76
77 Each trace contains a global "execution modes tree", one for each
78 cpu and process, and one for each process/cpu combination. The name
79 "cpu number" stands for the cpu identifier, and "process_id-start_time"
80 is a unique process identifier composed of the process id
81 (unique at any given time but which may be reused over time) concatenated
302efbad 82 with the process start time. Each process has a "functions" tree which
83 contains each process'function address (when the information is available).
84 If not, only the 0x0 function will appear.
b445142a 85
86 modes/
87 Execution Modes Tree
88 cpu/
89 "cpu number"/
90 Execution Modes Tree
91 processes/
92 "process_id-start_time"/
93 exec_file_name
94 parent
95 start_time
96 end_time
97 modes/
98 Execution Modes Tree
99 cpu/
100 "cpu number"/
101 Execution Modes Tree
302efbad 102 functions/
103 "function address"/
104 Execution Modes Tree
105 functions/
106 "function address"/
107 Execution Modes Tree
b445142a 108
109 All the events and derived values (cpu, elapsed and wait time) are
110 added during the trace analysis in the relevant
302efbad 111 trace/processes/ * /cpu/ * /functions/ * /mode_types/ * /submodes/ *
b445142a 112 "events tree". To achieve this efficiently, each tracefile context
113 contains a pointer to the current relevant "events tree" and "event_types"
114 tree within it.
115
116 Once all the events are processed, the total number of events is computed
302efbad 117 within each
118 trace/processes/ * /cpu/ * /functions/ * /mode_types/ * /submodes/ *.
b445142a 119 Then, the "events tree" are summed for all submodes within each mode type
302efbad 120 and for all mode types within a processes/ * /cpu/ * /functions/ *
b445142a 121 "execution modes tree".
302efbad 122
123 Then, the "execution modes trees" for all functions within a
124 trace/processes/ * /cpu for all cpu within a process, for all processes,
125 and for all traces are computed. Separately, the "execution modes tree" for
126 each function (over all cpus) for all processes, and for all traces are
127 summed in the trace/processes/ * /functions/ * subtree.
128
b445142a 129 Finally, the "execution modes trees" for all cpu within a process,
130 for all processes, and for all traces are computed. Separately,
131 the "execution modes tree" for each cpu but for all processes within a
132 trace are summed in the trace / cpu / * subtrees.
133
134 */
135
136
137/* The various statistics branch names are GQuarks. They are pre-computed for
138 easy and efficient access */
139
359b2948 140#define LTTV_PRIO_STATS_BEFORE_STATE LTTV_PRIO_STATE-5
141#define LTTV_PRIO_STATS_AFTER_STATE LTTV_PRIO_STATE+5
142
143
b445142a 144extern GQuark
145 LTTV_STATS_PROCESS_UNKNOWN,
146 LTTV_STATS_PROCESSES,
147 LTTV_STATS_CPU,
148 LTTV_STATS_MODE_TYPES,
149 LTTV_STATS_SUBMODES,
302efbad 150 LTTV_STATS_FUNCTIONS,
b445142a 151 LTTV_STATS_EVENT_TYPES,
152 LTTV_STATS_CPU_TIME,
153 LTTV_STATS_ELAPSED_TIME,
154 LTTV_STATS_EVENTS,
155 LTTV_STATS_EVENTS_COUNT,
156 LTTV_STATS_BEFORE_HOOKS,
157 LTTV_STATS_AFTER_HOOKS;
158
159
160typedef struct _LttvTracesetStats LttvTracesetStats;
161typedef struct _LttvTracesetStatsClass LttvTracesetStatsClass;
162
163typedef struct _LttvTraceStats LttvTraceStats;
164typedef struct _LttvTraceStatsClass LttvTraceStatsClass;
165
166typedef struct _LttvTracefileStats LttvTracefileStats;
167typedef struct _LttvTracefileStatsClass LttvTracefileStatsClass;
168
d3e01c7a 169
170
171// Hook wrapper. call_data is a trace context.
00e74b69 172gboolean lttv_stats_hook_add_event_hooks(void *hook_data, void *call_data);
173void lttv_stats_add_event_hooks(LttvTracesetStats *self);
b445142a 174
d3e01c7a 175// Hook wrapper. call_data is a trace context.
00e74b69 176gboolean lttv_stats_hook_remove_event_hooks(void *hook_data, void *call_data);
177void lttv_stats_remove_event_hooks(LttvTracesetStats *self);
b445142a 178
d3e01c7a 179gboolean lttv_stats_sum_traceset_hook(void *hook_data, void *call_data);
f95bc830 180void lttv_stats_sum_traceset(LttvTracesetStats *self);
9f797243 181
69374af5 182void lttv_stats_sum_trace(LttvTraceStats *self, LttvAttribute *ts_stats);
9f797243 183
d730b5c8 184/* Reset all statistics containers */
185void lttv_stats_reset(LttvTracesetStats *self);
186
b445142a 187
188/* The LttvTracesetStats, LttvTraceStats and LttvTracefileStats types
189 inherit from the corresponding State objects defined in state.h.. */
190
191#define LTTV_TRACESET_STATS_TYPE (lttv_traceset_stats_get_type ())
192#define LTTV_TRACESET_STATS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LTTV_TRACESET_STATS_TYPE, LttvTracesetStats))
193#define LTTV_TRACESET_STATS_CLASS(vtable) (G_TYPE_CHECK_CLASS_CAST ((vtable), LTTV_TRACESET_STATS_TYPE, LttvTracesetStatsClass))
194#define LTTV_IS_TRACESET_STATS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LTTV_TRACESET_STATS_TYPE))
195#define LTTV_IS_TRACESET_STATS_CLASS(vtable) (G_TYPE_CHECK_CLASS_TYPE ((vtable), LTTV_TRACESET_STATS_TYPE))
196#define LTTV_TRACESET_STATS_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), LTTV_TRACESET_STATS_TYPE, LttvTracesetStatsClass))
197
198struct _LttvTracesetStats {
199 LttvTracesetState parent;
200
201 LttvAttribute *stats;
202};
203
204struct _LttvTracesetStatsClass {
205 LttvTracesetStateClass parent;
206};
207
208GType lttv_traceset_stats_get_type (void);
209
210
211#define LTTV_TRACE_STATS_TYPE (lttv_trace_stats_get_type ())
212#define LTTV_TRACE_STATS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LTTV_TRACE_STATS_TYPE, LttvTraceStats))
213#define LTTV_TRACE_STATS_CLASS(vtable) (G_TYPE_CHECK_CLASS_CAST ((vtable), LTTV_TRACE_STATS_TYPE, LttvTraceStatsClass))
214#define LTTV_IS_TRACE_STATS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LTTV_TRACE_STATS_TYPE))
215#define LTTV_IS_TRACE_STATS_CLASS(vtable) (G_TYPE_CHECK_CLASS_TYPE ((vtable), LTTV_TRACE_STATS_TYPE))
216#define LTTV_TRACE_STATS_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), LTTV_TRACE_STATS_TYPE, LttvTraceStatsClass))
217
218struct _LttvTraceStats {
219 LttvTraceState parent;
220
221 LttvAttribute *stats;
222};
223
224struct _LttvTraceStatsClass {
225 LttvTraceStateClass parent;
226};
227
228GType lttv_trace_stats_get_type (void);
229
230
231#define LTTV_TRACEFILE_STATS_TYPE (lttv_tracefile_stats_get_type ())
232#define LTTV_TRACEFILE_STATS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LTTV_TRACEFILE_STATS_TYPE, LttvTracefileStats))
233#define LTTV_TRACEFILE_STATS_CLASS(vtable) (G_TYPE_CHECK_CLASS_CAST ((vtable), LTTV_TRACEFILE_STATS_TYPE, LttvTracefileStatsClass))
234#define LTTV_IS_TRACEFILE_STATS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LTTV_TRACEFILE_STATS_TYPE))
235#define LTTV_IS_TRACEFILE_STATS_CLASS(vtable) (G_TYPE_CHECK_CLASS_TYPE ((vtable), LTTV_TRACEFILE_STATS_TYPE))
236#define LTTV_TRACEFILE_STATS_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), LTTV_TRACEFILE_STATS_TYPE, LttvTracefileStatsClass))
237
238struct _LttvTracefileStats {
239 LttvTracefileState parent;
240
241 LttvAttribute *stats;
242 LttvAttribute *current_events_tree;
243 LttvAttribute *current_event_types_tree;
244};
245
246struct _LttvTracefileStatsClass {
247 LttvTracefileStateClass parent;
248};
249
250GType lttv_tracefile_stats_get_type (void);
251
dc877563 252
b445142a 253#endif // STATS_H
This page took 0.049399 seconds and 4 git commands to generate.