]> git.cworth.org Git - apitrace/commitdiff
Add a high-level overview of apitrace source tree.
authorJosé Fonseca <jfonseca@vmware.com>
Wed, 27 Mar 2013 11:09:46 +0000 (11:09 +0000)
committerJosé Fonseca <jfonseca@vmware.com>
Wed, 27 Mar 2013 11:09:46 +0000 (11:09 +0000)
DEVELOPMENT.markdown

index 5af6ed697e3962328fa280d68572fdb392141475..a777b539b5bec24b7e521c013ccef45182783c4b 100644 (file)
@@ -1,3 +1,76 @@
+Overview
+=========
+
+Although focus has and still is on graphical APIs, apitrace has an
+infrastructure to trace generic APIs:
+
+ * The APIs types and calls are specified in Python files in spec
+
+   * there is a type hierarchy in specs\stdapi.py , capable of representing
+     most types in C language, and additional semantic metadata
+
+ * Python scripts generate C code to trace and serialize calls to disk, and
+   vice-versa.
+
+   * Visitor software design pattern is used to navigate over the types.
+
+   * Template design pattern is use so that any step of code generation can be
+     overriden by derived classes, allowing to easily handle cases that need
+     special treatment without sacrifycing code reuse.
+
+There are several main layers in apitrace.  Too many to show in a single graph,
+so below only those relevant for GL are shown:
+
+                        specs
+                          ^
+                          |
+                       dispatch  <-------------- glws
+                          ^                       ^
+                          |                      /
+                       helpers  <--- glstate    /
+                         ^  ^          ^       /
+                        /    \         |      /
+                       /      \        |     /
+                   trace      retrace  |    /
+                    ^             ^    |   /
+                   /               \   |  /
+               gltrace            glretrace
+               /  |  \
+              /   |   \
+             /    |    \
+            /     |     \
+           /      |      \
+     glxtrace  wgltrace  cgltrace
+
+And here is a quick synopsis of what the layers do:
+
+ * specs -- specification of the API, expressed in a Python class hierarchy
+
+ * dispatch -- runtime dispatch of calls to DLLs (open the DLL, get the symbol
+   address, and call it passing all arguments as-is)
+
+ * helpers -- helper functions to determine sizes of array/blob/etc, and other.
+   It often needs to dispatch calls to give the answers.
+
+ * trace -- generate C++ code for tracing an API based on its spec
+
+   * gltrace -- specialization of the tracing generation for GL API, with extra
+     code to generate
+
+   * glxtrace, wgltrace, cgltrace -- specialization of the tracing code for the
+     GLX, WGL, and CGL APIs.
+
+ * retrace -- generate C++ code to interpret calls from trace, based on the
+   API's spec
+
+   * glretrace -- specialization of the retrace code for the GL API
+
+ * glstate -- code to dump OpenGL state to a JSON file
+
+ * glws -- abstraction of the window system specific APIs (GXL, WGL, CGL), to
+   enable cross-platform portability of glretrace
+
+
 Coding Style
 ============