send width and height of queue in active event 90/210190/1
authorChangyeon Lee <cyeon.lee@samsung.com>
Mon, 15 Jul 2019 10:05:42 +0000 (19:05 +0900)
committerChangyeon Lee <cyeon.lee@samsung.com>
Mon, 15 Jul 2019 10:41:22 +0000 (19:41 +0900)
Change-Id: Icb0665b8af618d952fc8533be8533b836147a9bd

protocol/wayland-tbm.xml
src/wayland-tbm-client.c
src/wayland-tbm-server.c
src/wayland-tbm-server.h
unittests/src/ut_base.cpp

index 1169430..64e426b 100644 (file)
     <event name="active">
       <arg name="usage" type="uint"/>
       <arg name="queue_size" type="uint"/>
+      <arg name="queue_width" type="uint"/>
+      <arg name="queue_height" type="uint"/>
       <arg name="need_flush" type="uint"/>
     </event>
 
index 1c05e9c..0c5c04d 100644 (file)
@@ -89,6 +89,8 @@ struct wayland_tbm_surface_queue {
        int active_flush;
        int active_flush_done;
        int active_flush_size;
+       int active_flush_width;
+       int active_flush_height;
        int active_flush_invalid;
        int usage;
        struct wl_list attach_bufs;
@@ -1005,6 +1007,8 @@ handle_tbm_queue_active(void *data,
                        struct wl_tbm_queue *wl_tbm_queue,
                        uint32_t usage,
                        uint32_t queue_size,
+                       uint32_t queue_width,
+                       uint32_t queue_height,
                        uint32_t need_flush)
 {
        struct wayland_tbm_surface_queue *queue_info =
@@ -1026,6 +1030,8 @@ handle_tbm_queue_active(void *data,
        if (need_flush) {
                queue_info->active_flush = need_flush;
                queue_info->active_flush_size = queue_size;
+               queue_info->active_flush_width = queue_width;
+               queue_info->active_flush_height = queue_height;
                queue_info->active_flush_done = 0;
                queue_info->wait_usable = 0;
        }
@@ -1292,6 +1298,16 @@ _handle_tbm_surface_queue_reset_notify(tbm_surface_queue_h surface_queue,
        tbm_surface_queue_notify_dequeuable(surface_queue);
 }
 
+static int
+_wayland_tbm_client_is_active_flush_valid(struct wayland_tbm_surface_queue *queue_info)
+{
+       if (queue_info->width != queue_info->active_flush_width ||
+               queue_info->height != queue_info->active_flush_height)
+               return 0;
+
+       return 1;
+}
+
 static void
 _handle_tbm_surface_queue_can_dequeue_notify(tbm_surface_queue_h surface_queue,
                void *data)
@@ -1308,6 +1324,11 @@ _handle_tbm_surface_queue_can_dequeue_notify(tbm_surface_queue_h surface_queue,
                return;
        }
 
+       if (!_wayland_tbm_client_is_active_flush_valid(queue_info)) {
+               pthread_mutex_unlock(&queue_info->lock);
+               return;
+       }
+
        if (!queue_info->active_flush_done) {
                queue_size = queue_info->active_flush_size;
                pthread_mutex_unlock(&queue_info->lock);
index 0169d63..cfbb306 100644 (file)
@@ -1002,7 +1002,8 @@ wayland_tbm_server_client_queue_get(struct wayland_tbm_server *tbm_srv, struct w
 
 void
 wayland_tbm_server_client_queue_activate(struct wayland_tbm_client_queue *cqueue,
-                       uint32_t usage, uint32_t queue_size, uint32_t need_flush)
+                               uint32_t usage, uint32_t queue_size, uint32_t queue_width,
+                               uint32_t queue_height, uint32_t need_flush)
 {
        struct wl_client *wl_client = NULL;
 
@@ -1014,7 +1015,8 @@ wayland_tbm_server_client_queue_activate(struct wayland_tbm_client_queue *cqueue
 #endif
        WL_TBM_LOG("send active queue pid:%d", cqueue->pid);
 
-       wl_tbm_queue_send_active(cqueue->wl_tbm_queue, usage, queue_size, need_flush);
+       wl_tbm_queue_send_active(cqueue->wl_tbm_queue, usage, queue_size,
+                                                       queue_width, queue_height, need_flush);
 
        wl_client = wl_resource_get_client(cqueue->wl_tbm_queue);
        if (wl_client)
index 934d9bc..6deea20 100644 (file)
@@ -87,7 +87,8 @@ wayland_tbm_server_client_queue_get(struct wayland_tbm_server *tbm_srv,
 
 void
 wayland_tbm_server_client_queue_activate(struct wayland_tbm_client_queue *client_queue,
-                                       uint32_t usage, uint32_t queue_size, uint32_t need_flush);
+                                       uint32_t usage, uint32_t queue_size, uint32_t queue_width,
+                                       uint32_t queue_height, uint32_t need_flush);
 
 void
 wayland_tbm_server_client_queue_deactivate(struct wayland_tbm_client_queue *client_queue);
index d2d6f4d..7e712e4 100644 (file)
@@ -285,7 +285,7 @@ _wl_tbm_test_set_active(struct wl_client *client, struct wl_resource *resource,
                        i++;
                }
 
-               wayland_tbm_server_client_queue_activate(wlt_queue, usage, queue_size, need_flush);
+               wayland_tbm_server_client_queue_activate(wlt_queue, usage, queue_size, width, height, need_flush);
        } else {
                wayland_tbm_server_client_queue_deactivate(wlt_queue);
        }