Add function add/remove dequeue callback in queue 59/87859/1
authorChangyeon Lee <cyeon.lee@samsung.com>
Tue, 6 Sep 2016 12:07:53 +0000 (21:07 +0900)
committerChangyeon Lee <cyeon.lee@samsung.com>
Sun, 11 Sep 2016 08:11:56 +0000 (17:11 +0900)
Change-Id: Ic4dc54e72a7a8917df1577a0d74243baa2cd9dd4

src/tbm_surface_queue.c
src/tbm_surface_queue.h

index c3ade21..feddb94 100644 (file)
@@ -107,6 +107,7 @@ struct _tbm_surface_queue {
 
        struct list_head destory_noti;
        struct list_head dequeuable_noti;
+       struct list_head dequeue_noti;
        struct list_head acquirable_noti;
        struct list_head reset_noti;
 
@@ -454,6 +455,7 @@ _tbm_surface_queue_init(tbm_surface_queue_h surface_queue,
        LIST_INITHEAD(&surface_queue->destory_noti);
        LIST_INITHEAD(&surface_queue->acquirable_noti);
        LIST_INITHEAD(&surface_queue->dequeuable_noti);
+       LIST_INITHEAD(&surface_queue->dequeue_noti);
        LIST_INITHEAD(&surface_queue->reset_noti);
 
        if (surface_queue->impl && surface_queue->impl->init)
@@ -537,6 +539,44 @@ tbm_surface_queue_remove_dequeuable_cb(
 }
 
 tbm_surface_queue_error_e
+tbm_surface_queue_add_dequeue_cb(
+       tbm_surface_queue_h surface_queue, tbm_surface_queue_notify_cb dequeue_cb,
+       void *data)
+{
+       TBM_RETURN_VAL_IF_FAIL(surface_queue != NULL,
+                              TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE);
+
+       pthread_mutex_lock(&surface_queue->lock);
+
+       TBM_QUEUE_TRACE("tbm_surface_queue(%p)\n", surface_queue);
+
+       _notify_add(&surface_queue->dequeue_noti, dequeue_cb, data);
+
+       pthread_mutex_unlock(&surface_queue->lock);
+
+       return TBM_SURFACE_QUEUE_ERROR_NONE;
+}
+
+tbm_surface_queue_error_e
+tbm_surface_queue_remove_dequeue_cb(
+       tbm_surface_queue_h surface_queue, tbm_surface_queue_notify_cb dequeue_cb,
+       void *data)
+{
+       TBM_RETURN_VAL_IF_FAIL(surface_queue != NULL,
+                              TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE);
+
+       pthread_mutex_lock(&surface_queue->lock);
+
+       TBM_QUEUE_TRACE("tbm_surface_queue(%p)\n", surface_queue);
+
+       _notify_remove(&surface_queue->dequeue_noti, dequeue_cb, data);
+
+       pthread_mutex_unlock(&surface_queue->lock);
+
+       return TBM_SURFACE_QUEUE_ERROR_NONE;
+}
+
+tbm_surface_queue_error_e
 tbm_surface_queue_add_acquirable_cb(
        tbm_surface_queue_h surface_queue, tbm_surface_queue_notify_cb acquirable_cb,
        void *data)
@@ -762,6 +802,8 @@ tbm_surface_queue_dequeue(tbm_surface_queue_h
 
        pthread_mutex_unlock(&surface_queue->lock);
 
+       _notify_emit(surface_queue, &surface_queue->dequeue_noti);
+
        return TBM_SURFACE_QUEUE_ERROR_NONE;
 }
 
@@ -1013,11 +1055,11 @@ tbm_surface_queue_flush(tbm_surface_queue_h surface_queue)
        if (surface_queue->impl && surface_queue->impl->reset)
                surface_queue->impl->reset(surface_queue);
 
-       _notify_emit(surface_queue, &surface_queue->reset_noti);
-
        pthread_mutex_unlock(&surface_queue->lock);
        pthread_cond_signal(&surface_queue->free_cond);
 
+       _notify_emit(surface_queue, &surface_queue->reset_noti);
+
        return TBM_SURFACE_QUEUE_ERROR_NONE;
 }
 
index e90d82a..ab4cc9b 100644 (file)
@@ -113,6 +113,14 @@ tbm_surface_queue_error_e tbm_surface_queue_remove_dequeuable_cb(
        tbm_surface_queue_h surface_queue, tbm_surface_queue_notify_cb dequeuable_cb,
        void *data);
 
+tbm_surface_queue_error_e tbm_surface_queue_add_dequeue_cb(
+       tbm_surface_queue_h surface_queue, tbm_surface_queue_notify_cb dequeue_cb,
+       void *data);
+
+tbm_surface_queue_error_e tbm_surface_queue_remove_dequeue_cb(
+       tbm_surface_queue_h surface_queue, tbm_surface_queue_notify_cb dequeue_cb,
+       void *data);
+
 tbm_surface_queue_error_e tbm_surface_queue_add_acquirable_cb(
        tbm_surface_queue_h surface_queue, tbm_surface_queue_notify_cb acquirable_cb,
        void *data);