From eb57358e023d8716eff2053e52277fc4a648be6d Mon Sep 17 00:00:00 2001 From: Changyeon Lee Date: Tue, 4 Jun 2019 16:21:48 +0900 Subject: [PATCH] surface_queue: remove need_attach interface of sequence and default Change-Id: Ib1c9bde06a4050f191ef8ffee56d0f9597f8a5b9 --- src/tbm_surface_queue.c | 94 +++++++++++++++++++------------------------------ 1 file changed, 36 insertions(+), 58 deletions(-) diff --git a/src/tbm_surface_queue.c b/src/tbm_surface_queue.c index 8a51971..b6c2e86 100644 --- a/src/tbm_surface_queue.c +++ b/src/tbm_surface_queue.c @@ -531,6 +531,34 @@ _tbm_surface_queue_attach(tbm_surface_queue_h surface_queue, } static void +_tbm_surface_queue_need_attach(tbm_surface_queue_h surface_queue) +{ + tbm_surface_h surface; + + if (surface_queue->queue_size == surface_queue->num_attached) + return; + + if (surface_queue->alloc_cb) { + surface = surface_queue->alloc_cb(surface_queue, surface_queue->alloc_cb_data); + + /* silent return */ + if (!surface) + return; + + tbm_surface_internal_ref(surface); + } else { + surface = tbm_surface_internal_create_with_flags(surface_queue->width, + surface_queue->height, + surface_queue->format, + surface_queue->flags); + TBM_RETURN_IF_FAIL(surface != NULL); + } + + _tbm_surface_queue_attach(surface_queue, surface); + tbm_surface_internal_unref(surface); +} + +static void _tbm_surface_queue_detach(tbm_surface_queue_h surface_queue, tbm_surface_h surface) { @@ -1280,6 +1308,8 @@ tbm_surface_queue_dequeue(tbm_surface_queue_h if (_queue_is_empty(&surface_queue->free_queue)) { if (surface_queue->impl && surface_queue->impl->need_attach) surface_queue->impl->need_attach(surface_queue); + else + _tbm_surface_queue_need_attach(surface_queue); } if (surface_queue->impl && surface_queue->impl->dequeue) @@ -1340,6 +1370,8 @@ tbm_surface_queue_can_dequeue_wait_timeout(tbm_surface_queue_h surface_queue, in if (_queue_is_empty(&surface_queue->free_queue)) { if (surface_queue->impl && surface_queue->impl->need_attach) surface_queue->impl->need_attach(surface_queue); + else + _tbm_surface_queue_need_attach(surface_queue); } if (!_queue_is_empty(&surface_queue->free_queue)) { @@ -1402,6 +1434,8 @@ tbm_surface_queue_can_dequeue(tbm_surface_queue_h surface_queue, int wait) if (_queue_is_empty(&surface_queue->free_queue)) { if (surface_queue->impl && surface_queue->impl->need_attach) surface_queue->impl->need_attach(surface_queue); + else + _tbm_surface_queue_need_attach(surface_queue); } if (!_queue_is_empty(&surface_queue->free_queue)) { @@ -2093,39 +2127,11 @@ tbm_surface_queue_get_trace_surface_num( return TBM_SURFACE_QUEUE_ERROR_NONE; } -static void -__tbm_queue_default_need_attach(tbm_surface_queue_h surface_queue) -{ - tbm_surface_h surface; - - if (surface_queue->queue_size == surface_queue->num_attached) - return; - - if (surface_queue->alloc_cb) { - surface = surface_queue->alloc_cb(surface_queue, surface_queue->alloc_cb_data); - - /* silent return */ - if (!surface) - return; - - tbm_surface_internal_ref(surface); - } else { - surface = tbm_surface_internal_create_with_flags(surface_queue->width, - surface_queue->height, - surface_queue->format, - surface_queue->flags); - TBM_RETURN_IF_FAIL(surface != NULL); - } - - _tbm_surface_queue_attach(surface_queue, surface); - tbm_surface_internal_unref(surface); -} - static const tbm_surface_queue_interface tbm_queue_default_impl = { NULL, /*__tbm_queue_default_init*/ NULL, /*__tbm_queue_default_reset*/ NULL, /*__tbm_queue_default_destroy*/ - __tbm_queue_default_need_attach, + NULL, /*__tbm_queue_default_need_attach*/ NULL, /*__tbm_queue_default_enqueue*/ NULL, /*__tbm_queue_default_release*/ NULL, /*__tbm_queue_default_dequeue*/ @@ -2196,34 +2202,6 @@ __tbm_queue_sequence_destroy(tbm_surface_queue_h surface_queue) } static void -__tbm_queue_sequence_need_attach(tbm_surface_queue_h surface_queue) -{ - tbm_surface_h surface; - - if (surface_queue->queue_size == surface_queue->num_attached) - return; - - if (surface_queue->alloc_cb) { - surface = surface_queue->alloc_cb(surface_queue, surface_queue->alloc_cb_data); - - /* silent return */ - if (!surface) - return; - - tbm_surface_internal_ref(surface); - } else { - surface = tbm_surface_internal_create_with_flags(surface_queue->width, - surface_queue->height, - surface_queue->format, - surface_queue->flags); - TBM_RETURN_IF_FAIL(surface != NULL); - } - - _tbm_surface_queue_attach(surface_queue, surface); - tbm_surface_internal_unref(surface); -} - -static void __tbm_queue_sequence_enqueue(tbm_surface_queue_h surface_queue, queue_node *node) { @@ -2275,7 +2253,7 @@ static const tbm_surface_queue_interface tbm_queue_sequence_impl = { __tbm_queue_sequence_init, __tbm_queue_sequence_reset, __tbm_queue_sequence_destroy, - __tbm_queue_sequence_need_attach, + NULL, __tbm_queue_sequence_enqueue, __tbm_queue_sequence_release, __tbm_queue_sequence_dequeue, -- 2.7.4