surface_queue: add tbm_surface_queue_get_acquirable_surfaces 85/193285/1
authorChangyeon Lee <cyeon.lee@samsung.com>
Mon, 19 Nov 2018 02:21:31 +0000 (11:21 +0900)
committerChangyeon Lee <cyeon.lee@samsung.com>
Mon, 19 Nov 2018 02:21:31 +0000 (11:21 +0900)
Change-Id: I62f653c370130d04e727e920dac7b1c0122d2d89

include/tbm_surface_queue.h
src/tbm_surface_queue.c

index 2534f7f4d86c9fd5c6465586573449fe0ad4e74e..33c500c7d4c2b4bc3467e0e52059196a678048eb 100644 (file)
@@ -265,6 +265,10 @@ tbm_surface_queue_error_e tbm_surface_queue_get_surfaces(
        tbm_surface_queue_h surface_queue,
        tbm_surface_h *surfaces, int *num);
 
+tbm_surface_queue_error_e tbm_surface_queue_get_acquirable_surfaces(
+       tbm_surface_queue_h surface_queue,
+       tbm_surface_h *surfaces, int *num);
+
 /**
  * @brief Gets number of the tbm_surfaces by tbm_surface_queue_trace.
  *
index 9fc33a50a5906daff5a8ff50e5e4fbf50b59d847..28acf5a4f131d9734c748940937690f7ff00d6ce 100644 (file)
@@ -1954,6 +1954,37 @@ tbm_surface_queue_get_surfaces(tbm_surface_queue_h surface_queue,
        return TBM_SURFACE_QUEUE_ERROR_NONE;
 }
 
+tbm_surface_queue_error_e
+tbm_surface_queue_get_acquirable_surfaces(tbm_surface_queue_h surface_queue,
+                       tbm_surface_h *surfaces, int *num)
+{
+       queue_node *node = NULL;
+
+       _tbm_surf_queue_mutex_lock();
+
+       *num = 0;
+
+       TBM_SURF_QUEUE_RETURN_VAL_IF_FAIL(_tbm_surface_queue_is_valid(surface_queue),
+                              TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE);
+       TBM_SURF_QUEUE_RETURN_VAL_IF_FAIL(num != NULL,
+                              TBM_ERROR_INVALID_PARAMETER);
+
+       pthread_mutex_lock(&surface_queue->lock);
+
+       LIST_FOR_EACH_ENTRY(node, &surface_queue->dirty_queue.head, item_link) {
+               if (surfaces)
+                       surfaces[*num] = node->surface;
+
+               *num = *num + 1;
+       }
+
+       pthread_mutex_unlock(&surface_queue->lock);
+
+       _tbm_surf_queue_mutex_unlock();
+
+       return TBM_SURFACE_QUEUE_ERROR_NONE;
+}
+
 tbm_surface_queue_error_e
 tbm_surface_queue_get_trace_surface_num(
                        tbm_surface_queue_h surface_queue, tbm_surface_queue_trace trace, int *num)