From d093d1865c5100cb48f1bf6728b9ee98b36423d7 Mon Sep 17 00:00:00 2001 From: SooChan Lim Date: Tue, 15 Jun 2021 20:56:54 +0900 Subject: [PATCH] tbm_module: make tbm_module_bufmgr_import_key encapsulate the bufmgr_import_key with this function. Change-Id: I45c098c07caa00038e1ec983dd11b535bb030f0d --- src/tbm_bo.c | 112 ++++++++------------------------------------------- src/tbm_bufmgr_int.h | 2 + src/tbm_module.c | 43 ++++++++++++++++++++ 3 files changed, 62 insertions(+), 95 deletions(-) diff --git a/src/tbm_bo.c b/src/tbm_bo.c index cc7413d..0f4210f 100644 --- a/src/tbm_bo.c +++ b/src/tbm_bo.c @@ -840,11 +840,8 @@ done: tbm_bo tbm_bo_import(tbm_bufmgr bufmgr, unsigned int key) { - tbm_bo bo; - tbm_bo bo2 = NULL; - void *bo_priv; + tbm_bo bo, bo2 = NULL; tbm_error_e error; - tbm_backend_bo_data *bo_data; int flags; _tbm_bufmgr_mutex_lock(); @@ -852,26 +849,6 @@ tbm_bo_import(tbm_bufmgr bufmgr, unsigned int key) 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)); @@ -884,77 +861,27 @@ tbm_bo_import(tbm_bufmgr bufmgr, unsigned int key) /* 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); + bo->bo_data = tbm_module_bufmgr_bo_import_key(bufmgr->module, bo, key, &error); + if (!bo->bo_data) { /* 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; - } + TBM_ERR("tbm_module_bufmgr_bo_import_key failed. tbm_key:%d", key); + _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_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; - } + 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) key(%d) flag(%s) in list", + 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) { @@ -986,11 +913,6 @@ tbm_bo_import(tbm_bufmgr bufmgr, unsigned int key) _tbm_bufmgr_mutex_unlock(); return bo; - -import_fail: - free(bo); - _tbm_bufmgr_mutex_unlock(); - return NULL; } tbm_bo diff --git a/src/tbm_bufmgr_int.h b/src/tbm_bufmgr_int.h index 0fa9a70..1cf31d2 100644 --- a/src/tbm_bufmgr_int.h +++ b/src/tbm_bufmgr_int.h @@ -360,4 +360,6 @@ tbm_error_e tbm_module_bufmgr_get_plane_data(tbm_module *module, int fo tbm_backend_bo_data *tbm_module_bufmgr_bo_alloc(tbm_module *module, tbm_bo bo, int size, int flags, tbm_error_e *error); tbm_backend_bo_data *tbm_module_bufmgr_bo_alloc_with_format(tbm_module *module, int format, int bo_idx, int width, int height, int bpp, tbm_bo_memory_type flags, tbm_error_e *error); tbm_backend_bo_data *tbm_module_bufmgr_bo_import_fd(tbm_module *module, tbm_bo bo, tbm_fd fd, tbm_error_e *error); +tbm_backend_bo_data *tbm_module_bufmgr_bo_import_key(tbm_module *module, tbm_bo bo, tbm_key key, tbm_error_e *error); + #endif /* _TBM_BUFMGR_INT_H_ */ diff --git a/src/tbm_module.c b/src/tbm_module.c index 03a3cd7..bd2eeb8 100644 --- a/src/tbm_module.c +++ b/src/tbm_module.c @@ -766,3 +766,46 @@ tbm_module_bufmgr_bo_import_fd(tbm_module *module, tbm_bo bo, tbm_fd fd, tbm_err return bo_data; } + +tbm_backend_bo_data * +tbm_module_bufmgr_bo_import_key(tbm_module *module, tbm_bo bo, tbm_key key, tbm_error_e *error) +{ + tbm_backend_bo_data *bo_data = NULL; + tbm_backend_bufmgr_func *bufmgr_func = NULL; + tbm_bufmgr_backend backend = NULL; + + TBM_RETURN_VAL_SET_ERR_IF_FAIL(module, NULL, *error, TBM_ERROR_INVALID_PARAMETER); + + switch (module->type) { + case TBM_MODULE_TYPE_HAL_TBM: + bo_data = (tbm_backend_bo_data *)hal_tbm_bufmgr_import_key(module->hal_bufmgr, key, (hal_tbm_error *)error); + break; +/* LCOV_EXCL_START */ + case TBM_MODULE_TYPE_TBM_BACKEND: + bufmgr_func = module->bufmgr_func; + TBM_RETURN_VAL_SET_ERR_IF_FAIL(bufmgr_func, NULL, *error, TBM_ERROR_INVALID_OPERATION); + TBM_RETURN_VAL_SET_ERR_IF_FAIL(bufmgr_func->bufmgr_import_key, NULL, *error, TBM_ERROR_NOT_SUPPORTED); + + bo_data = bufmgr_func->bufmgr_import_key(module->bufmgr_data, key, error); + break; + case TBM_MODULE_TYPE_BUFMGR_BACKEND: + TBM_WRN("!!WARNING: This backend interface will be DEPRECATED after Tizen 6.5."); + backend = module->backend; + TBM_RETURN_VAL_SET_ERR_IF_FAIL(backend, NULL, *error, TBM_ERROR_INVALID_OPERATION); + TBM_RETURN_VAL_SET_ERR_IF_FAIL(backend->bo_import, NULL, *error, TBM_ERROR_NOT_SUPPORTED); + + bo_data = (void *)backend->bo_import(bo, key); + if (!bo_data) + *error = TBM_ERROR_INVALID_OPERATION; + else + *error = TBM_ERROR_NONE; + break; + default: + TBM_ERR("Wrong module type:%d", module->type); + *error = TBM_ERROR_INVALID_OPERATION; + break; +/* LCOV_EXCL_STOP */ + } + + return bo_data; +} -- 2.7.4