]> git.cworth.org Git - apitrace/blob - common/trace_format.hpp
5aade00361f4c70d6a6ddb814f30debc355cc271
[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 #define TRACE_VERSION 3
71
72
73 /*
74  * Grammar:
75  *
76  *   trace = event* EOF
77  *
78  *   event = EVENT_ENTER call_sig call_detail+
79  *         | EVENT_LEAVE call_no call_detail+
80  *
81  *   call_sig = sig_id ( name arg_names )?
82  *
83  *   call_detail = ARG index value
84  *               | RET value
85  *               | END
86  *
87  *   value = NULL
88  *         | FALSE
89  *         | TRUE
90  *         | SINT int
91  *         | UINT int
92  *         | FLOAT float
93  *         | DOUBLE double
94  *         | STRING string
95  *         | BLOB string
96  *         | ENUM enum_sig
97  *         | BITMASK bitmask_sig value
98  *         | ARRAY length value+
99  *         | STRUCT struct_sig value+
100  *         | OPAQUE int
101  *
102  *   call_sig = id name arg_name*
103  *            | id
104  *
105  *   enum_sig = id count (name value)+
106  *            | id
107  *
108  *   bitmask_sig = id count (name value)+
109  *               | id
110  *
111  *   string = length (BYTE)*
112  *
113  */
114
115
116 enum Event {
117     EVENT_ENTER = 0,
118     EVENT_LEAVE,
119 };
120
121 enum CallDetail {
122     CALL_END = 0,
123     CALL_ARG,
124     CALL_RET,
125     CALL_THREAD,
126 };
127
128 enum Type {
129     TYPE_NULL = 0,
130     TYPE_FALSE,
131     TYPE_TRUE,
132     TYPE_SINT,
133     TYPE_UINT,
134     TYPE_FLOAT,
135     TYPE_DOUBLE,
136     TYPE_STRING, // Null terminated, human readible string
137     TYPE_BLOB, // Block of bytes
138     TYPE_ENUM,
139     TYPE_BITMASK,
140     TYPE_ARRAY,
141     TYPE_STRUCT,
142     TYPE_OPAQUE,
143 };
144
145
146 } /* namespace trace */
147
148 #endif /* _TRACE_FORMAT_HPP_ */