EXPECT_EQ(ret, 0);
EXPECT_STREQ(tbm_error_str(tbm_get_last_error()), tbm_error_str(TBM_ERROR_INVALID_PARAMETER));
}
-
-#if 0
-TEST_F(TBMBo, BoLockedOnce)
-{
- // TODO: need to be fixed. use tbm_bufmgr_set_bo_lock_type instead of BUFMGR_LOCK_TYPE
- tbm_bo_handle bo_handle1, bo_handle2;
- tbm_bo bo;
- int ret_locked;
-
- setenv("BUFMGR_LOCK_TYPE", "once", 1);
-
- bo = tbm_bo_alloc(bufmgr, TBM_UT_BO_SIZE, TBM_BO_DEFAULT);
- EXPECT_NE(nullptr, bo);
-
- bo_handle1 = tbm_bo_map(bo, TBM_DEVICE_2D, TBM_OPTION_READ | TBM_OPTION_WRITE);
- bo_handle2 = tbm_bo_map(bo, TBM_DEVICE_2D, TBM_OPTION_READ | TBM_OPTION_WRITE);
- (void) bo_handle1;
- (void) bo_handle2;
-
- tbm_bo_unmap(bo);
-
- ret_locked = tbm_bo_locked(bo);
-
- tbm_bo_unmap(bo);
-
- EXPECT_EQ(ret_locked, 0);
-}
-
-TEST_F(TBMBo, BoLockedAlways)
-{
- // TODO: need to be fixed. use tbm_bufmgr_set_bo_lock_type instead of BUFMGR_LOCK_TYPE
- tbm_bo_handle bo_handle1, bo_handle2;
- tbm_bo bo;
- int ret_locked;
-
- setenv("BUFMGR_LOCK_TYPE", "always", 1);
-
- bo = tbm_bo_alloc(bufmgr, TBM_UT_BO_SIZE, TBM_BO_DEFAULT);
- EXPECT_NE(nullptr, bo);
-
- bo_handle1 = tbm_bo_map(bo, TBM_DEVICE_2D, TBM_OPTION_READ | TBM_OPTION_WRITE);
- bo_handle2 = tbm_bo_map(bo, TBM_DEVICE_2D, TBM_OPTION_READ | TBM_OPTION_WRITE);
- (void) bo_handle1;
- (void) bo_handle2;
-
- tbm_bo_unmap(bo);
-
- ret_locked = tbm_bo_locked(bo);
-
- tbm_bo_unmap(bo);
-
- EXPECT_EQ(ret_locked, 1);
-}
-
-TEST_F(TBMBo, BoLockedNone)
-{
- // TODO: need to be fixed. use tbm_bufmgr_set_bo_lock_type instead of BUFMGR_LOCK_TYPE
- tbm_bo_handle bo_handle1;
- tbm_bo bo;
- int ret_locked;
-
- setenv("BUFMGR_LOCK_TYPE", "none", 1);
-
- bo = tbm_bo_alloc(bufmgr, TBM_UT_BO_SIZE, TBM_BO_DEFAULT);
- EXPECT_NE(nullptr, bo);
-
- bo_handle1 = tbm_bo_map(bo, TBM_DEVICE_2D, TBM_OPTION_READ | TBM_OPTION_WRITE);
- (void) bo_handle1;
-
- ret_locked = tbm_bo_locked(bo);
-
- tbm_bo_unmap(bo);
-
- EXPECT_EQ(ret_locked, 0);
-}
-#endif
-
/* tbm_bo_swap() */
TEST_F(TBMBo, BoSwap)
TBMEnv::TearDown();
}
-static int memory_for_invalid_param;
-static tbm_bufmgr invalid_bufmgr = (tbm_bufmgr)&memory_for_invalid_param;
-
/* tbm_bufmgr_get_capability() */
TEST_F(TBMBufmgr, BufmgrGetCapability)
{
}
#endif
-/* tbm_bufmgr_set_bo_lock_type() */
-TEST_F(TBMBufmgr, BufmgrSetBoLockType)
-{
- int ret;
-
- ret = tbm_bufmgr_set_bo_lock_type(bufmgr, TBM_BUFMGR_BO_LOCK_TYPE_NEVER);
- EXPECT_EQ(ret, 1);
- EXPECT_STREQ(tbm_error_str(tbm_get_last_error()), tbm_error_str(TBM_ERROR_NONE));
- ret = tbm_bufmgr_set_bo_lock_type(bufmgr, TBM_BUFMGR_BO_LOCK_TYPE_ONCE);
- EXPECT_EQ(ret, 1);
- EXPECT_STREQ(tbm_error_str(tbm_get_last_error()), tbm_error_str(TBM_ERROR_NONE));
- ret = tbm_bufmgr_set_bo_lock_type(bufmgr, TBM_BUFMGR_BO_LOCK_TYPE_ALWAYS);
- EXPECT_EQ(ret, 1);
- EXPECT_STREQ(tbm_error_str(tbm_get_last_error()), tbm_error_str(TBM_ERROR_NONE));
-}
-
-TEST_F(TBMBufmgr, BufmgrSetBoLockTypeWithBufmgrParamTest)
-{
- int ret;
-
- ret = tbm_bufmgr_set_bo_lock_type(NULL, TBM_BUFMGR_BO_LOCK_TYPE_NEVER);
- EXPECT_EQ(ret, 0);
- ret = tbm_bufmgr_set_bo_lock_type(invalid_bufmgr, TBM_BUFMGR_BO_LOCK_TYPE_NEVER);
- EXPECT_EQ(ret, 0);
- EXPECT_STREQ(tbm_error_str(tbm_get_last_error()), tbm_error_str(TBM_ERROR_INVALID_PARAMETER));
-}
-
// TODO::::
/* tbm_bufmgr_debug_show() */
/* tbm_bufmgr_debug_tbm_info_get() */
* \brief Tizen Buffer Manager Internal
*/
-/**
- * @brief Enumeration of buffer manager lock try for bo
- * @since_tizen 5.0
- */
-typedef enum {
- TBM_BUFMGR_BO_LOCK_TYPE_NEVER = 0, /**< the bufmgr do not try to lock the bos when the tbm_bo_map is called. */
- TBM_BUFMGR_BO_LOCK_TYPE_ONCE, /**< the bufmgr tries to lock the bos only once when the tbm_bo_map is called. */
- TBM_BUFMGR_BO_LOCK_TYPE_ALWAYS, /**< the bufmgr always tries to lock the bos when the tbm_bo_map is called. */
-} tbm_bufmgr_bo_lock_type;
#ifdef __cplusplus
extern "C" {
*/
tbm_bufmgr tbm_bufmgr_server_init(void);
-/**
- * @brief Set the bo_lock_type of the bufffer manager.
- * @details set the bo_lock_type
- * @since_tizen 5.0
- */
-int tbm_bufmgr_set_bo_lock_type(tbm_bufmgr bufmgr, tbm_bufmgr_bo_lock_type bo_lock_type);
#ifdef __cplusplus
}
if (!bo)
return 0;
- /* do not try to lock the bo */
- if (bo->bufmgr->bo_lock_type == TBM_BUFMGR_BO_LOCK_TYPE_NEVER)
- return 1;
-
if (bo->lock_cnt < 0) {
TBM_ERR("error bo:%p LOCK_CNT=%d",
bo, bo->lock_cnt);
old = bo->lock_cnt;
- switch (bo->bufmgr->bo_lock_type) {
- case TBM_BUFMGR_BO_LOCK_TYPE_ONCE:
- if (bo->lock_cnt == 0) {
- _tbm_bufmgr_mutex_unlock();
- ret = _bo_lock(bo, device, opt);
- _tbm_bufmgr_mutex_lock();
- if (ret)
- bo->lock_cnt++;
- } else
- ret = 1;
- break;
- case TBM_BUFMGR_BO_LOCK_TYPE_ALWAYS:
- _tbm_bufmgr_mutex_unlock();
- ret = _bo_lock(bo, device, opt);
- _tbm_bufmgr_mutex_lock();
- if (ret)
- bo->lock_cnt++;
- break;
- default:
- TBM_ERR("error bo:%p bo_lock_type[%d] is wrong.",
- bo, bo->bufmgr->bo_lock_type);
- ret = 0;
- break;
- }
+ _tbm_bufmgr_mutex_unlock();
+ ret = _bo_lock(bo, device, opt);
+ _tbm_bufmgr_mutex_lock();
+
+ if (ret) bo->lock_cnt++;
TBM_DBG(">> LOCK bo:%p(%d->%d)", bo, old, bo->lock_cnt);
{
int old;
- /* do not try to unlock the bo */
- if (bo->bufmgr->bo_lock_type == TBM_BUFMGR_BO_LOCK_TYPE_NEVER)
- return;
-
old = bo->lock_cnt;
- switch (bo->bufmgr->bo_lock_type) {
- case TBM_BUFMGR_BO_LOCK_TYPE_ONCE:
- if (bo->lock_cnt > 0) {
- bo->lock_cnt--;
- if (bo->lock_cnt == 0)
- _bo_unlock(bo);
- }
- break;
- case TBM_BUFMGR_BO_LOCK_TYPE_ALWAYS:
- if (bo->lock_cnt > 0) {
- bo->lock_cnt--;
- _bo_unlock(bo);
- }
- break;
- default:
- TBM_ERR("error bo:%p bo_lock_type[%d] is wrong.",
- bo, bo->bufmgr->bo_lock_type);
- break;
+ if (bo->lock_cnt > 0) {
+ bo->lock_cnt--;
+ _bo_unlock(bo);
}
if (bo->lock_cnt < 0)
TBM_BO_RETURN_VAL_IF_FAIL(_tbm_bo_is_valid(bo), 0);
- if (bo->bufmgr->bo_lock_type == TBM_BUFMGR_BO_LOCK_TYPE_NEVER) {
- TBM_ERR("bo(%p) lock_cnt(%d)", bo, bo->lock_cnt);
- _tbm_set_last_result(TBM_ERROR_INVALID_OPERATION);
- _tbm_bufmgr_mutex_unlock();
- return 0;
- }
-
if (bo->lock_cnt > 0) {
TBM_TRACE_BO("error: bo(%p) lock_cnt(%d)", bo, bo->lock_cnt);
_tbm_bufmgr_mutex_unlock();
#ifdef TBM_BUFMGR_INIT_TIME
struct timeval start_tv, end_tv;
#endif
- char *env;
#ifdef TBM_BUFMGR_INIT_TIME
/* get the start tv */
TBM_INFO("create tizen bufmgr:%p ref_count:%d",
gBufMgr, gBufMgr->ref_count);
- /* setup the bo_lock_type */
- env = getenv("BUFMGR_LOCK_TYPE");
- if (env && !strcmp(env, "always"))
- gBufMgr->bo_lock_type = TBM_BUFMGR_BO_LOCK_TYPE_ALWAYS;
- else if (env && !strcmp(env, "none"))
- gBufMgr->bo_lock_type = TBM_BUFMGR_BO_LOCK_TYPE_NEVER;
- else if (env && !strcmp(env, "once"))
- gBufMgr->bo_lock_type = TBM_BUFMGR_BO_LOCK_TYPE_ONCE;
- else
- gBufMgr->bo_lock_type = TBM_BUFMGR_BO_LOCK_TYPE_ALWAYS;
-
- TBM_DBG("BUFMGR_LOCK_TYPE=%s", env ? env : "default:once");
-
/* intialize bo_list */
LIST_INITHEAD(&gBufMgr->bo_list);
return bufmgr;
}
-int
-tbm_bufmgr_set_bo_lock_type(tbm_bufmgr bufmgr, tbm_bufmgr_bo_lock_type bo_lock_type)
-{
- pthread_mutex_lock(&gLock);
- _tbm_bufmgr_mutex_lock();
-
- _tbm_set_last_result(TBM_ERROR_NONE);
-
- TBM_GOTO_VAL_IF_FAIL(TBM_BUFMGR_IS_VALID(gBufMgr), failed);
- TBM_GOTO_VAL_IF_FAIL(bufmgr == gBufMgr, failed);
-
- gBufMgr->bo_lock_type = bo_lock_type;
-
- TBM_INFO("The bo_lock_type of the bo is %d\n", bo_lock_type);
-
- _tbm_bufmgr_mutex_unlock();
- pthread_mutex_unlock(&gLock);
-
- return 1;
-
-failed:
- _tbm_set_last_result(TBM_ERROR_INVALID_PARAMETER);
- _tbm_bufmgr_mutex_unlock();
- pthread_mutex_unlock(&gLock);
-
- return 0;
-}
-
-
int tbm_bufmgr_get_fd_limit(void)
{
struct rlimit lim;
struct _tbm_bufmgr {
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 */