derekf pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=398771bf8afb0399184854b87b30b4a58c1d2aa3

commit 398771bf8afb0399184854b87b30b4a58c1d2aa3
Author: Derek Foreman <der...@osg.samsung.com>
Date:   Tue Aug 30 15:47:17 2016 -0500

    evas_engines: Add fn_evas_changed callback
    
    To allow using the pageflip completion event to drive timing in the DRM
    engine we need to know as soon as possible that a render has been after
    a render has been considered if it will cause a page flip or not.
    
    The fn_evas_changed callback sends this information.
---
 src/lib/ecore_evas/ecore_evas.c                                 | 7 +++++++
 src/lib/ecore_evas/ecore_evas_buffer.c                          | 2 ++
 src/lib/ecore_evas/ecore_evas_ews.c                             | 2 ++
 src/lib/ecore_evas/ecore_evas_private.h                         | 2 ++
 src/modules/ecore_evas/engines/cocoa/ecore_evas_cocoa.c         | 4 +++-
 src/modules/ecore_evas/engines/drm/ecore_evas_drm.c             | 4 +++-
 src/modules/ecore_evas/engines/extn/ecore_evas_extn.c           | 6 +++++-
 src/modules/ecore_evas/engines/fb/ecore_evas_fb.c               | 4 +++-
 src/modules/ecore_evas/engines/psl1ght/ecore_evas_psl1ght.c     | 4 +++-
 src/modules/ecore_evas/engines/sdl/ecore_evas_sdl.c             | 4 +++-
 src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_egl.c | 4 +++-
 src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_shm.c | 4 +++-
 src/modules/ecore_evas/engines/win32/ecore_evas_win32.c         | 4 +++-
 src/modules/ecore_evas/engines/x/ecore_evas_x.c                 | 4 +++-
 14 files changed, 45 insertions(+), 10 deletions(-)

diff --git a/src/lib/ecore_evas/ecore_evas.c b/src/lib/ecore_evas/ecore_evas.c
index 769855d..72e4699 100644
--- a/src/lib/ecore_evas/ecore_evas.c
+++ b/src/lib/ecore_evas/ecore_evas.c
@@ -175,6 +175,13 @@ _ecore_evas_idle_enter(void *data EINA_UNUSED)
           {
              if (ee->engine.func->fn_render)
                rend |= ee->engine.func->fn_render(ee);
+              /*
+               * Some engines that generate their own ticks based on hardware
+               * events need to know that render has been considered, and
+               * whether it will actually generate a new image or not
+               */
+             if (ee->engine.func->fn_evas_changed)
+               ee->engine.func->fn_evas_changed(ee, rend);
           }
 #ifdef ECORE_EVAS_ASYNC_RENDER_DEBUG
         if ((ee->in_async_render) && (ee->async_render_start <= 0.0))
diff --git a/src/lib/ecore_evas/ecore_evas_buffer.c 
b/src/lib/ecore_evas/ecore_evas_buffer.c
index 795f5b7..deb2387 100644
--- a/src/lib/ecore_evas/ecore_evas_buffer.c
+++ b/src/lib/ecore_evas/ecore_evas_buffer.c
@@ -606,6 +606,8 @@ static Ecore_Evas_Engine_Func _ecore_buffer_engine_func =
 
      NULL, // fn_animator_register
      NULL, // fn_animator_unregister
+
+     NULL, // fn_evas_changed
 };
 
 static void *
diff --git a/src/lib/ecore_evas/ecore_evas_ews.c 
b/src/lib/ecore_evas/ecore_evas_ews.c
index 904c504..6f90654 100644
--- a/src/lib/ecore_evas/ecore_evas_ews.c
+++ b/src/lib/ecore_evas/ecore_evas_ews.c
@@ -719,6 +719,8 @@ static const Ecore_Evas_Engine_Func _ecore_ews_engine_func =
 
      NULL, // fn_animator_register
      NULL, // fn_animator_unregister
+
+     NULL, // fn_evas_changed
 };
 
 void
diff --git a/src/lib/ecore_evas/ecore_evas_private.h 
b/src/lib/ecore_evas/ecore_evas_private.h
index 4eaa369..ee75fd0 100644
--- a/src/lib/ecore_evas/ecore_evas_private.h
+++ b/src/lib/ecore_evas/ecore_evas_private.h
@@ -156,6 +156,8 @@ struct _Ecore_Evas_Engine_Func
 
    void (*fn_animator_register)  (Ecore_Evas *ee);
    void (*fn_animator_unregister)(Ecore_Evas *ee);
+
+   void (*fn_evas_changed)(Ecore_Evas *ee, Eina_Bool changed);
 };
 
 struct _Ecore_Evas_Interface
diff --git a/src/modules/ecore_evas/engines/cocoa/ecore_evas_cocoa.c 
b/src/modules/ecore_evas/engines/cocoa/ecore_evas_cocoa.c
index 0624212..98dca01 100644
--- a/src/modules/ecore_evas/engines/cocoa/ecore_evas_cocoa.c
+++ b/src/modules/ecore_evas/engines/cocoa/ecore_evas_cocoa.c
@@ -673,7 +673,9 @@ static Ecore_Evas_Engine_Func _ecore_cocoa_engine_func =
 
     NULL, // fn_aux_hints_set
     NULL, // fn_animator_register
-    NULL  // fn_animator_unregister
+    NULL, // fn_animator_unregister
+
+    NULL, // fn_evas_changed
   };
 
 static Ecore_Cocoa_Window *
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 0ba8968..59278aa 100644
--- a/src/modules/ecore_evas/engines/drm/ecore_evas_drm.c
+++ b/src/modules/ecore_evas/engines/drm/ecore_evas_drm.c
@@ -663,7 +663,9 @@ static Ecore_Evas_Engine_Func _ecore_evas_drm_engine_func =
    NULL, // aux_hints_set
 
    NULL, // animator_register
-   NULL // animator_unregister
+   NULL, // animator_unregister
+
+   NULL // evas_changed
 };
 
 EAPI Ecore_Evas *
diff --git a/src/modules/ecore_evas/engines/extn/ecore_evas_extn.c 
b/src/modules/ecore_evas/engines/extn/ecore_evas_extn.c
index d705df3..785f9cd 100644
--- a/src/modules/ecore_evas/engines/extn/ecore_evas_extn.c
+++ b/src/modules/ecore_evas/engines/extn/ecore_evas_extn.c
@@ -913,7 +913,9 @@ static const Ecore_Evas_Engine_Func 
_ecore_extn_plug_engine_func =
    NULL, // aux_hints_set
 
    NULL, // fn_animator_register
-   NULL  // fn_animator_unregister
+   NULL, // fn_animator_unregister
+
+   NULL, // fn_evas_changed
 };
 
 static Eina_Bool
@@ -2078,6 +2080,8 @@ static const Ecore_Evas_Engine_Func 
_ecore_extn_socket_engine_func =
 
    NULL, // fn_animator_register
    NULL, // fn_animator_unregister
+
+   NULL, // fn_evas_changed
 };
 
 EAPI Ecore_Evas *
diff --git a/src/modules/ecore_evas/engines/fb/ecore_evas_fb.c 
b/src/modules/ecore_evas/engines/fb/ecore_evas_fb.c
index 3ab06bb..558f82f 100644
--- a/src/modules/ecore_evas/engines/fb/ecore_evas_fb.c
+++ b/src/modules/ecore_evas/engines/fb/ecore_evas_fb.c
@@ -641,7 +641,9 @@ static Ecore_Evas_Engine_Func _ecore_fb_engine_func =
      NULL,  // aux_hints_set
 
      NULL, // fn_animator_register
-     NULL  // fn_animator_unregister
+     NULL, // fn_animator_unregister
+
+     NULL, // fn_evas_changed
 };
 
 EAPI Ecore_Evas *
diff --git a/src/modules/ecore_evas/engines/psl1ght/ecore_evas_psl1ght.c 
b/src/modules/ecore_evas/engines/psl1ght/ecore_evas_psl1ght.c
index bd34e19..7938dce 100644
--- a/src/modules/ecore_evas/engines/psl1ght/ecore_evas_psl1ght.c
+++ b/src/modules/ecore_evas/engines/psl1ght/ecore_evas_psl1ght.c
@@ -463,7 +463,9 @@ static Ecore_Evas_Engine_Func _ecore_psl1ght_engine_func =
    NULL, // aux_hints_set
 
    NULL, // fn_animator_register
-   NULL  // fn_animator_unregister
+   NULL, // fn_animator_unregister
+
+   NULL, // fn_evas_changed
 };
 
 EAPI Ecore_Evas *
diff --git a/src/modules/ecore_evas/engines/sdl/ecore_evas_sdl.c 
b/src/modules/ecore_evas/engines/sdl/ecore_evas_sdl.c
index 9515e93..2382fda 100644
--- a/src/modules/ecore_evas/engines/sdl/ecore_evas_sdl.c
+++ b/src/modules/ecore_evas/engines/sdl/ecore_evas_sdl.c
@@ -552,7 +552,9 @@ static Ecore_Evas_Engine_Func _ecore_sdl_engine_func =
    NULL, // aux_hints_set
 
    NULL, // fn_animator_register
-   NULL  // fn_animator_unregister
+   NULL, // fn_animator_unregister
+
+   NULL, // fn_evas_changed
 };
 
 static Ecore_Evas*
diff --git a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_egl.c 
b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_egl.c
index c02619d..305b095 100644
--- a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_egl.c
+++ b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_egl.c
@@ -115,7 +115,9 @@ static Ecore_Evas_Engine_Func _ecore_wl_engine_func =
    NULL, // aux_hints_set
 
    NULL, // fn_animator_register
-   NULL  // fn_animator_unregister
+   NULL, // fn_animator_unregister
+
+   NULL, // fn_evas_changed
 };
 
 /* external variables */
diff --git a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_shm.c 
b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_shm.c
index 5f55b63..4b3b492 100644
--- a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_shm.c
+++ b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_shm.c
@@ -112,7 +112,9 @@ static Ecore_Evas_Engine_Func _ecore_wl_engine_func =
    NULL, // aux_hints_set
 
    NULL, // fn_animator_register
-   NULL  // fn_animator_unregister
+   NULL, // fn_animator_unregister
+
+   NULL, // fn_evas_changed
 };
 
 /* external variables */
diff --git a/src/modules/ecore_evas/engines/win32/ecore_evas_win32.c 
b/src/modules/ecore_evas/engines/win32/ecore_evas_win32.c
index 0ac7017..1187d5d 100644
--- a/src/modules/ecore_evas/engines/win32/ecore_evas_win32.c
+++ b/src/modules/ecore_evas/engines/win32/ecore_evas_win32.c
@@ -1203,7 +1203,9 @@ static Ecore_Evas_Engine_Func _ecore_win32_engine_func =
      NULL, // aux_hints_set
 
      NULL, // fn_animator_register
-     NULL  // fn_animator_unregister
+     NULL, // fn_animator_unregister
+
+     NULL, // fn_evas_changed
 };
 
 #endif /* BUILD_ECORE_EVAS_WIN32 */
diff --git a/src/modules/ecore_evas/engines/x/ecore_evas_x.c 
b/src/modules/ecore_evas/engines/x/ecore_evas_x.c
index a8226bd..e3bfaa8 100644
--- a/src/modules/ecore_evas/engines/x/ecore_evas_x.c
+++ b/src/modules/ecore_evas/engines/x/ecore_evas_x.c
@@ -3744,7 +3744,9 @@ static Ecore_Evas_Engine_Func _ecore_x_engine_func =
    _ecore_evas_x_aux_hints_set,
 
    NULL, // fn_animator_register
-   NULL  // fn_animator_unregister
+   NULL, // fn_animator_unregister
+
+   NULL, // fn_evas_changed
 };
 
 /*

-- 


Reply via email to