evas_engines: Add a redraws_clear callback
authorDerek Foreman <derekf@osg.samsung.com>
Tue, 6 Sep 2016 22:01:37 +0000 (17:01 -0500)
committerDerek Foreman <derekf@osg.samsung.com>
Thu, 8 Sep 2016 18:55:24 +0000 (13:55 -0500)
This gives us a callback from the main thread after outbuf_flush occurs -
this is useful to get timing right on the drm and wayland engines.

16 files changed:
src/modules/evas/engines/buffer/evas_engine.c
src/modules/evas/engines/drm/evas_engine.c
src/modules/evas/engines/eglfs/evas_engine.c
src/modules/evas/engines/fb/evas_engine.c
src/modules/evas/engines/gl_cocoa/evas_engine.c
src/modules/evas/engines/gl_drm/evas_engine.c
src/modules/evas/engines/gl_generic/Evas_Engine_GL_Generic.h
src/modules/evas/engines/gl_sdl/evas_engine.c
src/modules/evas/engines/gl_x11/evas_engine.c
src/modules/evas/engines/software_ddraw/evas_engine.c
src/modules/evas/engines/software_gdi/evas_engine.c
src/modules/evas/engines/software_generic/Evas_Engine_Software_Generic.h
src/modules/evas/engines/software_generic/evas_engine.c
src/modules/evas/engines/software_x11/evas_engine.c
src/modules/evas/engines/wayland_egl/evas_engine.c
src/modules/evas/engines/wayland_shm/evas_engine.c

index 021f7c5..bef4a45 100644 (file)
@@ -103,6 +103,7 @@ _output_setup(int w,
                                                  evas_buffer_outbuf_buf_free_region_for_update,
                                                  NULL,
                                                  evas_buffer_outbuf_buf_switch_buffer,
+                                                 NULL,
                                                  evas_buffer_outbuf_buf_free,
                                                  w, h))
      goto on_error;
index 0499a96..e28037d 100644 (file)
@@ -32,6 +32,7 @@ _render_engine_setup(Evas_Engine_Info_Drm *info, int w, int h)
                                                  _outbuf_update_region_free,
                                                  NULL,
                                                  _outbuf_flush,
+                                                 NULL,
                                                  _outbuf_free,
                                                  ob->w, ob->h))
      goto init_err;
index 630cd9c..c881f29 100644 (file)
@@ -793,6 +793,7 @@ eng_setup(Evas *evas, void *in)
                                                 evas_outbuf_update_region_free,
                                                 NULL,
                                                 evas_outbuf_flush,
+                                                NULL,
                                                 evas_outbuf_free,
                                                 evas_outbuf_use,
                                                 evas_outbuf_gl_context_get,
index f78e7a1..9457485 100644 (file)
@@ -53,6 +53,7 @@ _output_setup(int w, int h, int rot, int vt, int dev, int refresh)
                                                  evas_fb_outbuf_fb_free_region_for_update,
                                                  NULL,
                                                  NULL,
+                                                 NULL,
                                                  evas_fb_outbuf_fb_free,
                                                  evas_fb_outbuf_fb_get_width(ob),
                                                  evas_fb_outbuf_fb_get_height(ob)))
index 2031166..585323a 100644 (file)
@@ -202,6 +202,7 @@ eng_setup(Evas *evas, void *in)
                                                 evas_outbuf_update_region_free,
                                                 NULL,
                                                 evas_outbuf_flush,
+                                                NULL,
                                                 evas_outbuf_free,
                                                 evas_outbuf_use,
                                                 evas_outbuf_gl_context_get,
index 6b4122f..ae19d1a 100644 (file)
@@ -915,6 +915,7 @@ eng_setup(Evas *evas, void *in)
                                                 evas_outbuf_update_region_free,
                                                 NULL,
                                                 evas_outbuf_flush,
+                                                NULL,
                                                 evas_outbuf_free,
                                                 evas_outbuf_use,
                                                 evas_outbuf_gl_context_get,
index 8118812..ace326d 100644 (file)
@@ -51,6 +51,7 @@ evas_render_engine_gl_generic_init(Render_Engine_GL_Generic *re,
                                    Outbuf_Free_Region_For_Update outbuf_free_region_for_update,
                                    Outbuf_Idle_Flush outbuf_idle_flush,
                                    Outbuf_Flush outbuf_flush,
+                                   Outbuf_Redraws_Clear outbuf_redraws_clear,
                                    Outbuf_Free outbuf_free,
                                    Window_Use window_use,
                                    Window_GL_Context_Get window_gl_context_get,
@@ -71,6 +72,7 @@ evas_render_engine_gl_generic_init(Render_Engine_GL_Generic *re,
                                                  outbuf_free_region_for_update,
                                                  outbuf_idle_flush,
                                                  outbuf_flush,
+                                                 outbuf_redraws_clear,
                                                  outbuf_free,
                                                  w, h))
      return EINA_FALSE;
index 99ebf13..c2c3400 100644 (file)
@@ -316,6 +316,7 @@ eng_setup(Evas *eo_e, void *in)
                                            _outbuf_free_region_for_update,
                                            NULL,
                                            _outbuf_flush,
+                                           NULL,
                                            _outbuf_free,
                                            _window_use,
                                            _window_gl_context_get,
index 8842a47..e0938c1 100644 (file)
@@ -1727,6 +1727,7 @@ eng_setup(Evas *eo_e, void *in)
                                                 eng_outbuf_push_free_region_for_update,
                                                 eng_outbuf_idle_flush,
                                                 eng_outbuf_flush,
+                                                NULL,
                                                 eng_window_free,
                                                 eng_window_use,
                                                 eng_outbuf_gl_context_get,
index c18340b..75b37ba 100644 (file)
@@ -53,6 +53,7 @@ _output_setup(int  width,
                                                  evas_software_ddraw_outbuf_free_region_for_update,
                                                  evas_software_ddraw_outbuf_idle_flush,
                                                  evas_software_ddraw_outbuf_flush,
+                                                 NULL,
                                                  evas_software_ddraw_outbuf_free,
                                                  width, height))
      goto on_error;
index 9c00347..d57e92c 100644 (file)
@@ -59,6 +59,7 @@ _output_setup(int          width,
                                                  evas_software_gdi_outbuf_free_region_for_update,
                                                  evas_software_gdi_outbuf_idle_flush,
                                                  evas_software_gdi_outbuf_flush,
+                                                 NULL,
                                                  evas_software_gdi_outbuf_free,
                                                  width, height))
      goto on_error;
index d3a3620..5f31ad4 100644 (file)
@@ -54,6 +54,7 @@ typedef void (*Outbuf_Free_Region_For_Update)(Outbuf *ob, RGBA_Image *update);
 typedef void (*Outbuf_Free)(Outbuf *ob);
 typedef int (*Outbuf_Get_Rot)(Outbuf *ob);
 typedef void (*Outbuf_Flush)(Outbuf *ob, Tilebuf_Rect *rects, Evas_Render_Mode render_mode);
+typedef void (*Outbuf_Redraws_Clear)(Outbuf *ob);
 
 struct _Render_Engine_Software_Generic
 {
@@ -74,6 +75,7 @@ struct _Render_Engine_Software_Generic
    Outbuf_Free_Region_For_Update outbuf_free_region_for_update;
    Outbuf_Free outbuf_free;
    Outbuf_Flush outbuf_flush;
+   Outbuf_Redraws_Clear outbuf_redraws_clear;
 
    unsigned int w, h;
 
@@ -98,6 +100,7 @@ evas_render_engine_software_generic_init(Render_Engine_Software_Generic *re,
                                          Outbuf_Free_Region_For_Update outbuf_free_region_for_update,
                                          Outbuf_Idle_Flush outbuf_idle_flush,
                                          Outbuf_Flush outbuf_flush,
+                                         Outbuf_Redraws_Clear outbuf_redraws_clear,
                                          Outbuf_Free outbuf_free,
                                          int w, int h)
 {
@@ -115,6 +118,7 @@ evas_render_engine_software_generic_init(Render_Engine_Software_Generic *re,
    re->outbuf_free_region_for_update = outbuf_free_region_for_update;
    re->outbuf_free = outbuf_free;
    re->outbuf_flush = outbuf_flush;
+   re->outbuf_redraws_clear = outbuf_redraws_clear;
 
    re->rects = NULL;
    for (i = 0; i < 4; i++)
index 52505d8..62ad71a 100644 (file)
@@ -3877,6 +3877,7 @@ eng_output_redraws_clear(void *data)
 
    re = (Render_Engine_Software_Generic *)data;
    evas_common_tilebuf_clear(re->tb);
+   if (re->outbuf_redraws_clear) re->outbuf_redraws_clear(re->ob);
 }
 
 static Tilebuf_Rect *
index dc926e6..6429a5a 100644 (file)
@@ -186,6 +186,7 @@ _output_xlib_setup(int w, int h, int rot, Display *disp, Drawable draw,
                                                  evas_software_xlib_outbuf_free_region_for_update,
                                                  evas_software_xlib_outbuf_idle_flush,
                                                  evas_software_xlib_outbuf_flush,
+                                                 NULL,
                                                  evas_software_xlib_outbuf_free,
                                                  w, h))
      goto on_error;
@@ -247,6 +248,7 @@ _output_swapbuf_setup(int w, int h, int rot, Display *disp, Drawable draw,
                                                  evas_software_xlib_swapbuf_free_region_for_update,
                                                  evas_software_xlib_swapbuf_idle_flush,
                                                  evas_software_xlib_swapbuf_flush,
+                                                 NULL,
                                                  evas_software_xlib_swapbuf_free,
                                                  w, h))
      goto on_error;
@@ -305,6 +307,7 @@ _output_xcb_setup(int w, int h, int rot, xcb_connection_t *conn,
                                                  evas_software_xcb_outbuf_free_region_for_update,
                                                  evas_software_xcb_outbuf_idle_flush,
                                                  evas_software_xcb_outbuf_flush,
+                                                 NULL,
                                                  evas_software_xcb_outbuf_free,
                                                  w, h))
      goto on_error;
index a85c593..707f4dd 100644 (file)
@@ -597,6 +597,7 @@ eng_setup(Evas *evas, void *info)
                                                 eng_outbuf_update_region_free,
                                                 NULL,
                                                 eng_outbuf_flush,
+                                                NULL,
                                                 eng_window_free,
                                                 eng_window_use,
                                                 eng_outbuf_gl_context_get,
index 0c4abe2..ee339c1 100644 (file)
@@ -55,6 +55,7 @@ _render_engine_swapbuf_setup(int w, int h, Evas_Engine_Info_Wayland_Shm *einfo)
                                                  _evas_outbuf_update_region_free,
                                                  _evas_outbuf_idle_flush,
                                                  _evas_outbuf_flush,
+                                                 NULL,
                                                  _evas_outbuf_free,
                                                  w, h))
      goto err;