summaryrefslogtreecommitdiff
path: root/src/lib/ecore_evas
diff options
context:
space:
mode:
authorGustavo Sverzut Barbieri <barbieri@gmail.com>2013-01-11 18:55:06 +0000
committerGustavo Sverzut Barbieri <barbieri@gmail.com>2013-01-11 18:55:06 +0000
commit72eaa99676ec862898ac365f6a0608a050cc5b07 (patch)
tree69e28e54dbb304da2d32c6771364be80dd8d5ed6 /src/lib/ecore_evas
parent0f5bf5197f2fffa3b6d02bf1f3119f6b92384118 (diff)
ecore_evas async render watchdog.
it is very unlikely to be ecore_evas problem, but here it goes: a watch dog that checks if they are stuck and resets if so. SVN revision: 82657
Diffstat (limited to 'src/lib/ecore_evas')
-rw-r--r--src/lib/ecore_evas/ecore_evas.c43
-rw-r--r--src/lib/ecore_evas/ecore_evas_private.h4
2 files changed, 47 insertions, 0 deletions
diff --git a/src/lib/ecore_evas/ecore_evas.c b/src/lib/ecore_evas/ecore_evas.c
index 893f9d517b..800a6ff8fd 100644
--- a/src/lib/ecore_evas/ecore_evas.c
+++ b/src/lib/ecore_evas/ecore_evas.c
@@ -45,6 +45,9 @@ _ecore_evas_idle_enter(void *data EINA_UNUSED)
45 double t1 = 0.0; 45 double t1 = 0.0;
46 double t2 = 0.0; 46 double t2 = 0.0;
47 int rend = 0; 47 int rend = 0;
48#ifdef ECORE_EVAS_ASYNC_RENDER_DEBUG
49 double now = ecore_loop_time_get();
50#endif
48 51
49 if (!ecore_evases) return ECORE_CALLBACK_RENEW; 52 if (!ecore_evases) return ECORE_CALLBACK_RENEW;
50 if (_ecore_evas_fps_debug) 53 if (_ecore_evas_fps_debug)
@@ -53,11 +56,51 @@ _ecore_evas_idle_enter(void *data EINA_UNUSED)
53 } 56 }
54 EINA_INLIST_FOREACH(ecore_evases, ee) 57 EINA_INLIST_FOREACH(ecore_evases, ee)
55 { 58 {
59#ifdef ECORE_EVAS_ASYNC_RENDER_DEBUG
60 if ((ee->in_async_render) && (now - ee->async_render_start > 2.0))
61 {
62 ERR("stuck async render: time=%f, ee=%p, engine=%s, geometry=(%d, %d, %d, %d), visible=%hhu, shaped=%hhu, alpha=%hhu, transparent=%hhu",
63 now - ee->async_render_start, ee, ee->driver, ee->x, ee->y, ee->w, ee->h, ee->visible, ee->shaped, ee->alpha, ee->transparent);
64
65 ERR("delayed.avoid_damage=%hhu", ee->delayed.avoid_damage);
66 ERR("delayed.resize_shape=%hhu", ee->delayed.resize_shape);
67 ERR("delayed.shaped=%hhu", ee->delayed.shaped);
68 ERR("delayed.shaped_changed=%hhu", ee->delayed.shaped_changed);
69 ERR("delayed.alpha=%hhu", ee->delayed.alpha);
70 ERR("delayed.alpha_changed=%hhu", ee->delayed.alpha_changed);
71 ERR("delayed.transparent=%hhu", ee->delayed.transparent);
72 ERR("delayed.transparent_changed=%hhu", ee->delayed.transparent_changed);
73 ERR("delayed.rotation=%d", ee->delayed.rotation);
74 ERR("delayed.rotation_resize=%d", ee->delayed.rotation_resize);
75 ERR("delayed.rotation_changed=%d", ee->delayed.rotation_changed);
76
77 ERR("reset in_async_render of ee=%p", ee);
78 ee->in_async_render = EINA_FALSE;
79 ee->async_render_start = 0.0;
80
81 }
82 else if ((!ee->in_async_render) && (ee->async_render_start > 0.0))
83 {
84 DBG("--- async render %f ee=%p [%s] (%d, %d, %d, %d) visible=%hhu shaped=%hhu alpha=%hhu transparent=%hhu",
85 now, ee, ee->driver, ee->x, ee->y, ee->w, ee->h, ee->visible, ee->shaped, ee->alpha, ee->transparent);
86 ee->async_render_start = 0.0;
87 }
88#endif
89
56 if (!ee->manual_render) 90 if (!ee->manual_render)
57 { 91 {
58 if (ee->engine.func->fn_render) 92 if (ee->engine.func->fn_render)
59 rend |= ee->engine.func->fn_render(ee); 93 rend |= ee->engine.func->fn_render(ee);
60 } 94 }
95
96#ifdef ECORE_EVAS_ASYNC_RENDER_DEBUG
97 if ((ee->in_async_render) && (ee->async_render_start <= 0.0))
98 {
99 DBG("+++ async render %f ee=%p [%s] (%d, %d, %d, %d) visible=%hhu shaped=%hhu alpha=%hhu transparent=%hhu",
100 now, ee, ee->driver, ee->x, ee->y, ee->w, ee->h, ee->visible, ee->shaped, ee->alpha, ee->transparent);
101 ee->async_render_start = now;
102 }
103#endif
61 } 104 }
62 if (_ecore_evas_fps_debug) 105 if (_ecore_evas_fps_debug)
63 { 106 {
diff --git a/src/lib/ecore_evas/ecore_evas_private.h b/src/lib/ecore_evas/ecore_evas_private.h
index 612f7eaeba..23d5f3c913 100644
--- a/src/lib/ecore_evas/ecore_evas_private.h
+++ b/src/lib/ecore_evas/ecore_evas_private.h
@@ -319,6 +319,10 @@ struct _Ecore_Evas
319 } delayed; 319 } delayed;
320 320
321 int refcount; 321 int refcount;
322#define ECORE_EVAS_ASYNC_RENDER_DEBUG 1 /* TODO: remove me */
323#ifdef ECORE_EVAS_ASYNC_RENDER_DEBUG
324 double async_render_start;
325#endif
322 326
323 unsigned char ignore_events : 1; 327 unsigned char ignore_events : 1;
324 unsigned char manual_render : 1; 328 unsigned char manual_render : 1;