tdm_vblank: Add tdm_vblank_set_timeout_handler 11/296311/1
authorChangyeon Lee <cyeon.lee@samsung.com>
Tue, 25 Jul 2023 08:17:53 +0000 (17:17 +0900)
committerChangyeon Lee <cyeon.lee@samsung.com>
Tue, 25 Jul 2023 09:00:56 +0000 (18:00 +0900)
Change-Id: I90358136d4a7486db8cc883e8cdebd2b15074dd2

src/tdm_private.h
src/tdm_private_types.h
src/tdm_vblank.c

index fcc3245..32e461c 100644 (file)
@@ -180,6 +180,8 @@ tdm_error
 tdm_vblank_set_client_vblank_fps(unsigned int pid, const char *name, unsigned int fps);
 void
 tdm_vblank_get_vblank_list_information(tdm_display *dpy, char *reply, int *len);
+tdm_error
+tdm_vblank_set_timeout_handler(tdm_vblank *vblank, tdm_vblank_timeout_handler func, void *user_data);
 
 tdm_error
 tdm_pp_init(tdm_private_display *private_display);
index 5ec9411..fd8567f 100644 (file)
@@ -122,6 +122,8 @@ typedef struct _tdm_private_voutput_commit_handler tdm_private_voutput_commit_ha
 
 typedef struct _tdm_private_layer_buffer tdm_private_layer_buffer;
 
+typedef void (*tdm_vblank_timeout_handler)(tdm_vblank *vblank, void *user_data);
+
 struct _tdm_private_module {
        struct list_head link;
 
index bc53543..499bba4 100644 (file)
@@ -129,6 +129,8 @@ typedef struct _tdm_private_vblank {
 
        /* for timeout */
        tdm_event_loop_source *timeout_timer;
+       tdm_vblank_timeout_handler timeout_func;
+       void *timeout_user_data;
 } tdm_private_vblank;
 
 struct _tdm_vblank_wait_info {
@@ -1096,6 +1098,9 @@ _tdm_vblank_timeout_timer_cb(void *user_data)
                        w, w->req_time, w->target_time, w->target_seq, w->interval);
        }
 
+       if (private_vblank->timeout_func)
+               private_vblank->timeout_func(private_vblank, private_vblank->timeout_user_data);
+
        return TDM_ERROR_NONE;
 }
 
@@ -1782,6 +1787,19 @@ no_client:
        return;
 }
 
+INTERN tdm_error
+tdm_vblank_set_timeout_handler(tdm_vblank *vblank, tdm_vblank_timeout_handler func, void *user_data)
+{
+       tdm_private_vblank *private_vblank = vblank;
+
+       TDM_RETURN_VAL_IF_FAIL(tdm_vblank_is_valid(vblank), TDM_ERROR_INVALID_PARAMETER);
+
+       private_vblank->timeout_func = func;
+       private_vblank->timeout_user_data = user_data;
+
+       return TDM_ERROR_NONE;
+}
+
 /* LCOV_EXCL_START */
 INTERN void
 tdm_vblank_get_vblank_list_information(tdm_display *dpy, char *reply, int *len)