cedric pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=da8efae8c0a3938e08d80e0d5367bb6228107094
commit da8efae8c0a3938e08d80e0d5367bb6228107094 Author: Cedric BAIL <ced...@osg.samsung.com> Date: Fri Apr 28 13:28:43 2017 -0700 ecore_evas: refactor ecore_evas buffer render logic. First step into introducing async rendering for ecore_evas buffer. --- src/lib/ecore_evas/ecore_evas_buffer.c | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/src/lib/ecore_evas/ecore_evas_buffer.c b/src/lib/ecore_evas/ecore_evas_buffer.c index 4910c07..7c38157 100644 --- a/src/lib/ecore_evas/ecore_evas_buffer.c +++ b/src/lib/ecore_evas/ecore_evas_buffer.c @@ -141,7 +141,7 @@ _ecore_evas_buffer_name_class_set(Ecore_Evas *ee, const char *n, const char *c) static int _ecore_evas_buffer_render(Ecore_Evas *ee) { - Eina_List *updates = NULL, *l, *ll; + Eina_List *updates = NULL, *ll; Ecore_Evas_Engine_Buffer_Data *bdata; Ecore_Evas *ee2; int rend = 0; @@ -171,15 +171,6 @@ _ecore_evas_buffer_render(Ecore_Evas *ee) updates = evas_render_updates(ee->evas); bdata->in_render = 0; } - if (bdata->image) - { - Eina_Rectangle *r; - - evas_object_image_data_set(bdata->image, bdata->pixels); - EINA_LIST_FOREACH(updates, l, r) - evas_object_image_data_update_add(bdata->image, - r->x, r->y, r->w, r->h); - } if (updates) { evas_render_updates_free(updates); @@ -191,6 +182,20 @@ _ecore_evas_buffer_render(Ecore_Evas *ee) return updates ? 1 : rend; } +static void +_ecore_evas_buffer_update_image(void *data, Evas *e EINA_UNUSED, void *event_info) +{ + Evas_Event_Render_Post *post = event_info; + Ecore_Evas_Engine_Buffer_Data *bdata = data; + Eina_Rectangle *r; + Eina_List *l; + + evas_object_image_data_set(bdata->image, bdata->pixels); + EINA_LIST_FOREACH(post->updated_area, l, r) + evas_object_image_data_update_add(bdata->image, + r->x, r->y, r->w, r->h); +} + EAPI int ecore_evas_buffer_render(Ecore_Evas *ee) { @@ -930,6 +935,7 @@ ecore_evas_object_image_new(Ecore_Evas *ee_target) evas_output_method_set(ee->evas, rmethod); evas_output_size_set(ee->evas, w, h); evas_output_viewport_set(ee->evas, 0, 0, w, h); + evas_event_callback_add(ee->evas, EVAS_CALLBACK_RENDER_POST, _ecore_evas_buffer_update_image, bdata); bdata->image = o; evas_object_data_set(bdata->image, "Ecore_Evas", ee); --