]> git.cworth.org Git - apitrace/blob - common/trace_format.hpp
Lower case namespaces.
[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  * Grammar:
30  *
31  *   trace = event* EOF
32  *
33  *   event = EVENT_ENTER call_sig call_detail+
34  *         | EVENT_LEAVE call_no call_detail+
35  *
36  *   call_sig = sig_id ( name arg_names )?
37  *
38  *   call_detail = ARG index value
39  *               | RET value
40  *               | END
41  *
42  *   value = NULL
43  *         | FALSE
44  *         | TRUE
45  *         | SINT int
46  *         | UINT int
47  *         | FLOAT float
48  *         | DOUBLE double
49  *         | STRING string
50  *         | BLOB string
51  *         | ENUM enum_sig
52  *         | BITMASK bitmask_sig value
53  *         | ARRAY length value+
54  *         | STRUCT struct_sig value+
55  *         | OPAQUE int
56  *
57  *   call_sig = id name arg_name*
58  *            | id
59  *
60  *   enum_sig = id name value
61  *            | id
62  *
63  *   bitmask_sig = id count (name value)+
64  *               | id
65  *
66  *   string = length (BYTE)*
67  *
68  */
69
70 #ifndef _TRACE_FORMAT_HPP_
71 #define _TRACE_FORMAT_HPP_
72
73 namespace trace {
74
75 /*
76  * Trace file version number.
77  *
78  * We keep backwards compatability reading old traces, i.e., it should always be
79  * possible to parse and retrace old trace files.
80  *
81  * So the trace version number refers not only to changes in the binary format
82  * representation, but also semantic changes in the way certain functions
83  * should be retraced.
84  *
85  * Writing/editing old traces will not be supported however.  An older version
86  * of apitrace should be used in such circunstances.
87  *
88  * Changelog:
89  *
90  * - version 0:
91  *   - initial implementation
92  *
93  * - version 1:
94  *   - support for GL user arrays -- a blob is provided whenever an user memory
95  *   is referred (whereas before calls that operate wit user memory instead of
96  *   VBOs should be ignore)
97  *
98  * - version 2:
99  *   - malloc/free memory calls -- allow to pass user memory as malloc memory
100  *   as opposed to blobs
101  *   - glFlushMappedBufferRange will emit a memcpy only for the flushed range
102  *   (whereas previously it would emit a memcpy for the whole mapped range)
103  */
104 #define TRACE_VERSION 2
105
106 enum Event {
107     EVENT_ENTER = 0,
108     EVENT_LEAVE,
109 };
110
111 enum CallDetail {
112     CALL_END = 0,
113     CALL_ARG,
114     CALL_RET,
115     CALL_THREAD,
116 };
117
118 enum Type {
119     TYPE_NULL = 0,
120     TYPE_FALSE,
121     TYPE_TRUE,
122     TYPE_SINT,
123     TYPE_UINT,
124     TYPE_FLOAT,
125     TYPE_DOUBLE,
126     TYPE_STRING, // Null terminated, human readible string
127     TYPE_BLOB, // Block of bytes
128     TYPE_ENUM,
129     TYPE_BITMASK,
130     TYPE_ARRAY,
131     TYPE_STRUCT,
132     TYPE_OPAQUE,
133 };
134
135
136 } /* namespace trace */
137
138 #endif /* _TRACE_FORMAT_HPP_ */