tpl_wl_egl_buffer_t *buffers[BUFFER_ARRAY_SIZE];
int buffer_cnt; /* the number of using wl_egl_buffers */
tpl_gmutex buffers_mutex;
- tpl_wl_egl_buffer_t *last_enq_buffer;
+ tbm_surface_h last_enq_buffer;
tpl_list_t *presentation_feedbacks; /* for tracing presentation feedbacks */
TPL_OBJECT_UNLOCK(surface);
tpl_gmutex_lock(&wl_egl_surface->surf_mutex);
- if (wl_egl_surface->reset == TPL_TRUE && wl_egl_surface->last_enq_buffer) {
- tpl_wl_egl_buffer_t *last_enq_buffer = wl_egl_surface->last_enq_buffer;
-
- tpl_gmutex_lock(&last_enq_buffer->mutex);
- if (last_enq_buffer->status > ENQUEUED &&
- last_enq_buffer->status < COMMITTED) {
- tpl_result_t wait_result;
- TPL_INFO("[DEQ_AFTER_RESET]",
- "waiting for previous buffer(%p) commit", last_enq_buffer);
- tpl_gmutex_unlock(&wl_egl_surface->surf_mutex);
- wait_result = tpl_cond_timed_wait(&last_enq_buffer->cond,
- &last_enq_buffer->mutex,
- 200); /* 200ms */
- tpl_gmutex_lock(&wl_egl_surface->surf_mutex);
- if (wait_result == TPL_ERROR_TIME_OUT) {
- TPL_WARN("timeout occured waiting signaled. wl_egl_buffer(%p)",
- last_enq_buffer);
- wl_egl_surface->last_enq_buffer = NULL;
+ if (wl_egl_surface->reset == TPL_TRUE &&
+ tbm_surface_internal_is_valid(wl_egl_surface->last_enq_buffer)) {
+ tpl_wl_egl_buffer_t *enqueued_buffer =
+ _get_wl_egl_buffer(wl_egl_surface->last_enq_buffer);
+
+ if (enqueued_buffer) {
+ tpl_gmutex_lock(&enqueued_buffer->mutex);
+ if (enqueued_buffer->status >= ENQUEUED &&
+ enqueued_buffer->status < COMMITTED) {
+ tpl_result_t wait_result;
+ TPL_INFO("[DEQ_AFTER_RESET]",
+ "waiting for previous wl_egl_buffer(%p) commit",
+ enqueued_buffer);
+ tpl_gmutex_unlock(&wl_egl_surface->surf_mutex);
+ wait_result = tpl_cond_timed_wait(&enqueued_buffer->cond,
+ &enqueued_buffer->mutex,
+ 200); /* 200ms */
+ tpl_gmutex_lock(&wl_egl_surface->surf_mutex);
+ if (wait_result == TPL_ERROR_TIME_OUT) {
+ TPL_WARN("timeout occured waiting signaled. wl_egl_buffer(%p)",
+ enqueued_buffer);
+ }
}
+ tpl_gmutex_unlock(&enqueued_buffer->mutex);
}
- tpl_gmutex_unlock(&last_enq_buffer->mutex);
+ wl_egl_surface->last_enq_buffer = NULL;
}
tpl_gmutex_unlock(&wl_egl_surface->surf_mutex);
}
tpl_gmutex_lock(&wl_egl_surface->surf_mutex);
- wl_egl_surface->last_enq_buffer = wl_egl_buffer;
+ wl_egl_surface->last_enq_buffer = tbm_surface;
tpl_gmutex_unlock(&wl_egl_surface->surf_mutex);
tbm_surface_internal_unref(tbm_surface);
tpl_gmutex_unlock(&wl_egl_buffer->mutex);
- wl_egl_surface->last_enq_buffer = NULL;
-
TPL_LOG_T("WL_EGL",
"[COMMIT] wl_egl_buffer(%p) wl_buffer(%p) tbm_surface(%p) bo(%d)",
wl_egl_buffer, wl_egl_buffer->wl_buffer, wl_egl_buffer->tbm_surface,