From 0f5bf5197f2fffa3b6d02bf1f3119f6b92384118 Mon Sep 17 00:00:00 2001 From: Gustavo Sverzut Barbieri Date: Fri, 11 Jan 2013 18:45:10 +0000 Subject: [PATCH] ecore_evas_x: add some debug to help find out e_border problems. EDBG macro is at level 5 to avoid messing existing debugs, use it like: export EINA_LOG_LEVELS=ecore_evas:5 SVN revision: 82656 --- .../ecore_evas/engines/x/ecore_evas_x.c | 33 ++++++++++++------- 1 file changed, 22 insertions(+), 11 deletions(-) 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 2663fb2c3e..56cb3fd9a8 100644 --- a/src/modules/ecore_evas/engines/x/ecore_evas_x.c +++ b/src/modules/ecore_evas/engines/x/ecore_evas_x.c @@ -22,6 +22,10 @@ # include #endif +#define EDBG(...) \ + EINA_LOG(_ecore_evas_log_dom, EINA_LOG_LEVEL_DBG + 1, __VA_ARGS__); + + static int _ecore_evas_init_count = 0; static Ecore_Event_Handler *ecore_evas_event_handlers[13]; @@ -575,10 +579,12 @@ _ecore_evas_x_render_updates(void *data, Evas *e EINA_UNUSED, void *event_info) Ecore_Evas *ee = data; Eina_List *updates = event_info; - _render_updates_process(ee, updates); + EDBG("ee=%p finished asynchronous render.", ee); ee->in_async_render = EINA_FALSE; + _render_updates_process(ee, updates); + if (ee->delayed.resize_shape) { _resize_shape_do(ee); @@ -621,6 +627,12 @@ _ecore_evas_x_render(Ecore_Evas *ee) (!edata->sync_cancel)) return 0; + if (ee->in_async_render) + { + EDBG("ee=%p is rendering asynchronously, skip.", ee); + return 0; + } + EINA_LIST_FOREACH(ee->sub_ecore_evas, ll, ee2) { if (ee2->func.fn_pre_render) ee2->func.fn_pre_render(ee2); @@ -630,19 +642,18 @@ _ecore_evas_x_render(Ecore_Evas *ee) } if (ee->func.fn_pre_render) ee->func.fn_pre_render(ee); - if (ee->can_async_render) + if (!ee->can_async_render) { - ee->in_async_render |= evas_render_async(ee->evas, - _ecore_evas_x_render_updates, - ee); - rend |= ee->in_async_render; - } - else - { - Eina_List *updates; - updates = evas_render_updates(ee->evas); + Eina_List *updates = evas_render_updates(ee->evas); rend = _render_updates_process(ee, updates); } + else if (evas_render_async(ee->evas, _ecore_evas_x_render_updates, ee)) + { + EDBG("ee=%p started asynchronous render.", ee); + ee->in_async_render = EINA_TRUE; + rend = 1; + } + return rend; }