Add coding style guide.
[platform/core/uifw/coregl.git] / src / modules / tracepath / coregl_tracepath.h
1 #ifndef COREGL_TRACEPATH_H
2 #define COREGL_TRACEPATH_H
3
4 #include "../coregl_module.h"
5
6 #ifndef COREGL_USE_MODULE_TRACEPATH
7 #error "COREGL_USE_MODULE_TRACEPATH must defined!!!"
8 #endif
9
10 #define MY_MODULE_ID              COREGL_MODULE_TRACEPATH
11 #define MY_MODULE_TSTATE         Tracepath_ThreadState
12
13 #include "../../coregl_internal.h"
14 #include "../../coregl_export.h"
15
16 #define _COREGL_SYMBOL(RET_TYPE, FUNC_NAME, PARAM_LIST)     extern RET_TYPE (*_orig_tracepath_##FUNC_NAME) PARAM_LIST;
17 # include "../../headers/sym.h"
18 #undef _COREGL_SYMBOL
19
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"
23 #undef _COREGL_SYMBOL
24
25 #define MAX_TRACE_NAME_LENGTH  256
26 #define MAX_TRACE_TABLE_SIZE   65536
27
28 #define COREGL_TRACEPATH_TRACE_ALL
29
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
36 #endif
37
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();
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()
52 #endif
53
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);
61 #else
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)
65 #endif
66
67 #ifdef COREGL_TRACEPATH_TRACE_SURFACE_INFO
68 # define _COREGL_TRACE_SURFACE(force_output, type, position) \
69    tracepath_surface_trace(force_output, type, position);
70 #else
71 # define _COREGL_TRACE_SURFACE(force_output, type, position)
72 #endif
73
74 #define _COREGL_TRACEPATH_FUNC_BEGIN() \
75         if (unlikely(trace_api_flag == 1)) \
76                 _COREGL_TRACE_API_BEGIN(__func__, NULL, 1);
77
78 #define _COREGL_TRACEPATH_FUNC_END() \
79         if (unlikely(trace_api_flag == 1)) \
80                 _COREGL_TRACE_API_END(__func__, NULL, 1);
81
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;
86
87 #define MTD_GLBUF_HASH_ARRAY 10000
88
89 typedef struct _Glbuf_Data Glbuf_Data;
90 typedef struct _Sostate_Data {
91         int                         ref_count;
92
93         Glbuf_Data                 *glbuf_tex[MTD_GLBUF_HASH_ARRAY];
94         Glbuf_Data                 *glbuf_rb[MTD_GLBUF_HASH_ARRAY];
95 } Sostate_Data;
96
97 typedef struct _Ctx_Data {
98         GLDisplay                dpy;
99         GLContext                handle;
100         int                      ref_count;
101         int                      mc_count;
102         Sostate_Data            *sostate;
103
104         struct _Ctx_Data       *next;
105 } Ctx_Data;
106
107 extern Mutex               ctx_access_mutex;
108
109 extern Mutex               access_mutex;
110 extern Memuse_Data       **table;
111
112 typedef struct _Tracepath_ThreadState {
113         Apicall_Data            **ftd_table;
114         Ctx_Data                 *ctx;
115
116         GLSurface                *surf_draw;
117         GLSurface                *surf_read;
118 } Tracepath_ThreadState;
119
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);
125
126
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);
131
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();
138
139 extern void                tracepath_mem_trace_add(const char *desc,
140                 int alloc_size);
141 extern void                tracepath_mem_trace_remove(const char *desc,
142                 int alloc_size);
143 extern void                tracepath_mem_trace_output(int force_output);
144
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);
150
151 extern void                tracepath_glbuf_clear(Glbuf_Data **glbuf);
152
153 #endif // COREGL_TRACEPATH_H
154