summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDerek Foreman <derekf@osg.samsung.com>2016-08-30 15:47:17 -0500
committerDerek Foreman <derekf@osg.samsung.com>2016-09-08 13:55:23 -0500
commit398771bf8afb0399184854b87b30b4a58c1d2aa3 (patch)
tree8b5647cc426dad0aa85abfba4cceb7117ea38945
parent1591e095d5e834a67bd270019068c6b6edf6bfba (diff)
downloadefl-398771bf8afb0399184854b87b30b4a58c1d2aa3.tar.gz
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.
-rw-r--r--src/lib/ecore_evas/ecore_evas.c7
-rw-r--r--src/lib/ecore_evas/ecore_evas_buffer.c2
-rw-r--r--src/lib/ecore_evas/ecore_evas_ews.c2
-rw-r--r--src/lib/ecore_evas/ecore_evas_private.h2
-rw-r--r--src/modules/ecore_evas/engines/cocoa/ecore_evas_cocoa.c4
-rw-r--r--src/modules/ecore_evas/engines/drm/ecore_evas_drm.c4
-rw-r--r--src/modules/ecore_evas/engines/extn/ecore_evas_extn.c6
-rw-r--r--src/modules/ecore_evas/engines/fb/ecore_evas_fb.c4
-rw-r--r--src/modules/ecore_evas/engines/psl1ght/ecore_evas_psl1ght.c4
-rw-r--r--src/modules/ecore_evas/engines/sdl/ecore_evas_sdl.c4
-rw-r--r--src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_egl.c4
-rw-r--r--src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_shm.c4
-rw-r--r--src/modules/ecore_evas/engines/win32/ecore_evas_win32.c4
-rw-r--r--src/modules/ecore_evas/engines/x/ecore_evas_x.c4
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 769855d6ea..72e46992cd 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 795f5b77fc..deb2387001 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 904c5043fb..6f90654f6b 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 4eaa3696b7..ee75fd0782 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 0624212cc8..98dca01082 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 0ba89685cc..59278aa4f2 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 d705df3ee1..785f9cd0f4 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 3ab06bb40e..558f82f752 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 bd34e19fd1..7938dce2e5 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 9515e93a50..2382fdac44 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 c02619d010..305b095cea 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 5f55b63bd4..4b3b492104 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 0ac7017c6b..1187d5dba2 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 a8226bd099..e3bfaa89f9 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
};
/*