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