e_hwc_window_queue: add e_hwc_window_queue_acquirable_buffers_get
authorChangyeon Lee <cyeon.lee@samsung.com>
Tue, 8 Jan 2019 10:12:52 +0000 (19:12 +0900)
committerSooChan Lim <sc1.lim@samsung.com>
Fri, 12 Apr 2019 10:00:22 +0000 (19:00 +0900)
Change-Id: I3ef8fdcc72c89816b696cd68afd12d9119483906

src/bin/e_hwc_window_queue.c
src/bin/e_hwc_window_queue.h

index 692d41708b7b5f3c29bd5b77513f35ca4a9f9d88..11b7f5f9e555318c3e6df850985ee980ecc3c79b 100644 (file)
@@ -1170,3 +1170,50 @@ e_hwc_window_queue_buffer_release(E_Hwc_Window_Queue *queue, E_Hwc_Window_Queue_
    return EINA_TRUE;
 }
 
+EINTERN Eina_List *
+e_hwc_window_queue_acquirable_buffers_get(E_Hwc_Window_Queue *queue)
+{
+   E_Hwc_Window_Queue_Buffer *queue_buffer = NULL;
+   Eina_List *acquirable_buffers = NULL;
+   tbm_surface_queue_error_e tsq_err = TBM_SURFACE_QUEUE_ERROR_NONE;
+   tbm_surface_h *tsurfaces = NULL;
+   int queue_size = 0;
+   int num = 0, i = 0;
+
+   EINA_SAFETY_ON_NULL_RETURN_VAL(_hwc_winq_mgr, NULL);
+   EINA_SAFETY_ON_NULL_RETURN_VAL(queue, NULL);
+   EINA_SAFETY_ON_NULL_RETURN_VAL(queue->tqueue, NULL);
+
+   queue_size = tbm_surface_queue_get_size(queue->tqueue);
+   if (!queue_size) return NULL;
+
+   tsurfaces = E_NEW(tbm_surface_h, queue_size);
+   if (!tsurfaces)
+     {
+        ERR("failed to alloc tsurfaces");
+        return NULL;
+     }
+
+   tsq_err = tbm_surface_queue_get_acquirable_surfaces(queue->tqueue, tsurfaces, &num);
+   if (tsq_err != TBM_SURFACE_QUEUE_ERROR_NONE)
+     {
+        ERR("failed to tbm_surface_queue_get_acquirable_surfaces");
+        E_FREE(tsurfaces);
+        return NULL;
+     }
+
+   for (i = 0; i < num; i++)
+     {
+        tbm_surface_h tsurface = tsurfaces[i];
+        if (!tsurface) continue;
+
+        queue_buffer = e_hwc_window_queue_buffer_find(queue, tsurface);
+        if (!queue_buffer) continue;
+
+        acquirable_buffers = eina_list_append(acquirable_buffers, queue_buffer);
+     }
+
+   E_FREE(tsurfaces);
+
+   return acquirable_buffers;
+}
index be18a59398c5a1ac29300c7bd13fbec9de3ff32e..b2a27df7c8ee3ce615e7d0dd27b40f0e91d0691a 100644 (file)
@@ -59,5 +59,7 @@ EINTERN Eina_Bool                   e_hwc_window_queue_buffer_enqueue(E_Hwc_Wind
 EINTERN E_Hwc_Window_Queue_Buffer * e_hwc_window_queue_buffer_acquire(E_Hwc_Window_Queue *queue);
 EINTERN Eina_Bool                   e_hwc_window_queue_buffer_release(E_Hwc_Window_Queue *queue, E_Hwc_Window_Queue_Buffer *queue_buffer);
 
+EINTERN Eina_List *                 e_hwc_window_queue_acquirable_buffers_get(E_Hwc_Window_Queue *queue);
+
 #endif // E_HWC_WINDOW_QUEUE_H
 #endif