X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Ftbm_bufmgr_int.h;h=07e86a4ce03264b1bc0330623e0a498c34f233a9;hb=refs%2Fheads%2Flinux_yocto;hp=59d4358eed9496998f067c89bcbbe3ab76c316fa;hpb=1fb20d2266017afedabca36e9e6f5600929fc188;p=platform%2Fcore%2Fuifw%2Flibtbm.git diff --git a/src/tbm_bufmgr_int.h b/src/tbm_bufmgr_int.h index 59d4358..07e86a4 100644 --- a/src/tbm_bufmgr_int.h +++ b/src/tbm_bufmgr_int.h @@ -32,10 +32,12 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #ifndef _TBM_BUFMGR_INT_H_ #define _TBM_BUFMGR_INT_H_ +#include #include #include #include #include +#include #include #include #include @@ -44,130 +46,31 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include #include #include +#include #include +#if ENABLE_DLOG +#include +#endif #include +#include #include #include -#include #include +#include +#include +#include "tbm_module.h" -#define DEBUG -#ifdef DEBUG -extern int bDebug; - -#define DBG(...) { if (bDebug&0x1) TBM_LOG_D(__VA_ARGS__); } -#define DBG_LOCK(...) { if (bDebug&0x2) TBM_LOG_D(__VA_ARGS__); } -#else -#define DBG(...) -#define DBG_LOCK(...) -#endif /* DEBUG */ - -#define TRACE -#ifdef TRACE -extern int bTrace; -#endif /* TRACE */ - -#ifdef HAVE_DLOG -#include - -extern int bDlog; - -#ifdef LOG_TAG -#undef LOG_TAG -#endif - -#define LOG_TAG "TBM" - -#define TBM_LOG_D(fmt, ...) {\ - if (bDlog) {\ - LOGD("[TBM:D] " fmt, ##__VA_ARGS__);\ - } \ - else {\ - fprintf(stderr, "[TBM:D(%d)(%s:%d)] " fmt, getpid(), __func__, __LINE__, ##__VA_ARGS__);\ - } \ -} - -#define TBM_LOG_I(fmt, ...) {\ - if (bDlog) {\ - LOGD("[TBM:I] " fmt, ##__VA_ARGS__);\ - } \ - else {\ - fprintf(stderr, "[TBM:I(%d)(%s:%d)] " fmt, getpid(), __func__, __LINE__, ##__VA_ARGS__);\ - } \ -} - -#define TBM_LOG_W(fmt, ...) {\ - if (bDlog) {\ - LOGW("[TBM:W] " fmt, ##__VA_ARGS__);\ - } \ - else {\ - fprintf(stderr, "[TBM:W(%d)(%s:%d)] " fmt, getpid(), __func__, __LINE__, ##__VA_ARGS__);\ - } \ -} - -#define TBM_LOG_E(fmt, ...) {\ - if (bDlog) {\ - LOGE("[TBM:E] " fmt, ##__VA_ARGS__);\ - } \ - else {\ - fprintf(stderr, "[TBM:E(%d)(%s:%d)] " fmt, getpid(), __func__, __LINE__, ##__VA_ARGS__);\ - } \ -} +extern tbm_bufmgr gBufMgr; +extern int b_dump_queue; +extern int trace_mask; -#define TBM_DEBUG(fmt, ...) {\ - if (bDlog) {\ - LOGE("[TBM_DEBUG] " fmt, ##__VA_ARGS__);\ - } \ - else {\ - fprintf(stderr, "[TBM:DEBUG(%d)] " fmt, getpid(), ##__VA_ARGS__);\ - } \ -} +#define TBM_BO_MAGIC 0xBF011234 -#ifdef TRACE -#define TBM_TRACE(fmt, ...) {\ - if (bDlog) {\ - if (bTrace&0x1) LOGE("[TBM:TRACE] " fmt, ##__VA_ARGS__);\ - } \ - else {\ - if (bTrace&0x1) fprintf(stderr, "[TBM:TRACE(%d)(%s:%d)] " fmt, getpid(), __func__, __LINE__, ##__VA_ARGS__);\ - } \ -} -#else -#define TBM_TRACE(fmt, ...) -#endif /* TRACE */ - -#else -#define TBM_LOG_D(fmt, ...) fprintf(stderr, "[TBM:D(%d)(%s:%d)] " fmt, getpid(), __func__, __LINE__, ##__VA_ARGS__) -#define TBM_LOG_I(fmt, ...) fprintf(stderr, "[TBM:I(%d)(%s:%d)] " fmt, getpid(), __func__, __LINE__, ##__VA_ARGS__) -#define TBM_LOG_W(fmt, ...) fprintf(stderr, "[TBM:W(%d)(%s:%d)] " fmt, getpid(), __func__, __LINE__, ##__VA_ARGS__) -#define TBM_LOG_E(fmt, ...) fprintf(stderr, "[TBM:E(%d)(%s:%d)] " fmt, getpid(), __func__, __LINE__, ##__VA_ARGS__) -#define TBM_DEBUG(fmt, ...) fprintf(stderr, "[TBM:DEBUG(%d)] " fmt, getpid(), ##__VA_ARGS__) -#ifdef TRACE -#define TBM_TRACE(fmt, ...) { if (bTrace&0x1) fprintf(stderr, "[TBM:TRACE(%d)(%s:%d)] " fmt, getpid(), __func__, __LINE__, ##__VA_ARGS__); } -#else -#define TBM_TRACE(fmt, ...) -#endif /* TRACE */ -#endif /* HAVE_DLOG */ - -/* check condition */ -#define TBM_RETURN_IF_FAIL(cond) {\ - if (!(cond)) {\ - TBM_LOG_E("'%s' failed.\n", #cond);\ - return;\ - } \ -} -#define TBM_RETURN_VAL_IF_FAIL(cond, val) {\ - if (!(cond)) {\ - TBM_LOG_E("'%s' failed.\n", #cond);\ - return val;\ - } \ -} -#define TBM_GOTO_VAL_IF_FAIL(cond, val) {\ - if (!(cond)) {\ - TBM_LOG_E("'%s' failed.\n", #cond);\ - goto val;\ - } \ -} +#define C(b, m) (((b) >> (m)) & 0xFF) +#define B(c, s) ((((unsigned int)(c)) & 0xff) << (s)) +#define FOURCC(a, b, c, d) (B(d, 24) | B(c, 16) | B(b, 8) | B(a, 0)) +#define FOURCC_STR(id) C(id, 0), C(id, 8), C(id, 16), C(id, 24) +#define FOURCC_ID(str) FOURCC(((char*)str)[0], ((char*)str)[1], ((char*)str)[2], ((char*)str)[3]) /* check flags */ #define RETURN_CHECK_FLAG(cond) {\ @@ -181,8 +84,64 @@ extern int bDlog; } \ } +#define TBM_TRACE_BO(fmt, args...) \ + do { \ + if (trace_mask&TBM_BUFGMR_DEBUG_TRACE_BO) { \ + struct timespec ts; \ + clock_gettime(CLOCK_MONOTONIC, &ts); \ + tbm_log_print(TBM_LOG_LEVEL_INFO, "[%5d.%06d][%d][%s %d](TRACE)"fmt, \ + (int)ts.tv_sec, (int)ts.tv_nsec / 1000, \ + (int)syscall(SYS_gettid), __FUNCTION__, __LINE__, ##args); \ + } \ + } while (0) + +#define TBM_TRACE_SURFACE_INTERNAL(fmt, args...) \ + do { \ + if (trace_mask&TBM_BUFGMR_DEBUG_TRACE_SURFACE_INTERNAL) { \ + struct timespec ts; \ + clock_gettime(CLOCK_MONOTONIC, &ts); \ + tbm_log_print(TBM_LOG_LEVEL_INFO, "[%5d.%06d][%d][%s %d](TRACE)"fmt, \ + (int)ts.tv_sec, (int)ts.tv_nsec / 1000, \ + (int)syscall(SYS_gettid), __FUNCTION__, __LINE__, ##args); \ + } \ + } while (0) + +#define TBM_TRACE_SURFACE(fmt, args...) \ + do { \ + if (trace_mask&TBM_BUFGMR_DEBUG_TRACE_SURFACE) { \ + struct timespec ts; \ + clock_gettime(CLOCK_MONOTONIC, &ts); \ + tbm_log_print(TBM_LOG_LEVEL_INFO, "[%5d.%06d][%d][%s %d](TRACE)"fmt, \ + (int)ts.tv_sec, (int)ts.tv_nsec / 1000, \ + (int)syscall(SYS_gettid), __FUNCTION__, __LINE__, ##args); \ + } \ + } while (0) + +#define TBM_TRACE_SURFACE_QUEUE(fmt, args...) \ + do { \ + if (trace_mask&TBM_BUFGMR_DEBUG_TRACE_SURFACE_QUEUE) { \ + struct timespec ts; \ + clock_gettime(CLOCK_MONOTONIC, &ts); \ + tbm_log_print(TBM_LOG_LEVEL_INFO, "[%5d.%06d][%d][%s %d](TRACE)"fmt, \ + (int)ts.tv_sec, (int)ts.tv_nsec / 1000, \ + (int)syscall(SYS_gettid), __FUNCTION__, __LINE__, ##args); \ + } \ + } while (0) + +#define TBM_TRACE(fmt, args...) \ + do { \ + if (trace_mask&0x1) { \ + struct timespec ts; \ + clock_gettime(CLOCK_MONOTONIC, &ts); \ + tbm_log_print(TBM_LOG_LEVEL_INFO, "[%5d.%06d][%d][%s %d](TRACE)"fmt, \ + (int)ts.tv_sec, (int)ts.tv_nsec / 1000, \ + (int)syscall(SYS_gettid), __FUNCTION__, __LINE__, ##args); \ + } \ + } while (0) + + /* check validation */ -#define TBM_BUFMGR_IS_VALID(mgr) (mgr) +#define TBM_BUFMGR_IS_VALID(mgr) (mgr && mgr == gBufMgr) #define TBM_BO_IS_VALID(bo) (bo && \ TBM_BUFMGR_IS_VALID(bo->bufmgr) && \ bo->item_link.next && \ @@ -192,6 +151,22 @@ extern int bDlog; surf->item_link.next && \ surf->item_link.next->prev == &surf->item_link) + +#define TBM_SNRPRINTF(p, len, count, fmt, ARG...) \ + do { \ + if (p) { \ + int rest = len - count; \ + int s = snprintf(&p[count], rest, fmt, ##ARG); \ + while (s >= rest) { \ + len *= 2; \ + p = realloc(p, len); \ + rest = len - count; \ + s = snprintf(&p[count], rest, fmt, ##ARG); \ + } \ + count += s; \ + } \ + } while (0) + struct list_head { struct list_head *prev; struct list_head *next; @@ -201,23 +176,18 @@ struct list_head { * @brief tbm_bo : buffer object of Tizen Buffer Manager */ struct _tbm_bo { - tbm_bufmgr bufmgr; /* tbm buffer manager */ - - int ref_cnt; /* ref count of bo */ - - int flags; /* TBM_BO_FLAGS :bo memory type */ - - struct list_head user_data_list; /* list of the user_date in bo */ - - void *priv; /* bo private */ - - struct list_head item_link; /* link of bo */ - - tbm_surface_h surface; /* tbm_surface */ - - int lock_cnt; /* lock count of bo */ - - unsigned int map_cnt; /* device map count */ + unsigned int magic; /* tbm bo magic number */ + tbm_bufmgr bufmgr; /* tbm buffer manager */ + int ref_cnt; /* ref count of bo */ + int flags; /* TBM_BO_FLAGS :bo memory type */ + struct list_head user_data_list; /* list of the user_date in bo */ + struct list_head item_link; /* link of bo */ + tbm_surface_h surface; /* tbm_surface */ + int lock_cnt; /* lock count of bo */ + unsigned int map_cnt; /* device map count */ + + tbm_bo_data *bo_data; /* bo data of the module */ + int get_from_surface_data; /* bo_data has be detroyed by surface_data */ }; /** @@ -225,23 +195,18 @@ struct _tbm_bo { * */ struct _tbm_bufmgr { - pthread_mutex_t lock; /* mutex lock */ - - int ref_count; /*reference count */ - - int fd; /* bufmgr fd */ - - int lock_type; /* lock_type of bufmgr */ - - unsigned int bo_cnt; /* number of bos */ - - struct list_head bo_list; /* list of bos belonging to bufmgr */ - - struct list_head surf_list; /* list of surfaces belonging to bufmgr */ - - void *module_data; - - tbm_bufmgr_backend backend; /* bufmgr backend */ + int ref_count; /* reference count */ + int fd; /* bufmgr fd */ + tbm_bufmgr_bo_lock_type bo_lock_type; /* lock_type of bufmgr */ + int capabilities; /* capabilities of bufmgr */ + int display_server; /* used by display server */ + unsigned int bo_cnt; /* number of bos */ + struct list_head bo_list; /* list of bos belonging to bufmgr */ + struct list_head surf_list; /* list of surfaces belonging to bufmgr */ + struct list_head surf_queue_list; /* list of surface queues belonging to bufmgr */ + struct list_head debug_key_list; /* list of debug data key list belonging to bufmgr */ + + tbm_module *module; /* tbm module information */ }; /** @@ -249,6 +214,8 @@ struct _tbm_bufmgr { * */ struct _tbm_surface { + unsigned int magic; /* tbm surface magic number */ + tbm_bufmgr bufmgr; /* tbm buffer manager */ tbm_surface_info_s info; /* tbm surface information */ @@ -269,7 +236,20 @@ struct _tbm_surface { struct list_head item_link; /* link of surface */ - struct list_head user_data_list; /* list of the user_date in surface */ + struct list_head user_data_list; /* list of the user_data in surface */ + + struct list_head debug_data_list; /* list of debug data */ + + struct list_head destroy_funcs; /* list of destory callback function */ + + struct { + int x; + int y; + int width; + int height; + } damage; + + tbm_surface_data *surface_data; /* surface data of the module */ }; typedef struct { @@ -281,10 +261,26 @@ typedef struct { struct list_head item_link; } tbm_user_data; +typedef struct { + char *key; + char *value; + + /* link of user_data */ + struct list_head item_link; +} tbm_surface_debug_data; + +typedef struct _tbm_surface_destroy_func_info { + tbm_surface_internal_destroy_handler destroy_func; + void *user_data; + + struct list_head item_link; +} tbm_surface_destroy_func_info; + +tbm_bufmgr _tbm_bufmgr_get_bufmgr(void); int _tbm_bo_set_surface(tbm_bo bo, tbm_surface_h surface); int _tbm_surface_is_valid(tbm_surface_h surface); +void _tbm_bo_free(tbm_bo bo); -/* functions for mutex */ int tbm_surface_internal_get_info(tbm_surface_h surface, int opt, tbm_surface_info_s *info, int map); void tbm_surface_internal_unmap(tbm_surface_h surface); @@ -293,6 +289,7 @@ unsigned int tbm_surface_internal_get_height(tbm_surface_h surface); tbm_format tbm_surface_internal_get_format(tbm_surface_h surface); unsigned int _tbm_surface_internal_get_debug_pid(tbm_surface_h surface); char *_tbm_surface_internal_format_to_str(tbm_format format); +char * _tbm_surface_internal_get_debug_data(tbm_surface_h surface, char *key); tbm_user_data *user_data_lookup(struct list_head *user_data_list, unsigned long key); @@ -300,4 +297,23 @@ tbm_user_data *user_data_create(unsigned long key, tbm_data_free data_free_func); void user_data_delete(tbm_user_data *user_data); -#endif /* _TBM_BUFMGR_INT_H_ */ +int tbm_bufmgr_get_fd_limit(void); +tbm_bufmgr tbm_bufmgr_get(void); + +void _tbm_set_last_result(tbm_error_e err); + +char *_tbm_flag_to_str(int f); + +/* functions for mutex */ +void _tbm_bufmgr_mutex_lock(void); +void _tbm_bufmgr_mutex_unlock(void); +tbm_bo tbm_bufmgr_internal_find_bo(tbm_bufmgr bufmgr, tbm_bo bo); + +tbm_bo tbm_bufmgr_internal_alloc_bo(tbm_bufmgr bufmgr, int size, int flags); +tbm_bo tbm_bufmgr_internal_alloc_bo_with_format(tbm_bufmgr bufmgr, int format, int bo_idx, int width, int bpp, int height, tbm_bo_memory_type flags, tbm_error_e *error); +tbm_bo tbm_bufmgr_internal_alloc_bo_with_bo_data(tbm_bufmgr bufmgr, tbm_bo_data *bo_data, int flags, tbm_error_e *error); +tbm_bo tbm_bufmgr_internal_import_bo_with_key(tbm_bufmgr bufmgr, tbm_key key); +tbm_bo tbm_bufmgr_internal_import_bo_with_fd(tbm_bufmgr bufmgr, tbm_fd fd); +int tbm_bufmgr_internal_support_capabilites(tbm_bufmgr bufmgr, int capabilities); + +#endif /* _TBM_BUFMGR_INT_H_ */