From: Joonbum Ko Date: Wed, 17 Nov 2021 04:31:12 +0000 (+0900) Subject: Flush vblank waiting buffers when tdm error occured. X-Git-Tag: submit/tizen/20211124.073616~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=7cd541e123fec1836badb6acb13e3a66b3b37b45;p=platform%2Fcore%2Fuifw%2Flibtpl-egl.git Flush vblank waiting buffers when tdm error occured. - If tdm error such as TIEMOUT occured, flush all vblank waiting buffers of its wl_egl_surface. Otherwise, only one wl_egl_buffer will be commited per one vblank event. Change-Id: I8df5cb847cf77875315df6ae3ca4086992f1700e Signed-off-by: Joonbum Ko --- diff --git a/src/tpl_wl_egl_thread.c b/src/tpl_wl_egl_thread.c index 11c7f16..6fcce36 100755 --- a/src/tpl_wl_egl_thread.c +++ b/src/tpl_wl_egl_thread.c @@ -2866,12 +2866,19 @@ __cb_tdm_client_vblank(tdm_client_vblank *vblank, tdm_error error, tpl_gmutex_lock(&wl_egl_surface->surf_mutex); if (wl_egl_surface->vblank && wl_egl_surface->vblank->waiting_buffers) { - wl_egl_buffer = (tpl_wl_egl_buffer_t *)__tpl_list_pop_front( - wl_egl_surface->vblank->waiting_buffers, - NULL); - - if (wl_egl_buffer) - _thread_wl_surface_commit(wl_egl_surface, wl_egl_buffer); + while (!__tpl_list_is_empty(wl_egl_surface->vblank->waiting_buffers)) { + wl_egl_buffer = (tpl_wl_egl_buffer_t *)__tpl_list_pop_front( + wl_egl_surface->vblank->waiting_buffers, + NULL); + if (wl_egl_buffer) + _thread_wl_surface_commit(wl_egl_surface, wl_egl_buffer); + + /* If tdm error such as TIEMOUT occured, + * flush all vblank waiting buffers of its wl_egl_surface. + * Otherwise, only one wl_egl_buffer will be commited per one vblank event. + */ + if (error == TDM_ERROR_NONE) break; + } } tpl_gmutex_unlock(&wl_egl_surface->surf_mutex); }