X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Ftbm_bo.c;h=39aac766ce8a337a473a4ceb8caa0441829189a7;hb=e565c41f907df4ed8a2b85d304bf11cc3ba0724d;hp=cc7413dcb20b9d80ea067c68aed37c5c12950a4f;hpb=d55cce5a41afb64a1ab2d27d60c087d68fd2e47d;p=platform%2Fcore%2Fuifw%2Flibtbm.git diff --git a/src/tbm_bo.c b/src/tbm_bo.c index cc7413d..39aac76 100644 --- a/src/tbm_bo.c +++ b/src/tbm_bo.c @@ -34,8 +34,6 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include "tbm_bufmgr_int.h" #include "list.h" -#define TBM_BO_MAGIC 0xBF011234 - /* check condition */ #define TBM_BO_RETURN_IF_FAIL(cond) {\ if (!(cond)) {\ @@ -55,7 +53,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. } \ } -static char * +char * _tbm_flag_to_str(int f) { static char str[255]; @@ -88,18 +86,6 @@ _tbm_flag_to_str(int f) return str; } -static void -_tbm_util_check_bo_cnt(tbm_bufmgr bufmgr) -{ - static int last_chk_bo_cnt = 0; - - if ((bufmgr->bo_cnt >= 500) && ((bufmgr->bo_cnt % 20) == 0) && - (bufmgr->bo_cnt > last_chk_bo_cnt)) { - TBM_DBG("============TBM BO CNT DEBUG: bo_cnt=%d\n", bufmgr->bo_cnt); - tbm_bufmgr_debug_show(bufmgr); - last_chk_bo_cnt = bufmgr->bo_cnt; - } -} /* LCOV_EXCL_STOP */ tbm_user_data * @@ -328,20 +314,6 @@ _tbm_bo_is_valid(tbm_bo bo) } static void -_tbm_bo_init(tbm_bufmgr bufmgr, tbm_bo bo, int flags) -{ - bo->bufmgr = bufmgr; - bo->flags = flags; - bo->magic = TBM_BO_MAGIC; - bo->ref_cnt = 1; - - LIST_INITHEAD(&bo->user_data_list); - - bufmgr->bo_cnt++; - LIST_ADD(&bo->item_link, &bufmgr->bo_list); -} - -static void _tbm_bo_deinit(tbm_bo bo) { bo->magic = 0; @@ -354,7 +326,6 @@ tbm_bo tbm_bo_alloc(tbm_bufmgr bufmgr, int size, int flags) { tbm_bo bo; - tbm_backend_bo_data *bo_data; tbm_error_e error; _tbm_bufmgr_mutex_lock(); @@ -363,141 +334,24 @@ tbm_bo_alloc(tbm_bufmgr bufmgr, int size, int flags) TBM_BO_RETURN_VAL_IF_FAIL(TBM_BUFMGR_IS_VALID(bufmgr), NULL); TBM_BO_RETURN_VAL_IF_FAIL(size > 0, NULL); - bo = calloc(1, sizeof(struct _tbm_bo)); + bo = tbm_bufmgr_internal_alloc_bo(bufmgr, size, flags, &error); if (!bo) { /* LCOV_EXCL_START */ - _tbm_set_last_result(TBM_ERROR_OUT_OF_MEMORY); + TBM_ERR("tbm_bufmgr_internal_alloc_bo failed. error:%d", error); + _tbm_set_last_result(error); _tbm_bufmgr_mutex_unlock(); return NULL; /* LCOV_EXCL_STOP */ } - _tbm_util_check_bo_cnt(bufmgr); - - bo_data = tbm_module_bufmgr_bo_alloc(bufmgr->module, bo, size, flags, &error); - if (!bo_data || error != TBM_ERROR_NONE) { - /* LCOV_EXCL_START */ - TBM_ERR("tbm_module_bufmgr_bo_alloc failed. error:%d", error); - _tbm_set_last_result(error); - goto alloc_fail; - /* LCOV_EXCL_STOP */ - } - bo->bo_data = bo_data; - bo->priv = (void *)bo_data; // TODO: this will be DEPRECATED. - - _tbm_bo_init(bufmgr, bo, flags); - TBM_TRACE_BO("bo(%p) size(%d) refcnt(%d), flag(%s)\n", bo, size, bo->ref_cnt, _tbm_flag_to_str(bo->flags)); _tbm_bufmgr_mutex_unlock(); return bo; - -alloc_fail: - TBM_ERR("error: fail to create of tbm_bo size(%d) flag(%s)\n", size, _tbm_flag_to_str(flags)); - free(bo); - _tbm_bufmgr_mutex_unlock(); - return NULL; -} - -/* LCOV_EXCL_START */ -tbm_bo -tbm_bo_alloc_with_format(tbm_bufmgr bufmgr, int format, int bo_idx, int width, - int height, int bpp, tbm_bo_memory_type flags, tbm_error_e *error) -{ - tbm_bo bo = NULL; - - _tbm_bufmgr_mutex_lock(); - _tbm_set_last_result(TBM_ERROR_NONE); - - TBM_BO_RETURN_VAL_IF_FAIL(TBM_BUFMGR_IS_VALID(bufmgr), NULL); - - bo = calloc(1, sizeof(struct _tbm_bo)); - if (!bo) { - /* LCOV_EXCL_START */ - TBM_ERR("error: fail to tbm_bo_alloc_with_format fmt(%s) idx(%d) w(%d) h(%d) mem_types(%s)\n", - FOURCC_STR(format), bo_idx, width, height, _tbm_flag_to_str(flags)); - _tbm_set_last_result(TBM_ERROR_OUT_OF_MEMORY); - /* LCOV_EXCL_STOP */ - goto fail; - } - - _tbm_util_check_bo_cnt(bufmgr); - - bo->bo_data = tbm_module_bufmgr_bo_alloc_with_format(bufmgr->module, format, bo_idx, width, height, bpp, flags, error); - if (!bo->bo_data) { - /* LCOV_EXCL_START */ - TBM_ERR("tbm_module_bufmgr_bo_alloc_with_format failed. fmt:%d idx:%d wxh:%dx%d mem_types:%s\n", - format, bo_idx, width, height, _tbm_flag_to_str(flags)); - _tbm_set_last_result(*error); - /* LCOV_EXCL_STOP */ - goto fail; - } - - _tbm_bo_init(bufmgr, bo, flags); - - _tbm_bufmgr_mutex_unlock(); - - return bo; - -fail: - if (bo) - free(bo); - _tbm_bufmgr_mutex_unlock(); - - return NULL; -} - -tbm_bo -tbm_bo_alloc_with_bo_data(tbm_bufmgr bufmgr, tbm_backend_bo_data *bo_data, int flags) -{ - tbm_bo bo, bo2 = NULL; - - _tbm_bufmgr_mutex_lock(); - _tbm_set_last_result(TBM_ERROR_NONE); - - TBM_BO_RETURN_VAL_IF_FAIL(TBM_BUFMGR_IS_VALID(bufmgr), NULL); - TBM_BO_RETURN_VAL_IF_FAIL(bo_data, NULL); - - // return an existed bo if the bo is already created with the same bo_data. - if (!LIST_IS_EMPTY(&bufmgr->bo_list)) { - LIST_FOR_EACH_ENTRY(bo2, &bufmgr->bo_list, item_link) { - if (bo2->bo_data == bo_data) { - TBM_ERR("find bo(%p) ref(%d) flag(%s) in list\n", - bo2, bo2->ref_cnt, _tbm_flag_to_str(bo2->flags)); - bo2->ref_cnt++; - _tbm_bufmgr_mutex_unlock(); - return bo2; - } - } - } - - bo = calloc(1, sizeof(struct _tbm_bo)); - if (!bo) { - /* LCOV_EXCL_START */ - _tbm_set_last_result(TBM_ERROR_OUT_OF_MEMORY); - _tbm_bufmgr_mutex_unlock(); - return NULL; - /* LCOV_EXCL_STOP */ - } - - _tbm_util_check_bo_cnt(bufmgr); - - bo->get_from_hal_surface = 1; - bo->bo_data = bo_data; - - _tbm_bo_init(bufmgr, bo, flags); - - TBM_TRACE_BO("bo(%p) refcnt(%d), flag(%s)\n", bo, bo->ref_cnt, _tbm_flag_to_str(bo->flags)); - - _tbm_bufmgr_mutex_unlock(); - - return bo; } -/* LCOV_EXCL_STOP */ - tbm_bo tbm_bo_ref(tbm_bo bo) { @@ -841,227 +695,53 @@ tbm_bo tbm_bo_import(tbm_bufmgr bufmgr, unsigned int key) { tbm_bo bo; - tbm_bo bo2 = NULL; - void *bo_priv; tbm_error_e error; - tbm_backend_bo_data *bo_data; - int flags; _tbm_bufmgr_mutex_lock(); _tbm_set_last_result(TBM_ERROR_NONE); TBM_BO_RETURN_VAL_IF_FAIL(TBM_BUFMGR_IS_VALID(bufmgr), NULL); - if (!bufmgr->use_hal_tbm) { - if (bufmgr->backend_module_data) { - if (!bufmgr->bufmgr_func->bufmgr_import_key) { - /* LCOV_EXCL_START */ - _tbm_bufmgr_mutex_unlock(); - _tbm_set_last_result(TBM_ERROR_NOT_SUPPORTED); - return NULL; - /* LCOV_EXCL_STOP */ - } - } else { - if (!bufmgr->backend->bo_import) { - /* LCOV_EXCL_START */ - _tbm_bufmgr_mutex_unlock(); - _tbm_set_last_result(TBM_ERROR_NOT_SUPPORTED); - return NULL; - /* LCOV_EXCL_STOP */ - } - } - } - - _tbm_util_check_bo_cnt(bufmgr); - - bo = calloc(1, sizeof(struct _tbm_bo)); + bo = tbm_bufmgr_internal_import_bo_with_key(bufmgr, key, &error); if (!bo) { /* LCOV_EXCL_START */ - TBM_ERR("error: fail to import of tbm_bo by key(%d)\n", key); - _tbm_set_last_result(TBM_ERROR_OUT_OF_MEMORY); + TBM_ERR("tbm_bufmgr_internal_import_key failed. error:%d", error); + _tbm_set_last_result(error); _tbm_bufmgr_mutex_unlock(); return NULL; /* LCOV_EXCL_STOP */ } - if (bufmgr->use_hal_tbm) { - bo_data = (tbm_backend_bo_data *)hal_tbm_bufmgr_import_key(bufmgr->hal_bufmgr, key, (hal_tbm_error *)&error); - /* LCOV_EXCL_START */ - if (!bo_data) { - TBM_ERR("error: fail to import of tbm_bo by key(%d). error(%d)\n", key, error); - _tbm_set_last_result(error); - goto import_fail; - } - /* LCOV_EXCL_STOP */ - if (!LIST_IS_EMPTY(&bufmgr->bo_list)) { - LIST_FOR_EACH_ENTRY(bo2, &bufmgr->bo_list, item_link) { - if (bo2->bo_data == bo_data) { - TBM_TRACE_BO("find bo(%p) ref(%d) key(%d) flag(%s) in list\n", - bo2, bo2->ref_cnt, key, - _tbm_flag_to_str(bo2->flags)); - bo2->ref_cnt++; - free(bo); - _tbm_bufmgr_mutex_unlock(); - return bo2; - } - } - } - bo->bo_data = bo_data; - } else if (bufmgr->backend_module_data) { - bo_data = bufmgr->bufmgr_func->bufmgr_import_key(bufmgr->bufmgr_data, key, &error); - if (!bo_data) { - /* LCOV_EXCL_START */ - TBM_ERR("error: fail to import of tbm_bo by key(%d). error(%d)\n", key, error); - _tbm_set_last_result(error); - goto import_fail; - /* LCOV_EXCL_STOP */ - } - - if (!LIST_IS_EMPTY(&bufmgr->bo_list)) { - LIST_FOR_EACH_ENTRY(bo2, &bufmgr->bo_list, item_link) { - if (bo2->bo_data == bo_data) { - TBM_TRACE_BO("find bo(%p) ref(%d) key(%d) flag(%s) in list\n", - bo2, bo2->ref_cnt, key, - _tbm_flag_to_str(bo2->flags)); - bo2->ref_cnt++; - free(bo); - _tbm_bufmgr_mutex_unlock(); - return bo2; - } - } - } - bo->bo_data = bo_data; - } else { - bo_priv = bufmgr->backend->bo_import(bo, key); - if (!bo_priv) { - /* LCOV_EXCL_START */ - TBM_ERR("error: fail to import of tbm_bo by key(%d)\n", key); - _tbm_set_last_result(TBM_ERROR_INVALID_OPERATION); - goto import_fail; - /* LCOV_EXCL_STOP */ - } - - if (!LIST_IS_EMPTY(&bufmgr->bo_list)) { - LIST_FOR_EACH_ENTRY(bo2, &bufmgr->bo_list, item_link) { - if (bo2->priv == bo_priv) { - TBM_TRACE_BO("find bo(%p) ref(%d) key(%d) flag(%s) in list\n", - bo2, bo2->ref_cnt, key, - _tbm_flag_to_str(bo2->flags)); - bo2->ref_cnt++; - free(bo); - _tbm_bufmgr_mutex_unlock(); - return bo2; - } - } - } - bo->priv = bo_priv; - } - - if (bufmgr->use_hal_tbm) { - flags = (tbm_bo_memory_type)hal_tbm_bo_get_memory_types((hal_tbm_bo *)bo->bo_data, (hal_tbm_error *)&error); - if (error != TBM_ERROR_NONE) { - TBM_ERR("fail to get the bo flags(memory_types)"); - _tbm_set_last_result(error); - flags = TBM_BO_DEFAULT; - } - } else if (bufmgr->backend_module_data) { - flags = bufmgr->bo_func->bo_get_memory_types(bo->bo_data, &error); - if (error != TBM_ERROR_NONE) { - TBM_ERR("fail to get the bo flags(memory_types)"); - _tbm_set_last_result(error); - flags = TBM_BO_DEFAULT; - } - } else { - if (bufmgr->backend->bo_get_flags) - flags = bufmgr->backend->bo_get_flags(bo); - else - flags = TBM_BO_DEFAULT; - } - - _tbm_bo_init(bufmgr, bo, flags); - TBM_TRACE_BO("import new bo(%p) ref(%d) key(%d) flag(%s) in list\n", bo, bo->ref_cnt, key, _tbm_flag_to_str(bo->flags)); _tbm_bufmgr_mutex_unlock(); return bo; - -import_fail: - free(bo); - _tbm_bufmgr_mutex_unlock(); - return NULL; } tbm_bo tbm_bo_import_fd(tbm_bufmgr bufmgr, tbm_fd fd) { - tbm_bo bo, bo2 = NULL; + tbm_bo bo; tbm_error_e error; - int flags; _tbm_bufmgr_mutex_lock(); _tbm_set_last_result(TBM_ERROR_NONE); TBM_BO_RETURN_VAL_IF_FAIL(TBM_BUFMGR_IS_VALID(bufmgr), NULL); - _tbm_util_check_bo_cnt(bufmgr); - - bo = calloc(1, sizeof(struct _tbm_bo)); + bo = tbm_bufmgr_internal_import_bo_with_fd(bufmgr, fd, &error); if (!bo) { /* LCOV_EXCL_START */ - TBM_ERR("error: fail to import tbm_bo by tbm_fd(%d)\n", fd); - _tbm_set_last_result(TBM_ERROR_OUT_OF_MEMORY); - _tbm_bufmgr_mutex_unlock(); - return NULL; - /* LCOV_EXCL_STOP */ - } - - bo->bo_data = tbm_module_bufmgr_bo_import_fd(bufmgr->module, bo, fd, &error); - if (!bo->bo_data) { - /* LCOV_EXCL_START */ - TBM_ERR("tbm_module_bufmgr_bo_import_fd failed. tbm_fd:%d", fd); + TBM_ERR("tbm_bufmgr_internal_import_fd failed. error:%d", error); _tbm_set_last_result(error); _tbm_bufmgr_mutex_unlock(); return NULL; /* LCOV_EXCL_STOP */ } - if (!LIST_IS_EMPTY(&bufmgr->bo_list)) { - LIST_FOR_EACH_ENTRY(bo2, &bufmgr->bo_list, item_link) { - if (bo2->bo_data == bo->bo_data) { - TBM_TRACE_BO("find bo(%p) ref(%d) fd(%d) flag(%s) in list\n", - bo2, bo2->ref_cnt, fd, _tbm_flag_to_str(bo2->flags)); - bo2->ref_cnt++; - free(bo); - _tbm_bufmgr_mutex_unlock(); - return bo2; - } - } - } - - if (bufmgr->use_hal_tbm) { - flags = (tbm_bo_memory_type)hal_tbm_bo_get_memory_types((hal_tbm_bo *)bo->bo_data, (hal_tbm_error *)&error); - if (error != TBM_ERROR_NONE) { - TBM_ERR("fail to get the bo flags(memory_types)"); - _tbm_set_last_result(error); - flags = TBM_BO_DEFAULT; - } - } else if (bufmgr->backend_module_data) { - flags = bufmgr->bo_func->bo_get_memory_types(bo->bo_data, &error); - if (error != TBM_ERROR_NONE) { - TBM_ERR("fail to get the bo flags(memory_types)"); - _tbm_set_last_result(error); - flags = TBM_BO_DEFAULT; - } - } else { - if (bufmgr->backend->bo_get_flags) - flags = bufmgr->backend->bo_get_flags(bo); - else - flags = TBM_BO_DEFAULT; - } - - _tbm_bo_init(bufmgr, bo, flags); + LIST_INITHEAD(&bo->user_data_list); // TODO: remove this. build-break when it is removed. TBM_TRACE_BO("import bo(%p) ref(%d) fd(%d) flag(%s)\n", bo, bo->ref_cnt, fd, _tbm_flag_to_str(bo->flags));