From c303f04048e7387eb04f3d6f9d757b4c6c39a49c Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Sun, 17 Jun 2007 02:56:59 +0000 Subject: [PATCH] add an engine idle flush SVN revision: 30355 --- legacy/evas/src/lib/Evas.h | 3 ++- legacy/evas/src/lib/canvas/evas_render.c | 18 +++++++++++++++++- legacy/evas/src/lib/include/evas_private.h | 1 + .../src/modules/engines/buffer/evas_engine.c | 9 +++++++++ .../modules/engines/directfb/evas_engine_dfb.c | 9 +++++++++ .../modules/engines/directfb/evas_engine_dfb.h | 1 + .../evas/src/modules/engines/fb/evas_engine.c | 10 ++++++++++ .../src/modules/engines/gl_x11/evas_engine.c | 9 +++++++++ .../modules/engines/glitz_x11/evas_engine.c | 10 ++++++++++ .../modules/engines/software_16/evas_engine.c | 1 + .../engines/software_16_x11/evas_engine.c | 12 ++++++++++++ .../engines/software_ddraw/evas_engine.c | 9 +++++++++ .../engines/software_generic/evas_engine.c | 1 + .../engines/software_qtopia/evas_engine.c | 10 ++++++++++ .../modules/engines/software_x11/evas_engine.c | 11 +++++++++++ .../modules/engines/software_xcb/evas_engine.c | 10 ++++++++++ .../modules/engines/xrender_x11/evas_engine.c | 9 +++++++++ 17 files changed, 131 insertions(+), 2 deletions(-) diff --git a/legacy/evas/src/lib/Evas.h b/legacy/evas/src/lib/Evas.h index 28d206baee..fe831fd19b 100644 --- a/legacy/evas/src/lib/Evas.h +++ b/legacy/evas/src/lib/Evas.h @@ -421,7 +421,8 @@ extern "C" { EAPI void evas_render_updates_free (Evas_List *updates); EAPI void evas_render (Evas *e); EAPI void evas_norender (Evas *e); - + EAPI void evas_render_idle_flush (Evas *e); + /* rectangle objects */ EAPI Evas_Object *evas_object_rectangle_add (Evas *e); diff --git a/legacy/evas/src/lib/canvas/evas_render.c b/legacy/evas/src/lib/canvas/evas_render.c index dcff3d304c..cb16fc930e 100644 --- a/legacy/evas/src/lib/canvas/evas_render.c +++ b/legacy/evas/src/lib/canvas/evas_render.c @@ -67,7 +67,6 @@ evas_obscured_clear(Evas *e) } } - static void _evas_render_phase1_object_process(Evas *e, Evas_Object *obj, Evas_List **active_objects, Evas_List **restack_objects, Evas_List **delete_objects, int restack) { @@ -501,3 +500,20 @@ evas_norender(Evas *e) evas_render_updates_internal(e, 0, 0); } +/** + * To be documented. + * + * FIXME: To be fixed. + * + */ +EAPI void +evas_render_idle_flush(Evas *e) +{ + MAGIC_CHECK(e, Evas, MAGIC_EVAS); + return; + MAGIC_CHECK_END(); + + if ((e->engine.func) && (e->engine.func->output_idle_flush) && + (e->engine.data.output)) + e->engine.func->output_idle_flush(e->engine.data.output); +} diff --git a/legacy/evas/src/lib/include/evas_private.h b/legacy/evas/src/lib/include/evas_private.h index 97e4ffb7ad..58e5c1d164 100644 --- a/legacy/evas/src/lib/include/evas_private.h +++ b/legacy/evas/src/lib/include/evas_private.h @@ -530,6 +530,7 @@ struct _Evas_Func void *(*output_redraws_next_update_get) (void *data, int *x, int *y, int *w, int *h, int *cx, int *cy, int *cw, int *ch); void (*output_redraws_next_update_push) (void *data, void *surface, int x, int y, int w, int h); void (*output_flush) (void *data); + void (*output_idle_flush) (void *data); void *(*context_new) (void *data); void (*context_free) (void *data, void *context); diff --git a/legacy/evas/src/modules/engines/buffer/evas_engine.c b/legacy/evas/src/modules/engines/buffer/evas_engine.c index d56bffae99..c41882f92b 100644 --- a/legacy/evas/src/modules/engines/buffer/evas_engine.c +++ b/legacy/evas/src/modules/engines/buffer/evas_engine.c @@ -308,6 +308,14 @@ eng_output_flush(void *data) re = (Render_Engine *)data; } +static void +eng_output_idle_flush(void *data) +{ + Render_Engine *re; + + re = (Render_Engine *)data; +} + /* module advertising code */ EAPI int module_open(Evas_Module *em) @@ -331,6 +339,7 @@ module_open(Evas_Module *em) ORD(output_redraws_next_update_get); ORD(output_redraws_next_update_push); ORD(output_flush); + ORD(output_idle_flush); /* now advertise out own api */ em->functions = (void *)(&func); return 1; diff --git a/legacy/evas/src/modules/engines/directfb/evas_engine_dfb.c b/legacy/evas/src/modules/engines/directfb/evas_engine_dfb.c index 442f96e628..b6fd199ab3 100644 --- a/legacy/evas/src/modules/engines/directfb/evas_engine_dfb.c +++ b/legacy/evas/src/modules/engines/directfb/evas_engine_dfb.c @@ -15,6 +15,7 @@ static Evas_Func evas_engine_directfb_func = { evas_engine_directfb_output_redraws_next_update_get, evas_engine_directfb_output_redraws_next_update_push, evas_engine_directfb_output_flush, + evas_engine_directfb_output_idle_flush, /* draw context virtual methods */ evas_engine_directfb_context_new, evas_engine_directfb_context_free, @@ -391,6 +392,14 @@ evas_engine_directfb_output_flush(void *data) re = (Render_Engine *) data; } +void +evas_engine_directfb_output_idle_flush(void *data) +{ + Render_Engine *re; + + re = (Render_Engine *) data; +} + void * evas_engine_directfb_context_new(void *data) { diff --git a/legacy/evas/src/modules/engines/directfb/evas_engine_dfb.h b/legacy/evas/src/modules/engines/directfb/evas_engine_dfb.h index 5092d71bcd..dcd6a88c3f 100644 --- a/legacy/evas/src/modules/engines/directfb/evas_engine_dfb.h +++ b/legacy/evas/src/modules/engines/directfb/evas_engine_dfb.h @@ -59,6 +59,7 @@ void evas_engine_directfb_output_redraws_next_update_push(void int w, int h); void evas_engine_directfb_output_flush(void *data); +void evas_engine_directfb_output_idle_flush(void *data); void *evas_engine_directfb_context_new(void *data); void evas_engine_directfb_context_free(void *data, void *context); diff --git a/legacy/evas/src/modules/engines/fb/evas_engine.c b/legacy/evas/src/modules/engines/fb/evas_engine.c index a0ddfa9cec..797413c328 100644 --- a/legacy/evas/src/modules/engines/fb/evas_engine.c +++ b/legacy/evas/src/modules/engines/fb/evas_engine.c @@ -33,6 +33,7 @@ static void eng_output_redraws_clear(void *data); static void *eng_output_redraws_next_update_get(void *data, int *x, int *y, int *w, int *h, int *cx, int *cy, int *cw, int *ch); static void eng_output_redraws_next_update_push(void *data, void *surface, int x, int y, int w, int h); static void eng_output_flush(void *data); +static void eng_output_idle_flush(void *data); /* internal engine routines */ static void * @@ -232,6 +233,14 @@ eng_output_flush(void *data) re = (Render_Engine *)data; } +static void +eng_output_idle_flush(void *data) +{ + Render_Engine *re; + + re = (Render_Engine *)data; +} + /* module advertising code */ EAPI int module_open(Evas_Module *em) @@ -255,6 +264,7 @@ module_open(Evas_Module *em) ORD(output_redraws_next_update_get); ORD(output_redraws_next_update_push); ORD(output_flush); + ORD(output_idle_flush); /* now advertise out own api */ em->functions = (void *)(&func); return 1; diff --git a/legacy/evas/src/modules/engines/gl_x11/evas_engine.c b/legacy/evas/src/modules/engines/gl_x11/evas_engine.c index 5f20cc2c54..4ee38f62cf 100644 --- a/legacy/evas/src/modules/engines/gl_x11/evas_engine.c +++ b/legacy/evas/src/modules/engines/gl_x11/evas_engine.c @@ -294,6 +294,14 @@ eng_output_flush(void *data) // printf("SYNC! %i\n", fr++); } +static void +eng_output_idle_flush(void *data) +{ + Render_Engine *re; + + re = (Render_Engine *)data; +} + static void eng_context_cutout_add(void *data, void *context, int x, int y, int w, int h) { @@ -958,6 +966,7 @@ module_open(Evas_Module *em) ORD(context_cutout_add); ORD(context_cutout_clear); ORD(output_flush); + ORD(output_idle_flush); ORD(rectangle_draw); ORD(line_draw); ORD(polygon_point_add); diff --git a/legacy/evas/src/modules/engines/glitz_x11/evas_engine.c b/legacy/evas/src/modules/engines/glitz_x11/evas_engine.c index 745fae25fa..3cc5097eeb 100644 --- a/legacy/evas/src/modules/engines/glitz_x11/evas_engine.c +++ b/legacy/evas/src/modules/engines/glitz_x11/evas_engine.c @@ -45,6 +45,7 @@ static void eng_output_redraws_clear(void *data); static void *eng_output_redraws_next_update_get(void *data, int *x, int *y, int *w, int *h, int *cx, int *cy, int *cw, int *ch); static void eng_output_redraws_next_update_push(void *data, void *surface, int x, int y, int w, int h); static void eng_output_flush(void *data); +static void eng_output_idle_flush(void *data); static void eng_rectangle_draw(void *data, void *context, void *surface, int x, int y, int w, int h); @@ -339,6 +340,14 @@ eng_output_flush(void *data) // _xr_image_info_pool_flush(re->xinf, 0, 0); } +static void +eng_output_idle_flush(void *data) +{ + Render_Engine *re; + + re = (Render_Engine *)data; +} + static void eng_rectangle_draw(void *data, void *context, void *surface, int x, int y, int w, int h) { @@ -599,6 +608,7 @@ module_open(Evas_Module *em) ORD(output_redraws_next_update_get); ORD(output_redraws_next_update_push); ORD(output_flush); + ORD(output_idle_flush); ORD(rectangle_draw); ORD(line_draw); ORD(polygon_draw); diff --git a/legacy/evas/src/modules/engines/software_16/evas_engine.c b/legacy/evas/src/modules/engines/software_16/evas_engine.c index 8df2770d85..c6b2af8d11 100644 --- a/legacy/evas/src/modules/engines/software_16/evas_engine.c +++ b/legacy/evas/src/modules/engines/software_16/evas_engine.c @@ -632,6 +632,7 @@ static Evas_Func func = NULL, NULL, NULL, + NULL, /* draw context virtual methods */ eng_context_new, eng_context_free, diff --git a/legacy/evas/src/modules/engines/software_16_x11/evas_engine.c b/legacy/evas/src/modules/engines/software_16_x11/evas_engine.c index 6d61ec7f0b..9573e98cf3 100644 --- a/legacy/evas/src/modules/engines/software_16_x11/evas_engine.c +++ b/legacy/evas/src/modules/engines/software_16_x11/evas_engine.c @@ -38,6 +38,7 @@ static void eng_output_redraws_clear(void *data); static void *eng_output_redraws_next_update_get(void *data, int *x, int *y, int *w, int *h, int *cx, int *cy, int *cw, int *ch); static void eng_output_redraws_next_update_push(void *data, void *surface, int x, int y, int w, int h); static void eng_output_flush(void *data); +static void eng_output_idle_flush(void *data); /* engine api this module provides */ static void * @@ -291,6 +292,16 @@ eng_output_flush(void *data) // evas_software_x11_outbuf_flush(re->ob); } +static void +eng_output_idle_flush(void *data) +{ + Render_Engine *re; + + re = (Render_Engine *)data; + /* FIXME: clean up any resources kept around between renders in case + * we are animating a lot and want high fps */ +} + /* module advertising code */ EAPI int @@ -315,6 +326,7 @@ module_open(Evas_Module *em) ORD(output_redraws_next_update_get); ORD(output_redraws_next_update_push); ORD(output_flush); + ORD(output_idle_flush); /* now advertise out own api */ em->functions = (void *)(&func); return 1; diff --git a/legacy/evas/src/modules/engines/software_ddraw/evas_engine.c b/legacy/evas/src/modules/engines/software_ddraw/evas_engine.c index fff1dcd95d..91b1742563 100644 --- a/legacy/evas/src/modules/engines/software_ddraw/evas_engine.c +++ b/legacy/evas/src/modules/engines/software_ddraw/evas_engine.c @@ -315,6 +315,14 @@ eng_output_flush(void *data) evas_software_ddraw_outbuf_flush(re->ob); } +static void +eng_output_idle_flush(void *data) +{ + Render_Engine *re; + + re = (Render_Engine *)data; +} + /* module advertising code */ EAPI int module_open(Evas_Module *em) @@ -338,6 +346,7 @@ module_open(Evas_Module *em) ORD(output_redraws_next_update_get); ORD(output_redraws_next_update_push); ORD(output_flush); + ORD(output_idle_flush); /* now advertise out own api */ em->functions = (void *)(&func); return 1; diff --git a/legacy/evas/src/modules/engines/software_generic/evas_engine.c b/legacy/evas/src/modules/engines/software_generic/evas_engine.c index 1200c8ff6b..9a80fcb9e9 100644 --- a/legacy/evas/src/modules/engines/software_generic/evas_engine.c +++ b/legacy/evas/src/modules/engines/software_generic/evas_engine.c @@ -925,6 +925,7 @@ static Evas_Func func = NULL, NULL, NULL, + NULL, /* draw context virtual methods */ eng_context_new, eng_context_free, diff --git a/legacy/evas/src/modules/engines/software_qtopia/evas_engine.c b/legacy/evas/src/modules/engines/software_qtopia/evas_engine.c index d59eff77a7..4c07949f2e 100644 --- a/legacy/evas/src/modules/engines/software_qtopia/evas_engine.c +++ b/legacy/evas/src/modules/engines/software_qtopia/evas_engine.c @@ -33,6 +33,7 @@ static void eng_output_redraws_clear(void *data); static void *eng_output_redraws_next_update_get(void *data, int *x, int *y, int *w, int *h, int *cx, int *cy, int *cw, int *ch); static void eng_output_redraws_next_update_push(void *data, void *surface, int x, int y, int w, int h); static void eng_output_flush(void *data); +static void eng_output_idle_flush(void *data); /* internal engine routines */ static void * @@ -247,6 +248,14 @@ eng_output_flush(void *data) re = (Render_Engine *)data; } +static void +eng_output_idle_flush(void *data) +{ + Render_Engine *re; + + re = (Render_Engine *)data; +} + /* module advertising code */ EAPI int module_open(Evas_Module *em) @@ -270,6 +279,7 @@ module_open(Evas_Module *em) ORD(output_redraws_next_update_get); ORD(output_redraws_next_update_push); ORD(output_flush); + ORD(output_idle_flush); /* now advertise out own api */ em->functions = (void *)(&func); return 1; diff --git a/legacy/evas/src/modules/engines/software_x11/evas_engine.c b/legacy/evas/src/modules/engines/software_x11/evas_engine.c index dc29dec1bf..a5332d0f4f 100644 --- a/legacy/evas/src/modules/engines/software_x11/evas_engine.c +++ b/legacy/evas/src/modules/engines/software_x11/evas_engine.c @@ -43,6 +43,7 @@ static void eng_output_redraws_clear(void *data); static void *eng_output_redraws_next_update_get(void *data, int *x, int *y, int *w, int *h, int *cx, int *cy, int *cw, int *ch); static void eng_output_redraws_next_update_push(void *data, void *surface, int x, int y, int w, int h); static void eng_output_flush(void *data); +static void eng_output_idle_flush(void *data); /* internal engine routines */ static void * @@ -374,6 +375,15 @@ eng_output_flush(void *data) evas_software_x11_outbuf_flush(re->ob); } +static void +eng_output_idle_flush(void *data) +{ + Render_Engine *re; + + re = (Render_Engine *)data; + evas_software_x11_outbuf_flush(re->ob); +} + /* module advertising code */ EAPI int @@ -398,6 +408,7 @@ module_open(Evas_Module *em) ORD(output_redraws_next_update_get); ORD(output_redraws_next_update_push); ORD(output_flush); + ORD(output_idle_flush); /* now advertise out own api */ em->functions = (void *)(&func); return 1; diff --git a/legacy/evas/src/modules/engines/software_xcb/evas_engine.c b/legacy/evas/src/modules/engines/software_xcb/evas_engine.c index b3c3c7d876..12bf5eb784 100644 --- a/legacy/evas/src/modules/engines/software_xcb/evas_engine.c +++ b/legacy/evas/src/modules/engines/software_xcb/evas_engine.c @@ -44,6 +44,7 @@ static void eng_output_redraws_clear(void *data); static void *eng_output_redraws_next_update_get(void *data, int *x, int *y, int *w, int *h, int *cx, int *cy, int *cw, int *ch); static void eng_output_redraws_next_update_push(void *data, void *surface, int x, int y, int w, int h); static void eng_output_flush(void *data); +static void eng_output_idle_flush(void *data); static void * _output_setup(int w, @@ -447,6 +448,14 @@ eng_output_flush(void *data) evas_software_xcb_outbuf_flush(re->ob); } +static void +eng_output_idle_flush(void *data) +{ + Render_Engine *re; + + re = (Render_Engine *)data; +} + /* module advertising code */ EAPI int module_open(Evas_Module *em) @@ -470,6 +479,7 @@ module_open(Evas_Module *em) ORD(output_redraws_next_update_get); ORD(output_redraws_next_update_push); ORD(output_flush); + ORD(output_idle_flush); /* now advertise out own api */ em->functions = (void *)(&func); return 1; diff --git a/legacy/evas/src/modules/engines/xrender_x11/evas_engine.c b/legacy/evas/src/modules/engines/xrender_x11/evas_engine.c index 9d99361eae..4591a4f011 100644 --- a/legacy/evas/src/modules/engines/xrender_x11/evas_engine.c +++ b/legacy/evas/src/modules/engines/xrender_x11/evas_engine.c @@ -311,6 +311,14 @@ eng_output_flush(void *data) _xr_image_info_pool_flush(re->xinf, 0, 0); } +static void +eng_output_idle_flush(void *data) +{ + Render_Engine *re; + + re = (Render_Engine *)data; +} + static void eng_rectangle_draw(void *data, void *context, void *surface, int x, int y, int w, int h) { @@ -878,6 +886,7 @@ module_open(Evas_Module *em) ORD(output_redraws_next_update_get); ORD(output_redraws_next_update_push); ORD(output_flush); + ORD(output_idle_flush); ORD(rectangle_draw); ORD(line_draw); ORD(polygon_draw);