From: Boram Park Date: Mon, 29 Jan 2018 00:53:05 +0000 (+0900) Subject: pp: using thread_cb X-Git-Tag: submit/tizen/20180227.014049~61 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=8b977463ed4b95abc75aa2ab547a877cb6d08d09;p=platform%2Fcore%2Fuifw%2Flibtdm.git pp: using thread_cb Change-Id: I02bdd31434f95ff5c249e839442fd397afaffdef --- diff --git a/src/tdm.c b/src/tdm.c index 2536479..a35bb4b 100644 --- a/src/tdm.c +++ b/src/tdm.c @@ -974,6 +974,10 @@ tdm_display_init(tdm_error *error) TDM_INFO("event loop init time: %.3f ms", (stamp2 - stamp1) * 1000.0); stamp1 = stamp2; + ret = tdm_pp_init(private_display); + if (ret != TDM_ERROR_NONE) + goto failed_load; + ret = _tdm_display_load_module(private_display); if (ret != TDM_ERROR_NONE) goto failed_load; diff --git a/src/tdm_pp.c b/src/tdm_pp.c index 6e1dafd..8f4fd8d 100644 --- a/src/tdm_pp.c +++ b/src/tdm_pp.c @@ -68,7 +68,7 @@ _tdm_pp_print_list(struct list_head *list) break; } - TDM_WRN("\t %s", str); + TDM_INFO("\t %s", str); } static tdm_pp_private_buffer * @@ -97,35 +97,21 @@ _tdm_pp_find_buffer(struct list_head *list, tdm_pp_private_buffer *pp_buffer) return NULL; } -INTERN void -tdm_pp_cb_done(tdm_pp *pp_backend, tbm_surface_h src, tbm_surface_h dst, - void *user_data) +static void +_tdm_pp_thread_cb_done(tdm_private_display *private_display, void *object, tdm_thread_cb_base *cb_base, void *user_data) { - tdm_private_pp *private_pp = user_data; - tdm_private_display *private_display = private_pp->private_display; + tdm_thread_cb_pp_done *pp_done = (tdm_thread_cb_pp_done *)cb_base; + tdm_private_pp *private_pp = object; tdm_pp_private_buffer *pp_buffer = NULL, *first_entry = NULL; + tbm_surface_h src; + tbm_surface_h dst; TDM_RETURN_IF_FAIL(TDM_MUTEX_IS_LOCKED()); - if (private_pp->owner_tid != syscall(SYS_gettid)) { - tdm_thread_cb_pp_done pp_done; - tdm_error ret; - - pp_done.base.type = TDM_THREAD_CB_PP_DONE; - pp_done.base.length = sizeof pp_done; - pp_done.pp_stamp = private_pp->stamp; - pp_done.src = src; - pp_done.dst = dst; - pp_done.user_data = user_data; - - ret = tdm_thread_send_cb(private_display->private_loop, &pp_done.base); - TDM_WARNING_IF_FAIL(ret == TDM_ERROR_NONE); - - return; - } + assert(private_pp->owner_tid == syscall(SYS_gettid)); - if (private_pp->owner_tid != syscall(SYS_gettid)) - TDM_NEVER_GET_HERE(); + src = pp_done->src; + dst = pp_done->dst; if (tdm_debug_dump & TDM_DUMP_FLAG_PP) { /* LCOV_EXCL_START */ @@ -167,8 +153,30 @@ tdm_pp_cb_done(tdm_pp *pp_backend, tbm_surface_h src, tbm_surface_h dst, } } -INTERN tdm_private_pp * -tdm_pp_find_stamp(tdm_private_display *private_display, double stamp) +static void +_tdm_pp_cb_done(tdm_pp *pp_backend, tbm_surface_h src, tbm_surface_h dst, void *user_data) +{ + tdm_thread_cb_pp_done pp_done; + tdm_private_pp *private_pp = user_data; + tdm_error ret; + + TDM_RETURN_IF_FAIL(TDM_MUTEX_IS_LOCKED()); + + memset(&pp_done, 0, sizeof pp_done); + pp_done.base.type = TDM_THREAD_CB_PP_DONE; + pp_done.base.length = sizeof pp_done; + pp_done.base.object_stamp = private_pp->stamp; + pp_done.base.data = NULL; + pp_done.base.sync = 0; + pp_done.src = src; + pp_done.dst = dst; + + ret = tdm_thread_cb_call(private_pp, &pp_done.base); + TDM_WARNING_IF_FAIL(ret == TDM_ERROR_NONE); +} + +static void * +_tdm_pp_find_object(tdm_private_display *private_display, double stamp) { tdm_private_pp *private_pp = NULL; @@ -182,6 +190,14 @@ tdm_pp_find_stamp(tdm_private_display *private_display, double stamp) return NULL; } +INTERN tdm_error +tdm_pp_init(tdm_private_display *private_display) +{ + tdm_thread_cb_set_find_func(TDM_THREAD_CB_PP_DONE, _tdm_pp_find_object); + + return TDM_ERROR_NONE; +} + INTERN tdm_private_pp * tdm_pp_create_internal(tdm_private_display *private_display, tdm_error *error) { @@ -225,11 +241,22 @@ tdm_pp_create_internal(tdm_private_display *private_display, tdm_error *error) /* LCOV_EXCL_STOP */ } - ret = func_pp->pp_set_done_handler(pp_backend, tdm_pp_cb_done, private_pp); + ret = tdm_thread_cb_add(private_pp, TDM_THREAD_CB_PP_DONE, NULL, _tdm_pp_thread_cb_done, NULL); + if (ret != TDM_ERROR_NONE) { + TDM_ERR("pp tdm_thread_cb_add failed"); + func_pp->pp_destroy(pp_backend); + free(private_pp); + if (error) + *error = ret; + return NULL; + } + + ret = func_pp->pp_set_done_handler(pp_backend, _tdm_pp_cb_done, private_pp); if (ret != TDM_ERROR_NONE) { /* LCOV_EXCL_START */ TDM_ERR("spp(%p) et pp_done_handler failed", private_pp); func_pp->pp_destroy(pp_backend); + free(private_pp); if (error) *error = ret; return NULL; @@ -237,7 +264,7 @@ tdm_pp_create_internal(tdm_private_display *private_display, tdm_error *error) } private_pp->stamp = tdm_helper_get_time(); - while (tdm_pp_find_stamp(private_display, private_pp->stamp)) + while (_tdm_pp_find_object(private_display, private_pp->stamp)) private_pp->stamp++; LIST_ADD(&private_pp->link, &private_display->pp_list); @@ -267,6 +294,8 @@ tdm_pp_destroy_internal(tdm_private_pp *private_pp) if (!private_pp) return; + tdm_thread_cb_remove(private_pp, TDM_THREAD_CB_PP_DONE, NULL, _tdm_pp_thread_cb_done, NULL); + private_display = private_pp->private_display; func_pp = &private_display->func_pp; diff --git a/src/tdm_private.h b/src/tdm_private.h index f04eebb..fb1886f 100644 --- a/src/tdm_private.h +++ b/src/tdm_private.h @@ -92,8 +92,6 @@ tdm_display_check_module_abi(tdm_private_display *private_display, int abimaj, i tdm_private_output * tdm_display_find_output_stamp(tdm_private_display *private_display, double stamp); -tdm_private_pp * -tdm_pp_find_stamp(tdm_private_display *private_display, double stamp); tdm_private_capture * tdm_capture_find_stamp(tdm_private_display *private_display, double stamp); @@ -151,9 +149,6 @@ tdm_error tdm_layer_unset_buffer_internal(tdm_private_layer *private_layer); void -tdm_pp_cb_done(tdm_pp *pp_backend, tbm_surface_h src, tbm_surface_h dst, - void *user_data); -void tdm_capture_cb_done(tdm_capture *capture_backend, tbm_surface_h buffer, void *user_data); tdm_error @@ -181,6 +176,8 @@ tdm_output_call_change_handler_internal(tdm_private_output *private_output, tdm_output_change_type type, tdm_value value); +tdm_error +tdm_pp_init(tdm_private_display *private_display); tdm_private_pp * tdm_pp_create_internal(tdm_private_display *private_display, tdm_error *error); void diff --git a/src/tdm_private_types.h b/src/tdm_private_types.h index a4ac11d..85413c4 100644 --- a/src/tdm_private_types.h +++ b/src/tdm_private_types.h @@ -487,10 +487,8 @@ struct _tdm_thread_cb_output_dpms { struct _tdm_thread_cb_pp_done { tdm_thread_cb_base base; - double pp_stamp; tbm_surface_h src; tbm_surface_h dst; - void *user_data; }; struct _tdm_thread_cb_capture_done { diff --git a/src/tdm_thread.c b/src/tdm_thread.c index 5b7f00e..0bd4e86 100644 --- a/src/tdm_thread.c +++ b/src/tdm_thread.c @@ -471,17 +471,9 @@ tdm_thread_handle_cb(tdm_private_loop *private_loop) break; /* LCOV_EXCL_STOP */ } - case TDM_THREAD_CB_PP_DONE: { - tdm_thread_cb_pp_done *pp_done = (tdm_thread_cb_pp_done*)base; - tdm_pp *pp_backend = - tdm_pp_find_stamp(private_loop->dpy, pp_done->pp_stamp); - if (!pp_backend) { - TDM_WRN("no pp(%f)", pp_done->pp_stamp); - break; - } - tdm_pp_cb_done(pp_backend, pp_done->src, pp_done->dst, pp_done->user_data); + case TDM_THREAD_CB_PP_DONE: + tdm_thread_cb_call(NULL, base); break; - } case TDM_THREAD_CB_CAPTURE_DONE: { tdm_thread_cb_capture_done *capture_done = (tdm_thread_cb_capture_done*)base; tdm_capture *capture_backend =