From 42f3b49d059295c28a7e12b04be9e973c9497660 Mon Sep 17 00:00:00 2001 From: "Carsten Haitzler (Rasterman)" Date: Tue, 20 Apr 2021 18:55:17 +0100 Subject: [PATCH] elm win - fix eval to not be delayed after shows and state changes this allows insgtant response to being de-iconified which mean instant beginniung of rendering. we should enable this by default too so modify config to do just that. this basically means if a window is iconified, efl will not render to it to save power/effort. it'll start again when it de-iconifies --- data/elementary/config/default/base.src.in | 8 ++++---- data/elementary/config/mobile/base.src.in | 6 +++--- data/elementary/config/standard/base.src.in | 6 +++--- src/lib/elementary/efl_ui_win.c | 22 +++++++++++++-------- 4 files changed, 24 insertions(+), 18 deletions(-) diff --git a/data/elementary/config/default/base.src.in b/data/elementary/config/default/base.src.in index 9a12e52bcb..1ea9e29b96 100644 --- a/data/elementary/config/default/base.src.in +++ b/data/elementary/config/default/base.src.in @@ -90,12 +90,12 @@ group "Elm_Config" struct { value "year_min" int: 2; value "year_max" int: 137; value "softcursor_mode" uchar: 0; - value "auto_norender_withdrawn" uchar: 0; - value "auto_norender_iconified_same_as_withdrawn" uchar: 0; - value "auto_flush_withdrawn" uchar: 0; + value "auto_norender_withdrawn" uchar: 1; + value "auto_norender_iconified_same_as_withdrawn" uchar: 1; + value "auto_flush_withdrawn" uchar: 1; value "auto_dump_withdrawn" uchar: 0; value "auto_throttle" uchar: 0; - value "auto_throttle_amount" double: 0.1; + value "auto_throttle_amount" double: 0.03333333333; value "magnifier_enable" uchar: 1; value "magnifier_scale" double: 1.5; value "audio_mute_effect" uchar: 0; diff --git a/data/elementary/config/mobile/base.src.in b/data/elementary/config/mobile/base.src.in index 5c9ba5a333..0b031fd577 100644 --- a/data/elementary/config/mobile/base.src.in +++ b/data/elementary/config/mobile/base.src.in @@ -89,9 +89,9 @@ group "Elm_Config" struct { value "auto_norender_withdrawn" uchar: 1; value "auto_norender_iconified_same_as_withdrawn" uchar: 1; value "auto_flush_withdrawn" uchar: 1; - value "auto_dump_withdrawn" uchar: 1; - value "auto_throttle" uchar: 1; - value "auto_throttle_amount" double: 0.0666666666; + value "auto_dump_withdrawn" uchar: 0; + value "auto_throttle" uchar: 0; + value "auto_throttle_amount" double: 0.03333333333; value "indicator_service_0" string: "elm_indicator_portrait"; value "indicator_service_90" string: "elm_indicator_landscape"; value "indicator_service_180" string: "elm_indicator_portrait"; diff --git a/data/elementary/config/standard/base.src.in b/data/elementary/config/standard/base.src.in index 2e868cd9e1..c1c835782f 100644 --- a/data/elementary/config/standard/base.src.in +++ b/data/elementary/config/standard/base.src.in @@ -87,10 +87,10 @@ group "Elm_Config" struct { value "year_min" int: 2; value "year_max" int: 137; value "softcursor_mode" uchar: 0; - value "auto_norender_withdrawn" uchar: 0; - value "auto_norender_iconified_same_as_withdrawn" uchar: 0; + value "auto_norender_withdrawn" uchar: 1; + value "auto_norender_iconified_same_as_withdrawn" uchar: 1; value "auto_flush_withdrawn" uchar: 1; - value "auto_dump_withdrawn" uchar: 1; + value "auto_dump_withdrawn" uchar: 0; value "auto_throttle" uchar: 0; value "auto_throttle_amount" double: 0.0333333333; value "magnifier_enable" uchar: 0; diff --git a/src/lib/elementary/efl_ui_win.c b/src/lib/elementary/efl_ui_win.c index 4dfbbe2d1c..0b24fa0d92 100644 --- a/src/lib/elementary/efl_ui_win.c +++ b/src/lib/elementary/efl_ui_win.c @@ -371,6 +371,7 @@ static int _elm_win_count = 0; static Eina_Bool _elm_win_auto_throttled = EINA_FALSE; +static Eina_Bool _elm_win_state_eval_timer_now = EINA_FALSE; static Ecore_Timer *_elm_win_state_eval_timer = NULL; static void _elm_win_legacy_init(Efl_Ui_Win_Data *sd); @@ -658,6 +659,7 @@ _elm_win_state_eval(void *data EINA_UNUSED) int _elm_win_count_withdrawn = 0; Eina_Bool throttle = EINA_FALSE; + _elm_win_state_eval_timer_now = EINA_FALSE; _elm_win_state_eval_timer = NULL; EINA_LIST_FOREACH(_elm_win_list, l, obj) @@ -674,7 +676,6 @@ _elm_win_state_eval(void *data EINA_UNUSED) elm_win_norender_push(obj); evas_object_data_set(obj, "__win_auto_norender", obj); - if (_elm_config->auto_flush_withdrawn) { edje_file_cache_flush(); @@ -779,10 +780,15 @@ _elm_win_flush_cache_and_exit(Eo *obj) } static void -_elm_win_state_eval_queue(void) +_elm_win_state_eval_queue(Eina_Bool now) { + if ((_elm_win_state_eval_timer_now) && (_elm_win_state_eval_timer)) return; if (_elm_win_state_eval_timer) ecore_timer_del(_elm_win_state_eval_timer); - _elm_win_state_eval_timer = ecore_timer_add(0.5, _elm_win_state_eval, NULL); + if (now) + _elm_win_state_eval_timer = ecore_timer_add(0.0, _elm_win_state_eval, NULL); + else + _elm_win_state_eval_timer = ecore_timer_add(0.5, _elm_win_state_eval, NULL); + _elm_win_state_eval_timer_now = now; } // example shot spec (wait 0.1 sec then save as my-window.png): @@ -1850,7 +1856,7 @@ _elm_win_state_change(Ecore_Evas *ee) } } - _elm_win_state_eval_queue(); + _elm_win_state_eval_queue(EINA_TRUE); if ((ch_withdrawn) || (ch_minimized)) { @@ -2618,7 +2624,7 @@ _efl_ui_win_hide(Eo *obj, Efl_Ui_Win_Data *sd) return; } - _elm_win_state_eval_queue(); + _elm_win_state_eval_queue(EINA_FALSE); if ((sd->modal) && (evas_object_visible_get(obj))) _elm_win_modality_decrement(sd); @@ -3113,7 +3119,7 @@ _efl_ui_win_efl_canvas_group_group_del(Eo *obj, Efl_Ui_Win_Data *sd) _elm_win_list = eina_list_remove(_elm_win_list, obj); _elm_win_count--; - _elm_win_state_eval_queue(); + _elm_win_state_eval_queue(EINA_FALSE); if (_elm_win_count == _paused_windows) efl_event_callback_call(efl_loop_get(obj), EFL_APP_EVENT_PAUSE, NULL); @@ -5003,7 +5009,7 @@ _elm_win_cb_hide(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { - _elm_win_state_eval_queue(); + _elm_win_state_eval_queue(EINA_FALSE); } static void @@ -5012,7 +5018,7 @@ _elm_win_cb_show(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { - _elm_win_state_eval_queue(); + _elm_win_state_eval_queue(EINA_TRUE); } static inline Eina_Bool