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
|
Things To Do
============
(in no particular order)
Tracing
-------
* Allow clamping to a GL version or a number of extensions.
* Trace multiple threads:
* `GetCurrentThreadId()`
* `pthread_self()`
* Put zlib (de)compression in a separate thread.
* Trace TSCs
* Trace window sizes somehow
* Allow to distinguish between the calls really done by the program, vs the
fakes one necessary to retrace correctly.
* Start tracing on demand (e.g., key-press, or by frame no), emitting calls
that recreate all current state.
* Add option to include call stack frames in the trace.
* Trace the internal GL calls done by GLU on Mac OS X & Windows.
Retracing
---------
* Use visuals that best match those used in the trace; specially auto
detect single/double buffer visuals.
* Respect multiple context sharing of the traces.
* Support multiple threads
* Leverage `ARB_debug_output` where available.
* D3D support.
GUI
---
* Timeline view.
* Visualize meshes in draw commands.
* Breakpointing and step-by-step debugging.
CLI
---
* Add retrace Replay all the calls in a trace
* Add trim Trim a trace by including only the specified calls/frames
* Add dump-state Output the OpenGL state in JSON format
* Add dump-images Create image files for each frame/drawing operation of a trace
* Add some common command-line options:
Most commands acting on a trace accept the following common options:
--calls=[RANGE] Operate only on calls with index numbers within
the specified range.
--frames=[RANGE] Operate only on frames with index numbers within
the specified range.
--functions=[REGEXP] Operate only on function calls which have a
name that matches the given regular expression.
A [RANGE] can be any of the following:
Example Description
------- -----------
4 A single number specifying a single call or frame.
10-20 Two numbers separated by '-' (FIRST-LAST) specifying a
range of consecutive calls/frames from FIRST to LAST. If
either of FIRST or LAST is omitted, the first or last
call/frame index in the trace will be used.
1-100/5 Either of the above range specifications followed by '/'
and a number (INTERVAL). This specifies the inclusion of
only each INTERVAL call/frame within the range. For
example, 1-100/5 species frame 1, frame 5, frame 10,
... up to frame 100.
4,10-20/2 A comma separated list of any of the above range
specifications, specifying the union of the ranges.
* Add some retrace-specific options (-b, -db, -sb, -v)
* Add some trime-specific options (--every={draw,framebuffer,frame})
* Accept a filename for --calls or --functions (to use the same calls
or functions as present in a trace dump).
* Add an "apitrace bisect" for trimming down a trace based on user
input at each stage.
* Add an "apitrace git-bisect-helper" for calling from git-bisect.
Other
-----
* Side-by-side trace diffing; either as a separate tool on or the GUI.
* Ability to extract just a single frame from a trace, and all previous calls
that contributed to it:
* via a state tracker (i.e., knowledge of how calls affect the state);
* or by leveragine retrace, dumping the calls to emit all state at beginning
of the frame.
See also:
* open issues on [github](https://github.com/apitrace/apitrace/issues)
* _Known issues_ section in BUGS.markdown
* FIXME, TODO, and XXX comments on the source code.
|