1 #ifndef COREGL_TRACEPATH_H
\r
2 #define COREGL_TRACEPATH_H
\r
4 #include "../coregl_module.h"
\r
6 #ifndef COREGL_USE_MODULE_TRACEPATH
\r
7 #error "COREGL_USE_MODULE_TRACEPATH must defined!!!"
\r
10 #define MY_MODULE_ID COREGL_MODULE_TRACEPATH
\r
11 #define MY_MODULE_TSTATE Tracepath_ThreadState
\r
13 #include "../../coregl_internal.h"
\r
14 #include "../../coregl_export.h"
\r
16 #define _COREGL_SYMBOL(RET_TYPE, FUNC_NAME, PARAM_LIST) extern RET_TYPE (*_orig_tracepath_##FUNC_NAME) PARAM_LIST;
\r
17 # include "../../headers/sym.h"
\r
18 #undef _COREGL_SYMBOL
\r
20 // Symbol definition for tracepath
\r
21 #define _COREGL_SYMBOL(RET_TYPE, FUNC_NAME, PARAM_LIST) extern RET_TYPE (tracepath_##FUNC_NAME) PARAM_LIST;
\r
22 # include "../../headers/sym.h"
\r
23 #undef _COREGL_SYMBOL
\r
25 #define MAX_TRACE_NAME_LENGTH 256
26 #define MAX_TRACE_TABLE_SIZE 65536
28 #define COREGL_TRACEPATH_TRACE_ALL
\r
30 #ifdef COREGL_TRACEPATH_TRACE_ALL
\r
31 #define COREGL_TRACEPATH_TRACE_CONTEXT_INFO // Context state & thread state & Glue-context info
\r
32 #define COREGL_TRACEPATH_TRACE_STATE_INFO // Glue-context state info
\r
33 #define COREGL_TRACEPATH_TRACE_APICALL_INFO // API call frequency & each frame call info
\r
34 #define COREGL_TRACEPATH_TRACE_MEMUSE_INFO // Memory usage info
\r
35 #define COREGL_TRACEPATH_TRACE_SURFACE_INFO // Surface dump info
\r
38 #ifdef COREGL_TRACEPATH_TRACE_APICALL_INFO
\r
39 # define _COREGL_TRACE_API_BEGIN(api, hint, trace_total_time) \
40 tracepath_api_trace_begin(api, hint, trace_total_time);
\r
41 # define _COREGL_TRACE_API_END(api, hint, trace_total_time) \
42 tracepath_api_trace_end(api, hint, trace_total_time);
\r
43 # define _COREGL_TRACE_API_OUTPUT(force_output) \
44 tracepath_api_trace_output(force_output);
\r
45 # define _COREGL_TRACE_API_RESET_FRAME() \
\r
46 tracepath_api_trace_reset_frame();
\r
48 # define _COREGL_TRACE_API_BEGIN(api, hint, trace_total_time) NULL;
49 # define _COREGL_TRACE_API_END(api, hint, trace_total_time)
50 # define _COREGL_TRACE_API_OUTPUT(force_output)
51 # define _COREGL_TRACE_API_RESET_FRAME()
\r
54 #ifdef COREGL_TRACEPATH_TRACE_MEMUSE_INFO
\r
55 # define _COREGL_TRACE_MEM_ADD(desc, alloc_size) \
\r
56 tracepath_mem_trace_add(desc, alloc_size);
\r
57 # define _COREGL_TRACE_MEM_REMOVE(desc, alloc_size) \
\r
58 tracepath_mem_trace_remove(desc, alloc_size);
\r
59 # define _COREGL_TRACE_MEM_OUTPUT(force_output) \
\r
60 tracepath_mem_trace_output(force_output);
\r
62 # define _COREGL_TRACE_MEM_ADD(desc, alloc_size)
\r
63 # define _COREGL_TRACE_MEM_REMOVE(desc, alloc_size)
\r
64 # define _COREGL_TRACE_MEM_OUTPUT(force_output)
\r
67 #ifdef COREGL_TRACEPATH_TRACE_SURFACE_INFO
\r
68 # define _COREGL_TRACE_SURFACE(force_output, type, position) \
\r
69 tracepath_surface_trace(force_output, type, position);
\r
71 # define _COREGL_TRACE_SURFACE(force_output, type, position)
\r
74 #define _COREGL_TRACEPATH_FUNC_BEGIN() \
\r
75 if (unlikely(trace_api_flag == 1)) \
76 _COREGL_TRACE_API_BEGIN(__func__, NULL, 1);
78 #define _COREGL_TRACEPATH_FUNC_END() \
\r
79 if (unlikely(trace_api_flag == 1)) \
80 _COREGL_TRACE_API_END(__func__, NULL, 1);
82 typedef struct _Trace_Data Trace_Data;
83 typedef struct _Apicall_Data Apicall_Data;
\r
84 typedef struct _Memuse_Data Memuse_Data;
\r
85 typedef struct _Surface_Data Surface_Data;
\r
87 #define MTD_GLBUF_HASH_ARRAY 10000
\r
89 typedef struct _Glbuf_Data Glbuf_Data;
\r
90 typedef struct _Sostate_Data
\r
94 Glbuf_Data *glbuf_tex[MTD_GLBUF_HASH_ARRAY];
\r
95 Glbuf_Data *glbuf_rb[MTD_GLBUF_HASH_ARRAY];
\r
98 typedef struct _Ctx_Data
\r
104 Sostate_Data *sostate;
\r
106 struct _Ctx_Data *next;
\r
109 extern Mutex ctx_access_mutex;
\r
111 extern Mutex access_mutex;
\r
112 extern Memuse_Data **table;
\r
114 typedef struct _Tracepath_ThreadState
\r
116 Apicall_Data **ftd_table;
\r
119 GLSurface *surf_draw;
\r
120 GLSurface *surf_read;
\r
121 } Tracepath_ThreadState;
\r
123 extern void init_modules_tracepath();
\r
124 extern void deinit_modules_tracepath();
\r
125 extern void init_modules_tstate_tracepath(GLThreadState *tstate);
\r
126 extern void deinit_modules_tstate_tracepath(GLThreadState *tstate);
\r
129 extern void tracepath_apply_overrides();
\r
130 extern void tracepath_apply_overrides_egl();
\r
131 extern void tracepath_apply_overrides_gl();
\r
133 extern void tracepath_dump_context_states(int force_output);
\r
135 extern void *tracepath_api_trace_begin(const char *name, void *hint, int trace_total_time);
\r
136 extern void *tracepath_api_trace_end(const char *name, void *hint, int trace_total_time);
\r
137 extern void tracepath_api_trace_output(int force_output);
\r
138 extern void tracepath_api_trace_reset_frame();
\r
140 extern void tracepath_mem_trace_add(const char *desc, int alloc_size);
\r
141 extern void tracepath_mem_trace_remove(const char *desc, int alloc_size);
\r
142 extern void tracepath_mem_trace_output(int force_output);
\r
144 extern void tracepath_surface_trace_add(const char *desc, GLDisplay dpy, GLContext ctx, GLSurface surf, GLint fbo, GLint tex, GLint rb, GLint tex_w, GLint tex_h, GLint tex_format, const char *dump);
\r
145 extern void tracepath_surface_trace(int force_output, int type, const char *position);
\r
147 extern void tracepath_glbuf_clear(Glbuf_Data **glbuf);
\r
149 #endif // COREGL_TRACEPATH_H
\r