X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Ftdm_buffer.c;h=97857b42fde613722c94980598bba9874a2dd528;hb=1b7ce67e473517578e9c78b4afe05fb0bf2a8361;hp=3c9fb48e58b514a9e5a4d7eac26459ab64ddb7bc;hpb=e77e3b05eea42d515618712dfc8cdc1d8569fc3f;p=platform%2Fcore%2Fuifw%2Flibtdm.git diff --git a/src/tdm_buffer.c b/src/tdm_buffer.c index 3c9fb48..97857b4 100644 --- a/src/tdm_buffer.c +++ b/src/tdm_buffer.c @@ -9,7 +9,7 @@ * Taeheon Kim , * YoungJun Cho , * SooChan Lim , - * Boram Park + * Boram Park * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the @@ -120,7 +120,7 @@ tdm_buffer_add_release_handler(tbm_surface_h buffer, tdm_buffer_release_handler func, void *user_data) { tdm_buffer_info *buf_info; - tdm_buffer_func_info *func_info; + tdm_buffer_func_info *func_info = NULL; TDM_RETURN_VAL_IF_FAIL(buffer != NULL, TDM_ERROR_INVALID_PARAMETER); TDM_RETURN_VAL_IF_FAIL(func != NULL, TDM_ERROR_INVALID_PARAMETER); @@ -128,6 +128,13 @@ tdm_buffer_add_release_handler(tbm_surface_h buffer, buf_info = tdm_buffer_get_info(buffer); TDM_RETURN_VAL_IF_FAIL(buf_info != NULL, TDM_ERROR_OUT_OF_MEMORY); + LIST_FOR_EACH_ENTRY(func_info, &buf_info->release_funcs, link) { + if (func_info->release_func == func && func_info->user_data == user_data) { + TDM_ERR("can't add twice"); + return TDM_ERROR_BAD_REQUEST; + } + } + func_info = calloc(1, sizeof(tdm_buffer_func_info)); TDM_RETURN_VAL_IF_FAIL(func_info != NULL, TDM_ERROR_OUT_OF_MEMORY); @@ -163,26 +170,6 @@ tdm_buffer_remove_release_handler(tbm_surface_h buffer, } } -INTERN void -tdm_buffer_remove_release_handler_internal(tbm_surface_h buffer) -{ - tdm_buffer_info *buf_info; - tdm_buffer_func_info *func_info = NULL, *next = NULL; - - TDM_RETURN_IF_FAIL(buffer != NULL); - - buf_info = tdm_buffer_get_info(buffer); - TDM_RETURN_IF_FAIL(buf_info != NULL); - - LIST_FOR_EACH_ENTRY_SAFE(func_info, next, &buf_info->release_funcs, link) { - - LIST_DEL(&func_info->link); - free(func_info); - - return; - } -} - EXTERN tbm_surface_h tdm_buffer_ref_backend(tbm_surface_h buffer) { @@ -196,6 +183,9 @@ tdm_buffer_ref_backend(tbm_surface_h buffer) buf_info->backend_ref_count++; tbm_surface_internal_ref(buffer); + if (tdm_debug_module & TDM_DEBUG_BUFFER) + TDM_INFO("buffer(%p) backend_ref_count(%d)", buffer, buf_info->backend_ref_count); + return buffer; } @@ -211,13 +201,17 @@ tdm_buffer_unref_backend(tbm_surface_h buffer) TDM_RETURN_IF_FAIL(buf_info != NULL); buf_info->backend_ref_count--; + + if (tdm_debug_module & TDM_DEBUG_BUFFER) + TDM_INFO("buffer(%p) backend_ref_count(%d)", buffer, buf_info->backend_ref_count); + if (buf_info->backend_ref_count > 0) { tbm_surface_internal_unref(buffer); return; } -// if (!tdm_thread_in_display_thread(syscall(SYS_gettid))) -// TDM_NEVER_GET_HERE(); + if (tdm_debug_module & TDM_DEBUG_BUFFER) + TDM_INFO("buffer(%p) released", buffer); tbm_surface_internal_ref(buffer); LIST_FOR_EACH_ENTRY_SAFE(func_info, next, &buf_info->release_funcs, link) @@ -232,7 +226,7 @@ tdm_buffer_add_destroy_handler(tbm_surface_h buffer, tdm_buffer_destroy_handler func, void *user_data) { tdm_buffer_info *buf_info; - tdm_buffer_func_info *func_info; + tdm_buffer_func_info *func_info = NULL; TDM_RETURN_VAL_IF_FAIL(buffer != NULL, TDM_ERROR_INVALID_PARAMETER); TDM_RETURN_VAL_IF_FAIL(func != NULL, TDM_ERROR_INVALID_PARAMETER); @@ -240,6 +234,13 @@ tdm_buffer_add_destroy_handler(tbm_surface_h buffer, buf_info = tdm_buffer_get_info(buffer); TDM_RETURN_VAL_IF_FAIL(buf_info != NULL, TDM_ERROR_OUT_OF_MEMORY); + LIST_FOR_EACH_ENTRY(func_info, &buf_info->destroy_funcs, link) { + if (func_info->destroy_func == func && func_info->user_data == user_data) { + TDM_ERR("can't add twice"); + return TDM_ERROR_BAD_REQUEST; + } + } + func_info = calloc(1, sizeof(tdm_buffer_func_info)); TDM_RETURN_VAL_IF_FAIL(func_info != NULL, TDM_ERROR_OUT_OF_MEMORY); @@ -275,39 +276,3 @@ tdm_buffer_remove_destroy_handler(tbm_surface_h buffer, } } -INTERN tbm_surface_h -tdm_buffer_list_get_first_entry(struct list_head *list) -{ - tdm_buffer_info *buf_info = NULL; - - TDM_RETURN_VAL_IF_FAIL(list != NULL, NULL); - - if (LIST_IS_EMPTY(list)) - return NULL; - - buf_info = container_of((list)->next, buf_info, link); - - return buf_info->buffer; -} - -INTERN void -tdm_buffer_list_dump(struct list_head *list) -{ - tdm_buffer_info *buf_info = NULL; - char str[256], *p; - int len = sizeof(str); - - TDM_RETURN_IF_FAIL(list != NULL); - - p = str; - LIST_FOR_EACH_ENTRY(buf_info, list, link) { - if (len > 0) { - int l = snprintf(p, len, " %p", buf_info->buffer); - p += l; - len -= l; - } else - break; - } - - TDM_INFO("\t %s", str); -}