tinyds: Integrate idle_redraw into idle_task 69/279469/1
authorSeunghun <chwila927@gmail.com>
Mon, 8 Aug 2022 07:29:14 +0000 (16:29 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Wed, 10 Aug 2022 04:24:16 +0000 (13:24 +0900)
Change-Id: Id653519e35f5a9787451abe481012ea9fa5996eb

examples/tinyds.c

index 010cd25..cdadfac 100644 (file)
@@ -77,8 +77,6 @@ struct tinyds_output
     struct ds_allocator *allocator;
     struct ds_swapchain *swapchain;
 
-    struct wl_event_source *idle_redraw;
-
     struct wl_listener output_destroy;
     struct wl_listener output_frame;
 
@@ -172,8 +170,7 @@ static void output_unlink_ds_output(struct tinyds_output *output);
 static void output_handle_destroy(struct wl_listener *listener, void *data);
 static void output_handle_frame(struct wl_listener *listener, void *data);
 static void output_damage(struct tinyds_output *output);
-static void output_schedule_idle_redraw(struct tinyds_output *output);
-static void output_handle_idle_redraw(void *data);
+static void output_redraw(struct tinyds_output *output);
 static void keyboard_handle_device_destroy(struct wl_listener *listener,
         void *data);
 static void keyboard_handle_key(struct wl_listener *listener, void *data);
@@ -398,6 +395,9 @@ server_handle_idle_task(void *data)
         server->changes.seat_caps = false;
         ds_seat_set_capabilities(server->seat, server->seat_caps);
     }
+
+    if (server->output && server->output->damaged)
+        output_redraw(server->output);
 }
 
 static void
@@ -784,39 +784,23 @@ output_handle_frame(struct wl_listener *listener, void *data)
     output->drawable = true;
 
     if (output->damaged)
-        output_schedule_idle_redraw(output);
+        server_schedule_idle_task(output->server);
 }
 
 static void
 output_damage(struct tinyds_output *output)
 {
     output->damaged = true;
-    output_schedule_idle_redraw(output);
+    server_schedule_idle_task(output->server);
 }
 
 static void
-output_schedule_idle_redraw(struct tinyds_output *output)
+output_redraw(struct tinyds_output *output)
 {
-    struct tinyds_server *server = output->server;
-
-    if (output->idle_redraw)
-        return;
-
-    output->idle_redraw =
-        wl_event_loop_add_idle(wl_display_get_event_loop(server->display),
-                output_handle_idle_redraw, output);
-}
-
-static void
-output_handle_idle_redraw(void *data)
-{
-    struct tinyds_output *output = data;
     struct ds_buffer *output_buffer;
     pixman_image_t *output_image;
     struct tinyds_view *view;
 
-    output->idle_redraw = NULL;
-
     if (!output->drawable || !output->damaged)
         return;