raster pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=9149767184bfa9b64102eaea89f6733351de71e9

commit 9149767184bfa9b64102eaea89f6733351de71e9
Author: Carsten Haitzler (Rasterman) <[email protected]>
Date:   Thu Aug 8 23:55:40 2019 +0100

    getenv - reduce continually calling getenv for the same vars do once
    
    do it once and remember the result from the first one. drops overhead
    for sure by a chunk i actually could see in perf reports like about 1-2%
    of cpu...
---
 src/lib/edje/edje_cache.c                          |   9 +-
 src/lib/eina/eina_mempool.c                        |   9 +-
 src/lib/eio/eio_monitor.c                          |   9 +-
 src/lib/elementary/elm_config.c                    | 210 ++++++++++++---------
 src/lib/evas/file/evas_module.c                    |  41 ++--
 .../evas/engines/gl_common/evas_gl_texture.c       |   9 +-
 6 files changed, 178 insertions(+), 109 deletions(-)

diff --git a/src/lib/edje/edje_cache.c b/src/lib/edje/edje_cache.c
index 23ced3c684..97d82ba58d 100644
--- a/src/lib/edje/edje_cache.c
+++ b/src/lib/edje/edje_cache.c
@@ -104,7 +104,14 @@ _edje_programs_patterns_init(Edje_Part_Collection *edc)
    if (ssp->signals_patterns)
      return;
 
-   if (getenv("EDJE_DUMP_PROGRAMS"))
+   static signed char dump_programs = -1;
+
+   if (dump_programs == -1)
+     {
+        if (getenv("EDJE_DUMP_PROGRAMS")) dump_programs = 1;
+        else dump_programs = 0;
+     }
+   if (dump_programs == 1)
      {
         INF("Group '%s' programs:", edc->part);
 #define EDJE_DUMP_PROGRAM(Section)                    \
diff --git a/src/lib/eina/eina_mempool.c b/src/lib/eina/eina_mempool.c
index a6d0d18fe2..56144a0f1c 100644
--- a/src/lib/eina/eina_mempool.c
+++ b/src/lib/eina/eina_mempool.c
@@ -68,7 +68,14 @@ _new_va(const char *name,
    Eina_Mempool_Backend *be;
    Eina_Mempool *mp = NULL;
 
-   if (getenv("EINA_MEMPOOL_PASS"))
+   static signed char mempool_pass = -1;
+
+   if (mempool_pass == -1)
+     {
+        if (getenv("EINA_MEMPOOL_PASS")) mempool_pass = 1;
+        else mempool_pass = 0;
+     }
+   if (mempool_pass == 1)
      {
         be = eina_hash_find(_backends, "pass_through");
         if (!be) be = eina_hash_find(_backends, name);
diff --git a/src/lib/eio/eio_monitor.c b/src/lib/eio/eio_monitor.c
index 84262bb329..bc1ed07db0 100644
--- a/src/lib/eio/eio_monitor.c
+++ b/src/lib/eio/eio_monitor.c
@@ -371,7 +371,14 @@ eio_monitor_stringshared_add(const char *path)
 
    EINA_REFCOUNT_INIT(monitor);
 
-   if (getenv("EIO_MONITOR_POLL"))
+   static signed char monpoll = -1;
+
+   if (monpoll == -1)
+     {
+        if (getenv("EIO_MONITOR_POLL")) monpoll = 1;
+        else monpoll = 0;
+     }
+   if (monpoll)
      eio_monitor_fallback_add(monitor);
    else
      eio_monitor_backend_add(monitor);
diff --git a/src/lib/elementary/elm_config.c b/src/lib/elementary/elm_config.c
index c6da38ed27..e663ea5b24 100644
--- a/src/lib/elementary/elm_config.c
+++ b/src/lib/elementary/elm_config.c
@@ -634,6 +634,35 @@ end:
    return off;
 }
 
+static Eina_Hash *_getenv_once_envs = NULL;
+static const char *_getenv_once_empty = "";
+
+static const char *
+_getenv_once(const char *env)
+{
+   const char *s;
+
+   if (_getenv_once_envs)
+     {
+        s = eina_hash_find(_getenv_once_envs, env);
+        if (s == _getenv_once_empty) return NULL;
+        if (s) return s;
+     }
+   else _getenv_once_envs = eina_hash_string_superfast_new(NULL);
+   s = getenv(env);
+   if (s)
+     {
+        s = eina_stringshare_add(s);
+        eina_hash_add(_getenv_once_envs, env, s);
+        return s;
+     }
+   else
+     {
+        eina_hash_add(_getenv_once_envs, env, _getenv_once_empty);
+     }
+   return NULL;
+}
+
 size_t
 _elm_config_user_dir_snprintf(char       *dst,
                               size_t      size,
@@ -647,7 +676,7 @@ _elm_config_user_dir_snprintf(char       *dst,
 
    if (use_xdg_config == -1)
      {
-        if (getenv("ELM_CONFIG_DIR_XDG")) use_xdg_config = 1;
+        if (_getenv_once("ELM_CONFIG_DIR_XDG")) use_xdg_config = 1;
         else use_xdg_config = 0;
      }
    if (use_xdg_config)
@@ -1443,12 +1472,13 @@ list_free:
 static void
 _profile_fetch_from_conf(void)
 {
-   char buf[PATH_MAX], *p, *s;
+   char buf[PATH_MAX], *p;
+   const char *s;
    Eet_File *ef = NULL;
    int len = 0, i;
 
    // if env var - use profile without question
-   s = getenv("ELM_PROFILE");
+   s = _getenv_once("ELM_PROFILE");
    if (s)
      {
         _elm_profile = strdup(s);
@@ -2091,7 +2121,7 @@ _elm_config_profile_save(const char *profile)
    Eet_File *ef;
    size_t len;
 
-   if (_use_build_config || ((s = getenv("ELM_PROFILE_NOSAVE")) && atoi(s)))
+   if (_use_build_config || ((s = _getenv_once("ELM_PROFILE_NOSAVE")) && 
atoi(s)))
      return EINA_TRUE;
 
    len = _elm_config_user_dir_snprintf(buf, sizeof(buf), "config/profile.cfg");
@@ -2404,10 +2434,10 @@ _config_update(void)
 static void
 _env_get(void)
 {
-   char *s;
+   const char *s;
    double friction;
 
-   s = getenv("ELM_ENGINE");
+   s = _getenv_once("ELM_ENGINE");
    if (s)
      {
         if ((!strcasecmp(s, "x11")) ||
@@ -2464,47 +2494,47 @@ _env_get(void)
           eina_stringshare_replace(&_elm_preferred_engine, 
_elm_config->engine);
      }
 
-   s = getenv("ELM_VSYNC");
+   s = _getenv_once("ELM_VSYNC");
    if (s) _elm_config->vsync = !!atoi(s);
 
-   s = getenv("ELM_THUMBSCROLL_ENABLE");
+   s = _getenv_once("ELM_THUMBSCROLL_ENABLE");
    if (s) _elm_config->thumbscroll_enable = !!atoi(s);
-   s = getenv("ELM_THUMBSCROLL_THRESHOLD");
+   s = _getenv_once("ELM_THUMBSCROLL_THRESHOLD");
    if (s) _elm_config->thumbscroll_threshold = atoi(s);
-   s = getenv("ELM_THUMBSCROLL_HOLD_THRESHOLD");
+   s = _getenv_once("ELM_THUMBSCROLL_HOLD_THRESHOLD");
    if (s) _elm_config->thumbscroll_hold_threshold = atoi(s);
    // FIXME: floatformat locale issues here 1.0 vs 1,0 - should just be 1.0
-   s = getenv("ELM_THUMBSCROLL_MOMENTUM_THRESHOLD");
+   s = _getenv_once("ELM_THUMBSCROLL_MOMENTUM_THRESHOLD");
    if (s) _elm_config->thumbscroll_momentum_threshold = _elm_atof(s);
-   s = getenv("ELM_THUMBSCROLL_FLICK_DISTANCE_TOLERANCE");
+   s = _getenv_once("ELM_THUMBSCROLL_FLICK_DISTANCE_TOLERANCE");
    if (s) _elm_config->thumbscroll_flick_distance_tolerance = atoi(s);
-   s = getenv("ELM_THUMBSCROLL_MOMENTUM_DISTANCE_MAX");
+   s = _getenv_once("ELM_THUMBSCROLL_MOMENTUM_DISTANCE_MAX");
    if (s) _elm_config->thumbscroll_momentum_distance_max = atoi(s);
-   s = getenv("ELM_THUMBSCROLL_FRICTION");
+   s = _getenv_once("ELM_THUMBSCROLL_FRICTION");
    if (s) _elm_config->thumbscroll_friction = _elm_atof(s);
-   s = getenv("ELM_THUMBSCROLL_MOMENTUM_FRICTION");
+   s = _getenv_once("ELM_THUMBSCROLL_MOMENTUM_FRICTION");
    if (s) _elm_config->thumbscroll_momentum_friction = _elm_atof(s);
-   s = getenv("ELM_THUMBSCROLL_MIN_FRICTION");
+   s = _getenv_once("ELM_THUMBSCROLL_MIN_FRICTION");
    if (s) _elm_config->thumbscroll_min_friction = _elm_atof(s);
-   s = getenv("ELM_THUMBSCROLL_FRICTION_STANDARD");
+   s = _getenv_once("ELM_THUMBSCROLL_FRICTION_STANDARD");
    if (s) _elm_config->thumbscroll_friction_standard = _elm_atof(s);
-   s = getenv("ELM_THUMBSCROLL_BOUNCE_ENABLE");
+   s = _getenv_once("ELM_THUMBSCROLL_BOUNCE_ENABLE");
    if (s) _elm_config->thumbscroll_bounce_enable = !!atoi(s);
-   s = getenv("ELM_THUMBSCROLL_BOUNCE_FRICTION");
+   s = _getenv_once("ELM_THUMBSCROLL_BOUNCE_FRICTION");
    if (s) _elm_config->thumbscroll_bounce_friction = _elm_atof(s);
-   s = getenv("ELM_THUMBSCROLL_ACCELERATION_THRESHOLD");
+   s = _getenv_once("ELM_THUMBSCROLL_ACCELERATION_THRESHOLD");
    if (s) _elm_config->thumbscroll_acceleration_threshold = _elm_atof(s);
-   s = getenv("ELM_THUMBSCROLL_ACCELERATION_TIME_LIMIT");
+   s = _getenv_once("ELM_THUMBSCROLL_ACCELERATION_TIME_LIMIT");
    if (s) _elm_config->thumbscroll_acceleration_time_limit = _elm_atof(s);
-   s = getenv("ELM_THUMBSCROLL_ACCELERATION_WEIGHT");
+   s = _getenv_once("ELM_THUMBSCROLL_ACCELERATION_WEIGHT");
    if (s) _elm_config->thumbscroll_acceleration_weight = _elm_atof(s);
-   s = getenv("ELM_PAGE_SCROLL_FRICTION");
+   s = _getenv_once("ELM_PAGE_SCROLL_FRICTION");
    if (s) _elm_config->page_scroll_friction = _elm_atof(s);
-   s = getenv("ELM_BRING_IN_SCROLL_FRICTION");
+   s = _getenv_once("ELM_BRING_IN_SCROLL_FRICTION");
    if (s) _elm_config->bring_in_scroll_friction = _elm_atof(s);
-   s = getenv("ELM_ZOOM_FRICTION");
+   s = _getenv_once("ELM_ZOOM_FRICTION");
    if (s) _elm_config->zoom_friction = _elm_atof(s);
-   s = getenv("ELM_THUMBSCROLL_BORDER_FRICTION");
+   s = _getenv_once("ELM_THUMBSCROLL_BORDER_FRICTION");
    if (s)
      {
         friction = _elm_atof(s);
@@ -2516,7 +2546,7 @@ _env_get(void)
 
         _elm_config->thumbscroll_border_friction = friction;
      }
-   s = getenv("ELM_THUMBSCROLL_SENSITIVITY_FRICTION");
+   s = _getenv_once("ELM_THUMBSCROLL_SENSITIVITY_FRICTION");
    if (s)
      {
         friction = _elm_atof(s);
@@ -2528,23 +2558,23 @@ _env_get(void)
 
         _elm_config->thumbscroll_sensitivity_friction = friction;
      }
-   s = getenv("ELM_SCROLL_SMOOTH_START_ENABLE");
+   s = _getenv_once("ELM_SCROLL_SMOOTH_START_ENABLE");
    if (s) _elm_config->scroll_smooth_start_enable = !!atoi(s);
-   s = getenv("ELM_SCROLL_ANIMATION_DISABLE");
+   s = _getenv_once("ELM_SCROLL_ANIMATION_DISABLE");
    if (s) _elm_config->scroll_animation_disable = !!atoi(s);
-   s = getenv("ELM_SCROLL_ACCEL_FACTOR");
+   s = _getenv_once("ELM_SCROLL_ACCEL_FACTOR");
    if (s) _elm_config->scroll_accel_factor = atof(s);
-//   s = getenv("ELM_SCROLL_SMOOTH_TIME_INTERVAL"); // not used anymore
+//   s = _getenv_once("ELM_SCROLL_SMOOTH_TIME_INTERVAL"); // not used anymore
 //   if (s) _elm_config->scroll_smooth_time_interval = atof(s); // not used 
anymore
-   s = getenv("ELM_SCROLL_SMOOTH_AMOUNT");
+   s = _getenv_once("ELM_SCROLL_SMOOTH_AMOUNT");
    if (s) _elm_config->scroll_smooth_amount = _elm_atof(s);
-//   s = getenv("ELM_SCROLL_SMOOTH_HISTORY_WEIGHT"); // not used anymore
+//   s = _getenv_once("ELM_SCROLL_SMOOTH_HISTORY_WEIGHT"); // not used anymore
 //   if (s) _elm_config->scroll_smooth_history_weight = _elm_atof(s); // not 
used anymore
-//   s = getenv("ELM_SCROLL_SMOOTH_FUTURE_TIME"); // not used anymore
+//   s = _getenv_once("ELM_SCROLL_SMOOTH_FUTURE_TIME"); // not used anymore
 //   if (s) _elm_config->scroll_smooth_future_time = _elm_atof(s); // not used 
anymore
-   s = getenv("ELM_SCROLL_SMOOTH_TIME_WINDOW");
+   s = _getenv_once("ELM_SCROLL_SMOOTH_TIME_WINDOW");
    if (s) _elm_config->scroll_smooth_time_window = _elm_atof(s);
-   s = getenv("ELM_FOCUS_AUTOSCROLL_MODE");
+   s = _getenv_once("ELM_FOCUS_AUTOSCROLL_MODE");
    if (s)
      {
         if (!strcmp(s, "ELM_FOCUS_AUTOSCROLL_MODE_NONE"))
@@ -2554,7 +2584,7 @@ _env_get(void)
         else
           _elm_config->focus_autoscroll_mode = ELM_FOCUS_AUTOSCROLL_MODE_SHOW;
      }
-   s = getenv("ELM_SLIDER_INDICATOR_VISIBLE_MODE");
+   s = _getenv_once("ELM_SLIDER_INDICATOR_VISIBLE_MODE");
    if (s)
      {
         if (!strcmp(s, "ELM_SLIDER_INDICATOR_VISIBLE_MODE_DEFAULT"))
@@ -2566,10 +2596,10 @@ _env_get(void)
         else
           _elm_config->slider_indicator_visible_mode = 
ELM_SLIDER_INDICATOR_VISIBLE_MODE_NONE;
      }
-   s = getenv("ELM_THEME");
+   s = _getenv_once("ELM_THEME");
    if (s) eina_stringshare_replace(&_elm_config->theme, s);
 
-   s = getenv("ELM_FONT_HINTING");
+   s = _getenv_once("ELM_FONT_HINTING");
    if (s)
      {
         if      (!strcasecmp(s, "none")) _elm_config->font_hinting = 0;
@@ -2579,7 +2609,7 @@ _env_get(void)
           _elm_config->font_hinting = 2;
      }
 
-   s = getenv("ELM_FONT_PATH");
+   s = _getenv_once("ELM_FONT_PATH");
    if (s)
      {
         const char *p, *pp;
@@ -2617,22 +2647,22 @@ _env_get(void)
           }
      }
 
-   s = getenv("ELM_IMAGE_CACHE");
+   s = _getenv_once("ELM_IMAGE_CACHE");
    if (s) _elm_config->image_cache = atoi(s);
 
-   s = getenv("ELM_FONT_CACHE");
+   s = _getenv_once("ELM_FONT_CACHE");
    if (s) _elm_config->font_cache = atoi(s);
 
-   s = getenv("ELM_SCALE");
+   s = _getenv_once("ELM_SCALE");
    if (s) _elm_config->scale = _elm_atof(s);
 
-   s = getenv("ELM_FINGER_SIZE");
+   s = _getenv_once("ELM_FINGER_SIZE");
    if (s) _elm_config->finger_size = atoi(s);
 
-   s = getenv("ELM_PASSWORD_SHOW_LAST");
+   s = _getenv_once("ELM_PASSWORD_SHOW_LAST");
    if (s) _elm_config->password_show_last = !!atoi(s);
 
-   s = getenv("ELM_PASSWORD_SHOW_LAST_TIMEOUT");
+   s = _getenv_once("ELM_PASSWORD_SHOW_LAST_TIMEOUT");
    if (s)
      {
         double pw_show_last_timeout = _elm_atof(s);
@@ -2640,14 +2670,14 @@ _env_get(void)
           _elm_config->password_show_last_timeout = pw_show_last_timeout;
      }
 
-   s = getenv("ELM_FPS");
+   s = _getenv_once("ELM_FPS");
    if (s) _elm_config->fps = _elm_atof(s);
    if (_elm_config->fps < 1.0) _elm_config->fps = 1.0;
 
-   s = getenv("ELM_MODULES");
+   s = _getenv_once("ELM_MODULES");
    if (s) eina_stringshare_replace(&_elm_config->modules, s);
 
-   s = getenv("ELM_TOOLTIP_DELAY");
+   s = _getenv_once("ELM_TOOLTIP_DELAY");
    if (s)
      {
         double delay = _elm_atof(s);
@@ -2655,113 +2685,113 @@ _env_get(void)
           _elm_config->tooltip_delay = delay;
      }
 
-   s = getenv("ELM_CURSOR_ENGINE_ONLY");
+   s = _getenv_once("ELM_CURSOR_ENGINE_ONLY");
    if (s) _elm_config->cursor_engine_only = !!atoi(s);
 
-   s = getenv("ELM_FOCUS_HIGHLIGHT_ENABLE");
+   s = _getenv_once("ELM_FOCUS_HIGHLIGHT_ENABLE");
    if (s) _elm_config->focus_highlight_enable = !!atoi(s);
 
-   s = getenv("ELM_FOCUS_HIGHLIGHT_ANIMATE");
+   s = _getenv_once("ELM_FOCUS_HIGHLIGHT_ANIMATE");
    if (s) _elm_config->focus_highlight_animate = !!atoi(s);
 
-   s = getenv("ELM_FOCUS_HIGHLIGHT_CLIP_DISABLE");
+   s = _getenv_once("ELM_FOCUS_HIGHLIGHT_CLIP_DISABLE");
    if (s) _elm_config->focus_highlight_clip_disable = !!atoi(s);
 
-   s = getenv("ELM_FOCUS_MOVE_POLICY");
+   s = _getenv_once("ELM_FOCUS_MOVE_POLICY");
    if (s) _elm_config->focus_move_policy = !!atoi(s);
 
-   s = getenv("ELM_ITEM_SELECT_ON_FOCUS_DISABLE");
+   s = _getenv_once("ELM_ITEM_SELECT_ON_FOCUS_DISABLE");
    if (s) _elm_config->item_select_on_focus_disable = !!atoi(s);
 
-   s = getenv("ELM_FIRST_ITEM_FOCUS_ON_FIRST_FOCUS_IN");
+   s = _getenv_once("ELM_FIRST_ITEM_FOCUS_ON_FIRST_FOCUS_IN");
    if (s) _elm_config->first_item_focus_on_first_focus_in = !!atoi(s);
 
-   s = getenv("ELM_TOOLBAR_SHRINK_MODE");
+   s = _getenv_once("ELM_TOOLBAR_SHRINK_MODE");
    if (s) _elm_config->toolbar_shrink_mode = atoi(s);
 
-   s = getenv("ELM_FILESELECTOR_EXPAND_ENABLE");
+   s = _getenv_once("ELM_FILESELECTOR_EXPAND_ENABLE");
    if (s) _elm_config->fileselector_expand_enable = !!atoi(s);
 
-   s = getenv("ELM_FILESELECTOR_DOUBLE_TAP_NAVIGATION_ENABLE");
+   s = _getenv_once("ELM_FILESELECTOR_DOUBLE_TAP_NAVIGATION_ENABLE");
    if (s) _elm_config->fileselector_double_tap_navigation_enable = !!atoi(s);
 
-   s = getenv("ELM_INWIN_DIALOGS_ENABLE");
+   s = _getenv_once("ELM_INWIN_DIALOGS_ENABLE");
    if (s) _elm_config->inwin_dialogs_enable = !!atoi(s);
 
-   s = getenv("ELM_ICON_SIZE");
+   s = _getenv_once("ELM_ICON_SIZE");
    if (s) _elm_config->icon_size = atoi(s);
 
-   s = getenv("ELM_CONTEXT_MENU_DISABLED");
+   s = _getenv_once("ELM_CONTEXT_MENU_DISABLED");
    if (s) _elm_config->context_menu_disabled = !!atoi(s);
 
-   s = getenv("ELM_LONGPRESS_TIMEOUT");
+   s = _getenv_once("ELM_LONGPRESS_TIMEOUT");
    if (s) _elm_config->longpress_timeout = _elm_atof(s);
    if (_elm_config->longpress_timeout < 0.0)
      _elm_config->longpress_timeout = 0.0;
 
-   s = getenv("ELM_EFFECT_ENABLE");
+   s = _getenv_once("ELM_EFFECT_ENABLE");
    if (s) _elm_config->effect_enable = !!atoi(s);
 
-   s = getenv("ELM_DESKTOP_ENTRY");
+   s = _getenv_once("ELM_DESKTOP_ENTRY");
    if (s) _elm_config->desktop_entry = !!atoi(s);
-   s = getenv("ELM_ACCESS_MODE");
+   s = _getenv_once("ELM_ACCESS_MODE");
    if (s) _elm_config->access_mode = ELM_ACCESS_MODE_ON;
 
-   s = getenv("ELM_SELECTION_CLEAR_ENABLE");
+   s = _getenv_once("ELM_SELECTION_CLEAR_ENABLE");
    if (s) _elm_config->selection_clear_enable = !!atoi(s);
 
-   s = getenv("ELM_AUTO_THROTTLE");
+   s = _getenv_once("ELM_AUTO_THROTTLE");
    if (s) _elm_config->auto_throttle = EINA_TRUE;
-   s = getenv("ELM_AUTO_THROTTLE_AMOUNT");
+   s = _getenv_once("ELM_AUTO_THROTTLE_AMOUNT");
    if (s) _elm_config->auto_throttle_amount = _elm_atof(s);
-   s = getenv("ELM_AUTO_NORENDER_WITHDRAWN");
+   s = _getenv_once("ELM_AUTO_NORENDER_WITHDRAWN");
    if (s) _elm_config->auto_norender_withdrawn = EINA_TRUE;
-   s = getenv("ELM_AUTO_NORENDER_ICONIFIED_SAME_AS_WITHDRAWN");
+   s = _getenv_once("ELM_AUTO_NORENDER_ICONIFIED_SAME_AS_WITHDRAWN");
    if (s) _elm_config->auto_norender_iconified_same_as_withdrawn = EINA_TRUE;
-   s = getenv("ELM_AUTO_FLUSH_WITHDRAWN");
+   s = _getenv_once("ELM_AUTO_FLUSH_WITHDRAWN");
    if (s) _elm_config->auto_flush_withdrawn = EINA_TRUE;
-   s = getenv("ELM_AUTO_DUMP_WIDTHDRAWN");
+   s = _getenv_once("ELM_AUTO_DUMP_WIDTHDRAWN");
    if (s) _elm_config->auto_dump_withdrawn = EINA_TRUE;
 
-   s = getenv("ELM_INDICATOR_SERVICE_0");
+   s = _getenv_once("ELM_INDICATOR_SERVICE_0");
    if (s) eina_stringshare_replace(&_elm_config->indicator_service_0, s);
-   s = getenv("ELM_INDICATOR_SERVICE_90");
+   s = _getenv_once("ELM_INDICATOR_SERVICE_90");
    if (s) eina_stringshare_replace(&_elm_config->indicator_service_90, s);
-   s = getenv("ELM_INDICATOR_SERVICE_180");
+   s = _getenv_once("ELM_INDICATOR_SERVICE_180");
    if (s) eina_stringshare_replace(&_elm_config->indicator_service_180, s);
-   s = getenv("ELM_INDICATOR_SERVICE_270");
+   s = _getenv_once("ELM_INDICATOR_SERVICE_270");
    if (s) eina_stringshare_replace(&_elm_config->indicator_service_270, s);
-   s = getenv("ELM_DISABLE_EXTERNAL_MENU");
+   s = _getenv_once("ELM_DISABLE_EXTERNAL_MENU");
    if (s) _elm_config->disable_external_menu = !!atoi(s);
 
-   s = getenv("ELM_CLOUSEAU");
+   s = _getenv_once("ELM_CLOUSEAU");
    if (s) _elm_config->clouseau_enable = atoi(s);
-   s = getenv("ELM_MAGNIFIER_ENABLE");
+   s = _getenv_once("ELM_MAGNIFIER_ENABLE");
    if (s) _elm_config->magnifier_enable = !!atoi(s);
-   s = getenv("ELM_MAGNIFIER_SCALE");
+   s = _getenv_once("ELM_MAGNIFIER_SCALE");
    if (s) _elm_config->magnifier_scale = _elm_atof(s);
-   s = getenv("ELM_ATSPI_MODE");
+   s = _getenv_once("ELM_ATSPI_MODE");
    if (s) _elm_config->atspi_mode = ELM_ATSPI_MODE_ON;
-   s = getenv("ELM_SPINNER_MIN_MAX_FILTER_ENABLE");
+   s = _getenv_once("ELM_SPINNER_MIN_MAX_FILTER_ENABLE");
    if (s) _elm_config->spinner_min_max_filter_enable = !!atoi(s);
 
-   s = getenv("ELM_TRANSITION_DURATION_FACTOR");
+   s = _getenv_once("ELM_TRANSITION_DURATION_FACTOR");
    if (s) _elm_config->transition_duration_factor = atof(s);
 
-   s = getenv("ELM_POPUP_HORIZONTAL_ALIGN");
+   s = _getenv_once("ELM_POPUP_HORIZONTAL_ALIGN");
    if (s) _elm_config->popup_horizontal_align = _elm_atof(s);
-   s = getenv("ELM_POPUP_VERTICAL_ALIGN");
+   s = _getenv_once("ELM_POPUP_VERTICAL_ALIGN");
    if (s) _elm_config->popup_vertical_align = _elm_atof(s);
-   s = getenv("ELM_POPUP_SCROLLABLE");
+   s = _getenv_once("ELM_POPUP_SCROLLABLE");
    if (s) _elm_config->popup_scrollable = atoi(s);
 
-   s = getenv("ELM_GLAYER_TAP_FINGER_SIZE");
+   s = _getenv_once("ELM_GLAYER_TAP_FINGER_SIZE");
    if (s) _elm_config->glayer_tap_finger_size = atoi(s);
 
-   s = getenv("EFL_UI_DND_DRAG_ANIM_DURATION");
+   s = _getenv_once("EFL_UI_DND_DRAG_ANIM_DURATION");
    if (s) _elm_config->drag_anim_duration = _elm_atof(s);
 
-   s = getenv("ELM_WIN_NO_BORDER");
+   s = _getenv_once("ELM_WIN_NO_BORDER");
    if (s) _elm_config->win_no_border = EINA_TRUE;
 }
 
diff --git a/src/lib/evas/file/evas_module.c b/src/lib/evas/file/evas_module.c
index b467ebcdbf..a1e8b623af 100644
--- a/src/lib/evas/file/evas_module.c
+++ b/src/lib/evas/file/evas_module.c
@@ -116,7 +116,14 @@ evas_module_paths_init(void)
    if (getuid() == geteuid())
 #endif
      {
-        if (getenv("EFL_RUN_IN_TREE"))
+        static signed char run_in_tree = -1;
+
+        if (run_in_tree == -1)
+          {
+             if (getenv("EFL_RUN_IN_TREE")) run_in_tree = 1;
+             else run_in_tree = 0;
+          }
+        if (run_in_tree == 1)
           {
              struct stat st;
              const char mp[] = PACKAGE_BUILD_DIR"/src/modules/evas";
@@ -432,9 +439,13 @@ evas_module_engine_list(void)
    const char *s, *s2;
    char buf[PATH_MAX];
 #ifdef NEED_RUN_IN_TREE
-   Eina_Bool run_in_tree;
+   static signed char run_in_tree = -1;
 
-   run_in_tree = !!getenv("EFL_RUN_IN_TREE");
+   if (run_in_tree == -1)
+     {
+        if (getenv("EFL_RUN_IN_TREE")) run_in_tree = 1;
+        else run_in_tree = 0;
+     }
 #endif
 
    EINA_LIST_FOREACH(evas_module_paths, l, s)
@@ -455,7 +466,7 @@ evas_module_engine_list(void)
                   if (getuid() == geteuid())
 #endif
                     {
-                       if (run_in_tree)
+                       if (run_in_tree == 1)
                          {
                             bs_mod_dir_get(buf, sizeof(buf), "evas/engines", 
fname);
                             if (!evas_file_path_exists(buf))
@@ -549,7 +560,13 @@ evas_module_find_type(Evas_Module_Type type, const char 
*name)
    Eina_Module *en;
    Eina_List *l;
 #ifdef NEED_RUN_IN_TREE
-   Eina_Bool run_in_tree;
+   static signed char run_in_tree = -1;
+
+   if (run_in_tree == -1)
+     {
+        if (getenv("EFL_RUN_IN_TREE")) run_in_tree = 1;
+        else run_in_tree = 0;
+     }
 #endif
 
    if ((unsigned int)type > 5) return NULL;
@@ -561,10 +578,6 @@ evas_module_find_type(Evas_Module_Type type, const char 
*name)
         return NULL;
      }
 
-#ifdef NEED_RUN_IN_TREE
-   run_in_tree = !!getenv("EFL_RUN_IN_TREE");
-#endif
-
    EINA_LIST_FOREACH(evas_module_paths, l, path)
      {
         const char *type_str = "unknown";
@@ -584,7 +597,7 @@ evas_module_find_type(Evas_Module_Type type, const char 
*name)
         if (getuid() == geteuid())
 #endif
           {
-             if (run_in_tree)
+             if (run_in_tree == 1)
                {
                   char subsystem[PATH_MAX];
 
@@ -700,7 +713,7 @@ evas_module_clean(void)
 {
    static int call_count = 0;
 /*    int ago; */
-   int noclean = -1;
+   static signed char noclean = -1;
 /*    Eina_List *l; */
 /*    Evas_Module *em; */
 
@@ -711,10 +724,8 @@ evas_module_clean(void)
 
    if (noclean == -1)
      {
-        if (getenv("EVAS_NOCLEAN"))
-          noclean = 1;
-        else
-          noclean = 0;
+        if (getenv("EVAS_NOCLEAN")) noclean = 1;
+        else noclean = 0;
      }
    if (noclean == 1) return;
 
diff --git a/src/modules/evas/engines/gl_common/evas_gl_texture.c 
b/src/modules/evas/engines/gl_common/evas_gl_texture.c
index cc5ed6bd13..ef99962261 100644
--- a/src/modules/evas/engines/gl_common/evas_gl_texture.c
+++ b/src/modules/evas/engines/gl_common/evas_gl_texture.c
@@ -180,7 +180,14 @@ evas_gl_common_gl_format_to_colorspace(GLuint f)
 static void
 _print_tex_count(void)
 {
-   if (getenv("EVAS_GL_MEMINFO"))
+   static signed char printit = -1;
+
+   if (printit == -1)
+     {
+        if (getenv("EVAS_GL_MEMINFO")) printit = 1;
+        else printit = 0;
+     }
+   if (printit == 1)
      {
         fprintf(stderr,
                 "T: c:%i/%ik | a:%i/%ik | v:%i/%ik | r:%i/%ik | n:%i/%ik | 
d:%i/%ik\n",

-- 


Reply via email to