devilhorns pushed a commit to branch feature/wayland/multioutput. http://git.enlightenment.org/core/efl.git/commit/?id=fa7c095adf3cf2f21bb51809720ae51badebca4c
commit fa7c095adf3cf2f21bb51809720ae51badebca4c Author: Chris Michael <cp.mich...@samsung.com> Date: Thu Mar 29 09:17:52 2018 -0400 ecore-evas-drm: Add support for per-output ticking This patch modifies the ecore_evas animator ticking code for drm in order to support ticks on a per-output basis --- src/lib/ecore_drm2/ecore_drm2_fb.c | 3 +- .../ecore_evas/engines/drm/ecore_evas_drm.c | 42 ++++++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/src/lib/ecore_drm2/ecore_drm2_fb.c b/src/lib/ecore_drm2/ecore_drm2_fb.c index 500e46d6eb..28596b51f4 100644 --- a/src/lib/ecore_drm2/ecore_drm2_fb.c +++ b/src/lib/ecore_drm2/ecore_drm2_fb.c @@ -503,7 +503,8 @@ _fb_flip(Ecore_Drm2_Output *output) repeat = EINA_FALSE; ret = sym_drmModePageFlip(fb->fd, output->crtc_id, fb->id, - DRM_MODE_PAGE_FLIP_EVENT, output); + DRM_MODE_PAGE_FLIP_EVENT, + output); /* Some drivers (RPI - looking at you) are broken and produce * flip events before they are ready for another flip, so be 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 5c413609b7..166cd85f90 100644 --- a/src/modules/ecore_evas/engines/drm/ecore_evas_drm.c +++ b/src/modules/ecore_evas/engines/drm/ecore_evas_drm.c @@ -854,6 +854,7 @@ _cb_pageflip(int fd EINA_UNUSED, unsigned int frame EINA_UNUSED, unsigned int se if (edata->ticking) { Ecore_Evas_Engine_Drm_Tick *etick; +<<<<<<< HEAD etick = _drm_tick_find(edata, output); if (etick) @@ -863,6 +864,17 @@ _cb_pageflip(int fd EINA_UNUSED, unsigned int frame EINA_UNUSED, unsigned int se ecore_drm2_output_info_get(output, &x, &y, &w, &h, NULL); +======= + + etick = _drm_tick_find(edata, output); + if (etick) + { + int x, y, w, h; + double t = (double)sec + ((double)usec / 1000000); + + ecore_drm2_output_info_get(output, &x, &y, &w, &h, NULL); + +>>>>>>> ff44c6859b... ecore-evas-drm: Add support for per-output ticking if (!edata->once) t = ecore_time_get(); ecore_evas_animator_tick(ee, &(Eina_Rectangle){x, y, w, h}, t - etick->offset); @@ -1034,6 +1046,35 @@ _drm_last_tick_get(Ecore_Evas *ee) Eina_List *l; long sec, usec; double tmp = -1.0; +<<<<<<< HEAD + + edata = ee->engine.data; + + EINA_LIST_FOREACH(edata->outputs, l, output) + { + if (ecore_drm2_output_blanktime_get(output, 0, &sec, &usec)) + { + if ((sec + usec / 1000000.0) > tmp) + tmp = sec + usec / 1000000.0; + } + } + + return tmp; +} + +static Eina_Bool +_drm_output_clone_set(const Ecore_Evas *ee, void *output, void *clone) +{ + Ecore_Evas_Engine_Drm_Data *edata; + Ecore_Drm2_Output *out, *cout; + Ecore_Evas_Engine_Drm_Tick *etick; + Evas_Engine_Info_Drm *einfo; + + EINA_SAFETY_ON_NULL_RETURN_VAL(output, EINA_FALSE); + + edata = ee->engine.data; + +======= edata = ee->engine.data; @@ -1061,6 +1102,7 @@ _drm_output_clone_set(const Ecore_Evas *ee, void *output, void *clone) edata = ee->engine.data; +>>>>>>> ff44c6859b... ecore-evas-drm: Add support for per-output ticking out = (Ecore_Drm2_Output *)output; cout = (Ecore_Drm2_Output *)clone; --