raster pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=42f3b49d059295c28a7e12b04be9e973c9497660

commit 42f3b49d059295c28a7e12b04be9e973c9497660
Author: Carsten Haitzler (Rasterman) <ras...@rasterman.com>
Date:   Tue Apr 20 18:55:17 2021 +0100

    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

-- 


Reply via email to