From: Gwanglim Lee Date: Fri, 17 Mar 2017 12:36:25 +0000 (+0900) Subject: rotation: added norender pop timer to avoid black screen problem X-Git-Tag: submit/tizen/20170330.110355~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=b81b7b28a96abfe07d9c9a32e4d379ef6ca87576;p=platform%2Fcore%2Fuifw%2Fe-mod-tizen-effect.git rotation: added norender pop timer to avoid black screen problem Change-Id: I11bc656ac5d8990b807cb8814e9d2c7e09287e3e --- diff --git a/src/e_mod_effect_rotation.c b/src/e_mod_effect_rotation.c index 2aad4a7..0cfbefa 100644 --- a/src/e_mod_effect_rotation.c +++ b/src/e_mod_effect_rotation.c @@ -53,6 +53,7 @@ typedef struct _Rotation_Effect Eina_Bool running; Eina_Bool wait_for_buffer; Eina_Bool norender; + Ecore_Timer *norender_timer; } Rotation_Effect; typedef struct _Rotation_Zone @@ -669,6 +670,21 @@ _rotation_effect_animator_cb_update(void *data, double pos) return ECORE_CALLBACK_RENEW; } +static Eina_Bool +_norender_timer_timeout(void *data) +{ + Rotation_Effect *effect = (Rotation_Effect *)data; + + effect->norender_timer = NULL; + effect->norender = EINA_FALSE; + + EFFINF("EFF norender pop - timeout", NULL, NULL); + + e_comp_canvas_norender_pop(); + + return ECORE_CALLBACK_CANCEL; +} + static void _rotation_effect_start(Rotation_Effect *effect) { @@ -680,8 +696,15 @@ _rotation_effect_start(Rotation_Effect *effect) */ if (effect->norender) { - e_comp_canvas_norender_pop(); + if (effect->norender_timer) + ecore_timer_del(effect->norender_timer); + + effect->norender_timer = NULL; effect->norender = EINA_FALSE; + + EFFINF("EFF norender pop - start", NULL, NULL); + + e_comp_canvas_norender_pop(); } EFFINF("Rotation Effect Start", NULL, NULL); @@ -730,7 +753,17 @@ _rotation_effect_animator_begin_prepare(Rotation_Effect *effect, E_Desk *desk) */ if (!effect->norender) { + EFFINF("EFF norender push ", NULL, NULL); + e_comp_canvas_norender_push(); + + if (effect->norender_timer) + ecore_timer_del(effect->norender_timer); + + effect->norender_timer = ecore_timer_add(1.0f, + _norender_timer_timeout, + effect); + effect->norender = EINA_TRUE; } } @@ -844,8 +877,15 @@ _rotation_effect_cb_zone_rotation_cancel(void *data, int type, void *event) if (effect->norender) { - e_comp_canvas_norender_pop(); + if (effect->norender_timer) + ecore_timer_del(effect->norender_timer); + + effect->norender_timer = NULL; effect->norender = EINA_FALSE; + + EFFINF("EFF norender pop - cancel", NULL, NULL); + + e_comp_canvas_norender_pop(); } _rotation_effect_clear(effect); @@ -953,6 +993,17 @@ _rotation_effect_free(Rotation_Effect *effect) { if (!effect) return; + if (effect->norender_timer) + ecore_timer_del(effect->norender_timer); + effect->norender_timer = NULL; + if (effect->norender) + { + EFFINF("EFF norender pop - free", NULL, NULL); + + e_comp_canvas_norender_pop(); + } + effect->norender = EINA_FALSE; + _rotation_effect_clear(effect); evas_object_del(effect->bg); E_FREE(effect);