tizen 2.4 release
[framework/graphics/coregl.git] / src / modules / tracepath / coregl_tracepath.h
1 #ifndef COREGL_TRACEPATH_H\r
2 #define COREGL_TRACEPATH_H\r
3 \r
4 #include "../coregl_module.h"\r
5 \r
6 #ifndef COREGL_USE_MODULE_TRACEPATH\r
7 #error "COREGL_USE_MODULE_TRACEPATH must defined!!!"\r
8 #endif\r
9 \r
10 #define MY_MODULE_ID              COREGL_MODULE_TRACEPATH\r
11 #define MY_MODULE_TSTATE         Tracepath_ThreadState\r
12 \r
13 #include "../../coregl_internal.h"\r
14 #include "../../coregl_export.h"\r
15 \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
19 \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
24 \r
25 #define MAX_TRACE_NAME_LENGTH  256
26 #define MAX_TRACE_TABLE_SIZE   65536
27 \r
28 #define COREGL_TRACEPATH_TRACE_ALL\r
29
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
36 #endif
37
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
47 #else
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
52 #endif
53 \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
61 #else
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
65 #endif
66 \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
70 #else
71 # define _COREGL_TRACE_SURFACE(force_output, type, position)\r
72 #endif
73 \r
74 #define _COREGL_TRACEPATH_FUNC_BEGIN() \\r
75         if (unlikely(trace_api_flag == 1)) \
76                 _COREGL_TRACE_API_BEGIN(__func__, NULL, 1);
77
78 #define _COREGL_TRACEPATH_FUNC_END() \\r
79         if (unlikely(trace_api_flag == 1)) \
80                 _COREGL_TRACE_API_END(__func__, NULL, 1);
81 \r
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
86 \r
87 #define MTD_GLBUF_HASH_ARRAY 10000\r
88 \r
89 typedef struct _Glbuf_Data Glbuf_Data;\r
90 typedef struct _Sostate_Data\r
91 {\r
92         int                         ref_count;\r
93 \r
94         Glbuf_Data                 *glbuf_tex[MTD_GLBUF_HASH_ARRAY];\r
95         Glbuf_Data                 *glbuf_rb[MTD_GLBUF_HASH_ARRAY];\r
96 } Sostate_Data;\r
97 \r
98 typedef struct _Ctx_Data\r
99 {\r
100         GLDisplay                dpy;\r
101         GLContext                handle;\r
102         int                      ref_count;\r
103         int                      mc_count;\r
104         Sostate_Data            *sostate;\r
105 \r
106         struct _Ctx_Data       *next;\r
107 } Ctx_Data;\r
108 \r
109 extern Mutex               ctx_access_mutex;\r
110 \r
111 extern Mutex               access_mutex;\r
112 extern Memuse_Data       **table;\r
113 \r
114 typedef struct _Tracepath_ThreadState\r
115 {
116         Apicall_Data            **ftd_table;\r
117         Ctx_Data                 *ctx;\r
118 \r
119         GLSurface                *surf_draw;\r
120         GLSurface                *surf_read;\r
121 } Tracepath_ThreadState;\r
122 \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
127 \r
128 \r
129 extern void                tracepath_apply_overrides();\r
130 extern void                tracepath_apply_overrides_egl();\r
131 extern void                tracepath_apply_overrides_gl();\r
132 \r
133 extern void                tracepath_dump_context_states(int force_output);\r
134 \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
139 \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
143 \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
146 \r
147 extern void                tracepath_glbuf_clear(Glbuf_Data **glbuf);\r
148 \r
149 #endif // COREGL_TRACEPATH_H\r
150 \r