]> git.cworth.org Git - apitrace/blob - common/trace_format.hpp
Use EGLAttribArray all the time.
[apitrace] / common / trace_format.hpp
1 /**************************************************************************
2  *
3  * Copyright 2010 VMware, Inc.
4  * All Rights Reserved.
5  *
6  * Permission is hereby granted, free of charge, to any person obtaining a copy
7  * of this software and associated documentation files (the "Software"), to deal
8  * in the Software without restriction, including without limitation the rights
9  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10  * copies of the Software, and to permit persons to whom the Software is
11  * furnished to do so, subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be included in
14  * all copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22  * THE SOFTWARE.
23  *
24  **************************************************************************/
25
26 /*
27  * Trace binary format.
28  *
29  * This file defines the trace binary stream, which is then compressed by
30  * snappy or gzip.
31  */
32
33 #ifndef _TRACE_FORMAT_HPP_
34 #define _TRACE_FORMAT_HPP_
35
36 namespace trace {
37
38 /*
39  * Trace file version number.
40  *
41  * We keep backwards compatability reading old traces, i.e., it should always be
42  * possible to parse and retrace old trace files.
43  *
44  * So the trace version number refers not only to changes in the binary format
45  * representation, but also semantic changes in the way certain functions
46  * should be retraced.
47  *
48  * Writing/editing old traces will not be supported however.  An older version
49  * of apitrace should be used in such circunstances.
50  *
51  * Changelog:
52  *
53  * - version 0:
54  *   - initial implementation
55  *
56  * - version 1:
57  *   - support for GL user arrays -- a blob is provided whenever an user memory
58  *   is referred (whereas before calls that operate wit user memory instead of
59  *   VBOs should be ignore)
60  *
61  * - version 2:
62  *   - malloc/free memory calls -- allow to pass user memory as malloc memory
63  *   as opposed to blobs
64  *   - glFlushMappedBufferRange will emit a memcpy only for the flushed range
65  *   (whereas previously it would emit a memcpy for the whole mapped range)
66  *
67  * - version 3:
68  *   - enums signatures are recorded for the a whole set of values (not as individual values)
69  *
70  * - version 4:
71  *   - call enter events include thread ID
72  *
73  * - version 5:
74  *   - new call detail flag CALL_BACKTRACE
75  */
76 #define TRACE_VERSION 5
77
78
79 /*
80  * Grammar:
81  *
82  *   trace = event* EOF
83  *
84  *   event = EVENT_ENTER thread_id call_sig call_detail+
85  *         | EVENT_LEAVE call_no call_detail+
86  *
87  *   call_sig = sig_id ( name arg_names )?
88  *
89  *   call_detail = ARG index value
90  *               | RET value
91  *               | THREAD int
92  *               | BACKTRACE int frame*
93  *               | END
94  *
95  *   value = NULL
96  *         | FALSE
97  *         | TRUE
98  *         | SINT int
99  *         | UINT int
100  *         | FLOAT float
101  *         | DOUBLE double
102  *         | STRING string
103  *         | BLOB string
104  *         | ENUM enum_sig value
105  *         | BITMASK bitmask_sig value
106  *         | ARRAY length value+
107  *         | STRUCT struct_sig value+
108  *         | OPAQUE int
109  *         | REPR value value
110  *
111  *   frame = id frame_detail+
112  *         | id
113  *
114  *   frame_detail = MODULE string
115  *                | FUNCTION string
116  *                | FILENAME string
117  *                | LINENUMBER uint
118  *                | OFFSET uint
119  *                | END
120  *
121  *   call_sig = id name arg_name*
122  *            | id
123  *
124  *   enum_sig = id count (name value)+
125  *            | id
126  *
127  *   bitmask_sig = id count (name value)+
128  *               | id
129  *
130  *   string = length (BYTE)*
131  *
132  */
133
134
135 enum Event {
136     EVENT_ENTER = 0,
137     EVENT_LEAVE,
138 };
139
140 enum CallDetail {
141     CALL_END = 0,
142     CALL_ARG,
143     CALL_RET,
144     CALL_THREAD,
145     CALL_BACKTRACE,
146 };
147
148 enum Type {
149     TYPE_NULL = 0,
150     TYPE_FALSE,
151     TYPE_TRUE,
152     TYPE_SINT,
153     TYPE_UINT,
154     TYPE_FLOAT,
155     TYPE_DOUBLE,
156     TYPE_STRING, // Null terminated, human readible string
157     TYPE_BLOB, // Block of bytes
158     TYPE_ENUM,
159     TYPE_BITMASK,
160     TYPE_ARRAY,
161     TYPE_STRUCT,
162     TYPE_OPAQUE,
163     TYPE_REPR,
164 };
165
166 enum BacktraceDetail {
167     BACKTRACE_END = 0,
168     BACKTRACE_MODULE,
169     BACKTRACE_FUNCTION,
170     BACKTRACE_FILENAME,
171     BACKTRACE_LINENUMBER,
172     BACKTRACE_OFFSET,
173 };
174
175
176 } /* namespace trace */
177
178 #endif /* _TRACE_FORMAT_HPP_ */