From 203932fed9920486433d03e2bb757e1d965b6d31 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Fri, 2 Oct 2015 13:49:57 -0400 Subject: [PATCH] move client post-update adding into render function in some cases, it's possible for a client which expects to render on the next frame to actually render on the frame after. in these cases, the compositor must not clear the pixmap image until after the render has occurred in order to avoid inaccuracies. for this reason, the best place to flag a client for post-render work is at the time of the client's render ref T2762 ref D3120 --- src/bin/e_comp.c | 13 +++---------- src/bin/e_comp_object.c | 5 +++++ 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/src/bin/e_comp.c b/src/bin/e_comp.c index 51464091c..09e928009 100644 --- a/src/bin/e_comp.c +++ b/src/bin/e_comp.c @@ -307,14 +307,13 @@ _e_comp_cb_nocomp_begin_timeout(void *data) } -static Eina_Bool +static void _e_comp_client_update(E_Client *ec) { int pw, ph; - Eina_Bool post = EINA_FALSE; DBG("UPDATE [%p] pm = %p", ec, ec->pixmap); - if (e_object_is_del(E_OBJECT(ec))) return EINA_FALSE; + if (e_object_is_del(E_OBJECT(ec))) return; e_pixmap_size_get(ec->pixmap, &pw, &ph); @@ -327,7 +326,6 @@ _e_comp_client_update(E_Client *ec) e_pixmap_size_changed(ec->pixmap, pw, ph)) { e_pixmap_image_clear(ec->pixmap, 0); - post = EINA_TRUE; e_comp_object_render_update_del(ec->frame); //clear update } else if (!e_pixmap_size_get(ec->pixmap, NULL, NULL)) @@ -346,7 +344,6 @@ _e_comp_client_update(E_Client *ec) if (e_pixmap_is_x(ec->pixmap) && (!ec->override)) evas_object_resize(ec->frame, ec->w, ec->h); } - return post || (!e_pixmap_is_x(ec->pixmap)); } static void @@ -398,11 +395,7 @@ _e_comp_cb_update(E_Comp *c) { /* clear update flag */ e_comp_object_render_update_del(ec->frame); - if (_e_comp_client_update(ec)) - { - c->post_updates = eina_list_append(c->post_updates, ec); - e_object_ref(E_OBJECT(ec)); - } + _e_comp_client_update(ec); } _e_comp_fps_update(c); if (conf->fps_show) diff --git a/src/bin/e_comp_object.c b/src/bin/e_comp_object.c index ca3207408..8a139a3e3 100644 --- a/src/bin/e_comp_object.c +++ b/src/bin/e_comp_object.c @@ -3484,6 +3484,11 @@ end: eina_iterator_free(it); E_FREE_FUNC(cw->pending_updates, eina_tiler_free); + if (ret) + { + cw->comp->post_updates = eina_list_append(cw->comp->post_updates, cw->ec); + e_object_ref(E_OBJECT(cw->ec)); + } return ret; }