Direct sorting when adding
[lttv.git] / ltt / branches / poly / doc / developer / process_traceset_strict_boundaries.txt
CommitLineData
6ea2aecb 1Linux Trace Toolkit
2
3Mathieu Desnoyers 17-05-2004
4
5
61. Read Requests Cases Study
7
8The goal of this document is to describe the typical behavior of viewers when
9they request data to a process traceset. After the implementation of three
10viewers, with different needs, the idea of their need for a trace processing API
7d43086b 11is getting clearer. We then describe a new API for process traceset that would
12better suits the needs of those viewers.
6ea2aecb 13
14They are splitted in two different categories : the first one is the one where
15the viewers select the events they need by specifying a time interval in the
7d43086b 16traceset and the second one is where the viewers specify a start event by its
6ea2aecb 17position in the traceset and a certain amount of events it needs.
18
7d43086b 19This is a simplified case study : we look at the direct interaction between
20graphical viewers and process traceset, without the main window as a negociator.
6ea2aecb 21
22Control Flow Viewer
23
24This viewer, consisting in a two dimensions graph, shows the different processes
25as its y axis and the time as x axis. It's clear that it needs to get the events
26by specifying a start time and an end time, constituing a time interval.
27
28
29Detailed Events List
30
31This list has nothing to do with time : it shows the events one by one. It cares
32about the quantity of events, not their time.
33
34It would be simple to get the events one by one if we were reading only one
35tracefile (one cpu), but the way events are read through each trace
36(monothically increasing time) makes it a little bit more difficult to specify
37how to increment event position. We will determine how it could be done simply.
38
7d43086b 39Let's define an event position. It's a pointer to a position into each
40tracefile. It's only meaningful when associated with a context. Comparisons
41between positions are done by looking comparing saved positions for each
42tracefile, until a difference is found.
6ea2aecb 43
7d43086b 44A viewer could use a start time as a start event. It would specify a number of
45events it needs. As a first call, it could ask for the start time of the
46traceset. Afterward, it can save the position of the context after the last
47event has been delivered in its after traceset function.
6ea2aecb 48
49Now, let's see how process traceset could handle it. It would seek in the
50traceset, searching the position number.
51(need a new lttv_process_traceset_seek_position)
52
7d43086b 53Then, the viewer could simply call a process traceset middle function
54specifying a number of events to get.
6ea2aecb 55
56The whole concept of numbering events would be hidden in the order in which the
57process traceset gets the events in a monothically increasing time.
58
6ea2aecb 59
60
612. Architecture
62
7d43086b 63API to seek/read traceset will be extended to fully support both start time,
64start position, end time, end position and number of events as possible
65boundaries for reading.
6ea2aecb 66
67lttv_process_traceset_seek_time
6ea2aecb 68lttv_process_traceset_seek_position
6ea2aecb 69
7d43086b 70lttv_process_traceset_middle
71
72It must be modified to end when it encounters the first criterion : number of
73events to read reached, end time reached, end position reached.
6ea2aecb 74
7d43086b 75lttv_traceset_context_position_save
6ea2aecb 76
77The position_save saves a position that can be used later to seek back to this
78exact same position, with event granularity. This implies that the
79process_traceset must deliver events with the same timestamp in a deterministic
7d43086b 80manner. This is actually done by using tracefile and trace numbers in the
81context in the comparison function.
82
83
84
85Description of new context API useage
86
871. seek
882. begin -> add middle hooks
89 -> call begin hooks by id
903. middle -> call middle hooks by id
914. end -> call end hooks by id
92 -> remove middle hooks
93
943. Impact on State
6ea2aecb 95
7d43086b 96From now on, the state computation will be done in the middle hook call, with a
97priority higher than default. We will define this priority as PRIO_STATE,
98defined to -10.
6ea2aecb 99
7d43086b 100If state has to be computed, lttv_process_traceset_begin is called to add state
101hooks to the context. Then, the state seek_closest will have to be used to
102restore the nearest state, plus a process_traceset with no hooks present other
103than the state hooks will have to be called to go from the closest state to the
104real time seeked.
105
106The lttv_process_traceset_end will only need to be called if no further state
107computation is needed.
108
109
1104. Implementation in tracecontext.c
6ea2aecb 111
112
113- Type LttvTracesetContextPosition
114
115struct _LttvTracesetContextPosition {
7d43086b 116 LttEventPosition *tracefile_position; /* Position in each trace/tracefile */
6ea2aecb 117 guint num_tracefiles; /* Number of tracefiles (check) */
6ea2aecb 118}
119
120with interfaces :
121
122lttv_traceset_context_position_save
123(const LttvTracesetContext *context,
124 LttvTracesetContextPosition *pos);
125
126
127Dependencies :
128
7d43086b 129- lttv_process_traceset_seek_position(LttvTracesetContext *self,
130 const LttvTracesetContextPosition *position);
6ea2aecb 131 - ltt_tracefile_seek_position : already implemented
132
7d43086b 133lttv_process_traceset_seek_position will seek each tracefile to the right
134position. We keep information about number of tracefiles for extra integrity
135checking when reloading the position in the context.
6ea2aecb 136
6ea2aecb 137
138
7d43086b 139- lttv_process_traceset_middle
6ea2aecb 140We modify lttv_process_traceset_middle so that it takes as arguments :
7d43086b 141(LttvTracesetContext *self,
142LttTime end,
143unsigned num_events,
144const LttvTracesetContextPosition *end_position)
145
361e970b 146This new version of process traceset middle will call the event hooks for
7d43086b 147events until the first criterion is fulfilled : either the end time is passed,
148the number of events requested is passed or the end position is reached. When
149this function ends, the end position can be extracted from the context, the end
150event is set as described below and the number of events read is returned.
6ea2aecb 151
7d43086b 152The end event is a pointer to the last event the hooks has been called for.
6ea2aecb 153
154- lttv_process_traceset_seek_time : already implemented
155
7d43086b 156- lttv_process_traceset_begin(LttvTracesetContext *self,
361e970b 157 LttvHooks *before_traceset,
158 LttvHooks *before_trace,
159 LttvHooks *before_tracefile,
160 LttvHooks *event,
161 LttvHooksById *event_by_id)
7d43086b 162
163
164- lttv_process_traceset_end(LttvTracesetContext *self,
361e970b 165 LttvHooks *after_traceset,
166 LttvHooks *after_trace,
167 LttvHooks *after_tracefile,
168 LttvHooks *event,
169 LttvHooksById *event_by_id)
7d43086b 170
171- lttv_traceset_context_add_hooks and lttv_traceset_context_remove_hooks
172
173These functions now become internal to tracecontext.c
174
6ea2aecb 175
176
177
This page took 0.029887 seconds and 4 git commands to generate.