From 7cd541e123fec1836badb6acb13e3a66b3b37b45 Mon Sep 17 00:00:00 2001 From: Joonbum Ko Date: Wed, 17 Nov 2021 13:31:12 +0900 Subject: [PATCH] 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 --- src/tpl_wl_egl_thread.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) 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); } -- 2.34.1