[Title] Added a new memory tracing feature(and some minor updates)
[platform/core/uifw/coregl.git] / src / coregl_internal.h
1 #ifndef COREGL_INTERNAL_H
2 #define COREGL_INTERNAL_H
3
4 #include <stdio.h>
5
6 #include "coregl.h"
7
8 #include "modules/coregl_module.h"
9
10 #define unlikely(x) __builtin_expect(x, 0)
11
12 // Symbol definition for real
13 #define _COREGL_SYMBOL(IS_EXTENSION, RET_TYPE, FUNC_NAME, PARAM_LIST)     extern RET_TYPE (*_sym_##FUNC_NAME) PARAM_LIST;
14 # include "headers/sym.h"
15 #undef _COREGL_SYMBOL
16
17 #define COREGL_DEBUG
18
19 # define ERR(...) \
20      fprintf(stderr, __VA_ARGS__)
21 # ifdef COREGL_DEBUG
22 #  define DBG(...) \
23      fprintf(stderr, __VA_ARGS__)
24 # else
25 #  define DBG(...)
26 # endif
27
28 # define LOG(...) \
29      fprintf(stderr, __VA_ARGS__)
30
31
32 # define TRACE(...) \
33      fprintf(trace_fp, __VA_ARGS__)
34 # define TRACE_END() \
35      fflush(trace_fp)
36 #define _COREGL_TRACE_OUTPUT_INTERVAL_SEC 5
37
38
39 #ifdef COREGL_DEBUG
40 # define AST(expr) \
41      if (!(expr)) { fprintf(stderr, "\E[0;31;1m%s(%d) error. '"#expr"'\E[0m\n", __func__, __LINE__); }
42 #else
43 # define AST(expr) \
44      if (expr)
45 #endif
46
47 typedef GLvoid *     GLvoidptr;
48 typedef GLuint       GLuintmask;
49
50 #define _COREGL_INT_INIT_VALUE -3
51
52 #ifdef COREGL_ERRORS
53 # define GLERR(fn, fl, ln, op)
54 #else
55 # define GLERR(fn, fl, ln, op)
56 #endif
57
58 #define COREGL_OVERRIDE_API(mangle, func, prefix) \
59    mangle##func = prefix##func
60
61 typedef EGLSurface     GLSurface;
62 typedef EGLDisplay     GLDisplay;
63 typedef EGLContext     GLContext;
64
65 #define COREGL_GL_NO_CONTEXT EGL_NO_CONTEXT
66
67 typedef struct _GLThreadState
68 {
69         int                      thread_id;
70         void                    *module_data[COREGL_MAX_MODULES];
71 } GLThreadState;
72
73 extern void                *glue_lib_handle;
74 extern void                *egl_lib_handle;
75
76 #include "coregl_thread_pthread.h"
77
78 typedef struct _General_Trace_List
79 {
80         void                          *value;
81         struct _General_Trace_List    *next;
82 } General_Trace_List;
83
84 extern General_Trace_List  *thread_trace_list;
85 extern Mutex                general_trace_lists_access_mutex;
86
87 extern FILE               *trace_fp;
88
89 extern int                 trace_api_flag;
90 extern int                 trace_api_all_flag;
91 extern int                 trace_mem_flag;
92 extern int                 trace_ctx_flag;
93 extern int                 trace_ctx_force_flag;
94 extern int                 trace_state_flag;
95
96 #define USE_TRACEPATH           (trace_api_flag == 1 || trace_ctx_flag == 1 || trace_state_flag == 1 || trace_mem_flag == 1)
97
98 // Environment functions
99 extern const char         *get_env_setting(const char *name);
100
101 // Main utility functions
102 extern int                 init_new_thread_state();
103
104 // Thread functions
105 extern int                 mutex_lock(Mutex *mt);
106 extern int                 mutex_unlock(Mutex *mt);
107 extern int                 get_current_thread();
108 extern int                 set_current_thread_state(GLThreadState *tstate);
109 extern GLThreadState      *get_current_thread_state();
110
111
112 // Override functions
113 extern void                init_export();
114 extern void                deinit_export();
115
116 // Module interfaces
117 extern void                init_modules();
118 extern void                deinit_modules();
119 extern void                init_modules_tstate(GLThreadState *tstate);
120 extern void                deinit_modules_tstate(GLThreadState *tstate);
121
122
123 // Debug & Trace functions
124 extern int                 add_to_general_trace_list(General_Trace_List **gtl, void *value);
125 extern int                 remove_from_general_trace_list(General_Trace_List **gtl, void *value);
126
127 #endif // COREGL_INTERNAL_H
128