4 * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
8 * Sanghyun Lee <sanghyunnim.lee@samsung.com>
9 * Juyoung Kim <j0.kim@samsung.com>
10 * Vitaliy Cherepanov <v.cherepanov@samsung.com>
12 * This library is free software; you can redistribute it and/or modify it under
13 * the terms of the GNU Lesser General Public License as published by the
14 * Free Software Foundation; either version 2.1 of the License, or (at your option)
17 * This library is distributed in the hope that it will be useful, but WITHOUT ANY
18 * WARRANTY; without even the implied warranty of MERCHANTABILITY or
19 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
20 * License for more details.
22 * You should have received a copy of the GNU Lesser General Public License
23 * along with this library; if not, write to the Free Software Foundation, Inc., 51
24 * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
42 #define NO_RETURN_FORMAT "%s"
43 #define NO_RETURN_VALUE 0
44 #define APITYPE_INIT 0
45 #define APITYPE_CONTEXT 1
46 #define APITYPE_NO_CONTEXT 2
48 #define FUNC(FUNCNAME) FUNCNAME
49 #define FUNCSTR(FUNCNAME) #FUNCNAME
50 #define FUNCID(FUNCNAME) API_ID_##FUNCNAME
52 #define PACK_GL_ADD_COMMON(GL_api_type, GL_elapsed_time) \
53 do { /* PACK_GL_ADD_COMMON */ \
54 BUF_PTR = pack_int64(BUF_PTR, voidp_to_uint64((void *)eglGetCurrentContext()));\
55 BUF_PTR = pack_int32(BUF_PTR, (uint32_t)GL_api_type); \
56 BUF_PTR = pack_int64(BUF_PTR, (uint64_t)GL_elapsed_time); \
59 #define PACK_GL_ADD(GL_api_type, GL_elapsed_time, GL_context_value) \
60 do { /* PACK_GL_ADD */ \
61 PACK_GL_ADD_COMMON(GL_api_type, GL_elapsed_time); \
62 BUF_PTR = pack_string(BUF_PTR, GL_context_value); \
65 #define PACK_GL_SHADER(GL_api_type, GL_elapsed_time, GL_shader, GL_shader_size) \
66 do { /* PACK_GL_SHADER */ \
67 PACK_GL_ADD_COMMON(GL_api_type, GL_elapsed_time); \
68 uint32_t min = (sizeof(LOCAL_BUF) - (BUF_PTR - LOCAL_BUF)); \
69 if (min > MAX_SHADER_LEN) \
70 min = MAX_SHADER_LEN; \
71 BUF_PTR = pack_string_to_file(BUF_PTR, GL_shader, \
72 GL_shader_size, min); \
75 #define BEFORE(FUNCNAME) \
76 DECLARE_VARIABLE_STANDARD_NORET; \
77 GLenum error = GL_NO_ERROR; \
78 static methodType FUNCNAME ## p = 0; \
79 int32_t vAPI_ID = API_ID_ ## FUNCNAME; \
80 uint64_t start_nsec = 0; \
82 if(blockresult != 0) \
83 start_nsec = get_current_nsec(); \
85 init_probe_gl(#FUNCNAME, (void **)&FUNCNAME##p, \
86 LIBGLES20, blockresult, vAPI_ID); \
89 #define INIT_LIB_ID_STR(LIB_ID, LIB_STR, KEYS) \
90 if (lib_handle[LIB_ID] == ((void *) 0)) { \
91 lib_handle[LIB_ID] = dlopen(LIB_STR, RTLD_LAZY | RTLD_GLOBAL); \
92 if (lib_handle[LIB_ID] == ((void *) 0)) { \
93 char perror_msg[128]; \
94 sprintf(perror_msg, "dlopen failed : [%s],%s", \
95 __FUNCTION__, LIB_STR); \
101 #define INIT_LIB(LIB_ID, KEYS) \
102 INIT_LIB_ID_STR(LIB_ID, lib_string[LIB_ID], KEYS)
105 #define BEFORE_EGL_NATIVE(FUNCNAME) \
106 DECLARE_VARIABLE_STANDARD_NORET; \
107 GLenum error = EGL_SUCCESS; \
108 static methodType FUNCNAME ## p = 0; \
109 int32_t vAPI_ID = API_ID_ ## FUNCNAME; \
110 uint64_t start_nsec = 0; \
112 if(blockresult != 0) \
113 start_nsec = get_current_nsec(); \
115 init_probe_egl(#FUNCNAME, (void **)&FUNCNAME##p, LIBEGL)
117 #define BEFORE_EGL_TIZEN(FUNCNAME) \
118 DECLARE_VARIABLE_STANDARD_NORET; \
119 GLenum error = EGL_SUCCESS; \
120 static methodType FUNCNAME##p = 0; \
121 int32_t vAPI_ID = FUNCID(FUNCNAME); \
122 uint64_t start_nsec = 0; \
124 if(blockresult != 0) \
125 start_nsec = get_current_nsec(); \
127 init_probe_egl(FUNCSTR(FUNCNAME), (void **)&FUNCNAME##p, LIBOSP_UIFW)
129 #define EGL_GET_ERROR() \
130 if (blockresult != 0) { \
131 error = eglGetError(); \
134 #define BEFORE_OSP_UIFW(FUNCNAME) \
135 DECLARE_VARIABLE_STANDARD_NORET; \
136 GLenum error = GL_NO_ERROR; \
137 static methodType FUNCNAME ## p = 0; \
139 int32_t vAPI_ID = API_ID_ ## FUNCNAME; \
140 uint64_t start_nsec = 0; \
142 if(blockresult != 0) \
143 start_nsec = get_current_nsec(); \
146 INIT_LIB(LIBOSP_UIFW, RTLD_LAZY); \
147 tmpPtr = dlsym(lib_handle[LIBOSP_UIFW], #FUNCNAME); \
148 if (tmpPtr == NULL || dlerror() != NULL) { \
149 perror("dlsym failed : " #FUNCNAME); \
152 memcpy(&FUNCNAME##p, &tmpPtr, sizeof(tmpPtr)); \
156 #define AFTER(RET_TYPE, RET_VAL, APITYPE, CONTEXT_VAL, INPUTFORMAT, ...) \
157 POST_PACK_PROBEBLOCK_BEGIN(); \
158 PREPARE_LOCAL_BUF(); \
159 PACK_COMMON_BEGIN(MSG_PROBE_GL, vAPI_ID, INPUTFORMAT, __VA_ARGS__); \
160 PACK_COMMON_END(RET_TYPE, RET_VAL, error, blockresult); \
161 PACK_GL_ADD(APITYPE, get_current_nsec() - start_nsec, CONTEXT_VAL); \
163 POST_PACK_PROBEBLOCK_END()
165 #define AFTER_NO_PARAM(RET_TYPE, RETVAL, APITYPE, CONTEXTVALUE) \
166 AFTER(RET_TYPE, RETVAL, APITYPE, CONTEXTVALUE, "", 0)
168 #define GL_GET_ERROR() \
169 if (blockresult != 0) { \
170 error = glGetError(); \
173 #define AFTER_SHADER(RET_TYPE, RET_VAL, APITYPE, CONTEXT_VAL, CONTEXT_SIZE, INPUTFORMAT, ...) \
174 POST_PACK_PROBEBLOCK_BEGIN(); \
175 PREPARE_LOCAL_BUF(); \
176 PACK_COMMON_BEGIN(MSG_PROBE_GL, vAPI_ID, INPUTFORMAT, __VA_ARGS__); \
177 PACK_COMMON_END(RET_TYPE, RET_VAL, error, blockresult); \
178 PACK_GL_SHADER(APITYPE, get_current_nsec() - start_nsec, CONTEXT_VAL, CONTEXT_SIZE); \
180 POST_PACK_PROBEBLOCK_END()
182 #endif /* DA_GLES20_H_ */