diff --git a/src/lib/ecore_drm2/Ecore_Drm2.h b/src/lib/ecore_drm2/Ecore_Drm2.h index 4be533bc66..450f1faa0c 100644 --- a/src/lib/ecore_drm2/Ecore_Drm2.h +++ b/src/lib/ecore_drm2/Ecore_Drm2.h @@ -1079,15 +1079,20 @@ EAPI void ecore_drm2_fb_status_handler_set(Ecore_Drm2_Fb *fb, Ecore_Drm2_Fb_Stat /** * Get the time of the last vblank * - * Query the display hardware for the time of the last vblank. + * Query the display hardware for the time of a vblank, potentially blocking. + * + * If sequence is 0 the time of the last vblank will be immediately returned, + * if it's above zero that number of vblanks will pass before the function + * returns. * * @param output + * @param sequence * @param sec * @param usec * * @since 1.20 */ -EAPI Eina_Bool ecore_drm2_output_blanktime_get(Ecore_Drm2_Output *output, long *sec, long *usec); +EAPI Eina_Bool ecore_drm2_output_blanktime_get(Ecore_Drm2_Output *output, int sequence, long *sec, long *usec); # endif diff --git a/src/lib/ecore_drm2/ecore_drm2_outputs.c b/src/lib/ecore_drm2/ecore_drm2_outputs.c index d2b3acb54b..fba4be0c8d 100644 --- a/src/lib/ecore_drm2/ecore_drm2_outputs.c +++ b/src/lib/ecore_drm2/ecore_drm2_outputs.c @@ -1584,7 +1584,7 @@ ecore_drm2_output_subpixel_get(const Ecore_Drm2_Output *output) } EAPI Eina_Bool -ecore_drm2_output_blanktime_get(Ecore_Drm2_Output *output, long *sec, long *usec) +ecore_drm2_output_blanktime_get(Ecore_Drm2_Output *output, int sequence, long *sec, long *usec) { drmVBlank v; int ret; @@ -1595,6 +1595,7 @@ ecore_drm2_output_blanktime_get(Ecore_Drm2_Output *output, long *sec, long *usec memset(&v, 0, sizeof(v)); v.request.type = DRM_VBLANK_RELATIVE; + v.request.sequence = sequence; ret = sym_drmWaitVBlank(output->fd, &v); if (ret) return EINA_FALSE; if (v.reply.tval_sec < 0) return EINA_FALSE; diff --git a/src/modules/ecore_evas/engines/drm/ecore_evas_drm.c b/src/modules/ecore_evas/engines/drm/ecore_evas_drm.c index dd46ce00d0..302048c3b9 100644 --- a/src/modules/ecore_evas/engines/drm/ecore_evas_drm.c +++ b/src/modules/ecore_evas/engines/drm/ecore_evas_drm.c @@ -680,7 +680,7 @@ _drm_last_tick_get(Ecore_Evas *ee) long sec, usec; edata = ee->engine.data; - if (!ecore_drm2_output_blanktime_get(edata->output, &sec, &usec)) + if (!ecore_drm2_output_blanktime_get(edata->output, 0, &sec, &usec)) return -1.0; return sec + usec / 1000000.0;