derekf pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=8e500c683549e8d3afe78657c4582560a5c75eba

commit 8e500c683549e8d3afe78657c4582560a5c75eba
Author: Derek Foreman <[email protected]>
Date:   Fri Jul 28 09:40:40 2017 -0500

    ecore_drm2: Allow picking a sequence number for blanktime_get
    
    This lets us do a blocking wait for a vsync.  Something we should try to
    do as infrequently as possible, but in some cases we need it one time at
    startup to catch graphics driver bugs.
---
 src/lib/ecore_drm2/Ecore_Drm2.h                     | 9 +++++++--
 src/lib/ecore_drm2/ecore_drm2_outputs.c             | 3 ++-
 src/modules/ecore_evas/engines/drm/ecore_evas_drm.c | 2 +-
 3 files changed, 10 insertions(+), 4 deletions(-)

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;

-- 


Reply via email to