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