discomfitor pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=2acb5e506aa02ef73281c3b63ac21422bf996a9b

commit 2acb5e506aa02ef73281c3b63ac21422bf996a9b
Author: Mike Blumenkrantz <[email protected]>
Date:   Tue Jun 19 13:33:14 2018 -0400

    eio: add method for setting the global file polling rate for fallback 
monitors
    
    Summary:
    the default value for the fallback poll monitor timer interval is 60.0 
seconds,
    which is not useful for all cases, such as CI, where we don't care about cpu
    usage and just want things to process as fast as possible at all times
    
    this enables setting the interval to any value, ensuring that any existing
    timers are modified to use that value immediately
    
    @feature
    
    Reviewers: stefan_schmidt, bu5hm4n, raster, devilhorns, ManMower
    
    Reviewed By: bu5hm4n, ManMower
    
    Subscribers: ManMower, raster, bu5hm4n, cedric, #committers
    
    Tags: #efl
    
    Differential Revision: https://phab.enlightenment.org/D6247
---
 src/lib/eio/Eio.h              |  9 +++++++++
 src/lib/eio/eio_monitor_poll.c | 30 ++++++++++++++++++++++++++++--
 2 files changed, 37 insertions(+), 2 deletions(-)

diff --git a/src/lib/eio/Eio.h b/src/lib/eio/Eio.h
index 2a446d6ed4..cc986938dd 100644
--- a/src/lib/eio/Eio.h
+++ b/src/lib/eio/Eio.h
@@ -120,6 +120,15 @@ static inline Eina_Bool eio_file_is_dir(const Eina_Stat 
*stat);
  */
 static inline Eina_Bool eio_file_is_lnk(const Eina_Stat *stat);
 
+/**
+ * @ingroup Eio
+ *
+ * @brief Set the polling interval to control the fallback monitor behavior
+ * @param interval The interval (in seconds) to poll
+ * @since 1.21
+ */
+EAPI void eio_monitoring_interval_set(double interval);
+
 #include "eio_inline_helper.x"
 
 #define EIO_VERSION_MAJOR EFL_VERSION_MAJOR
diff --git a/src/lib/eio/eio_monitor_poll.c b/src/lib/eio/eio_monitor_poll.c
index fc4b70e8c5..be27eaaf75 100644
--- a/src/lib/eio/eio_monitor_poll.c
+++ b/src/lib/eio/eio_monitor_poll.c
@@ -54,6 +54,9 @@ struct _Eio_Monitor_Backend
    Eina_Bool destroyed : 1;
 };
 
+static double fallback_interval = 60.0;
+static Eina_Hash *timer_hash;
+
 static Eina_Bool _eio_monitor_fallback_timer_cb(void *data);
 
 static void
@@ -217,7 +220,8 @@ _eio_monitor_fallback_end_cb(void *data, Ecore_Thread 
*thread EINA_UNUSED)
    Eio_Monitor_Backend *backend = data;
 
    backend->work = NULL;
-   backend->timer = ecore_timer_add(60.0, _eio_monitor_fallback_timer_cb, 
backend);
+   backend->timer = ecore_timer_add(fallback_interval, 
_eio_monitor_fallback_timer_cb, backend);
+   eina_hash_set(timer_hash, &backend, backend->timer);
 }
 
 static void
@@ -231,7 +235,8 @@ _eio_monitor_fallback_cancel_cb(void *data, Ecore_Thread 
*thread EINA_UNUSED)
         free(backend);
         return;
      }
-   backend->timer = ecore_timer_add(60.0, _eio_monitor_fallback_timer_cb, 
backend);
+   backend->timer = ecore_timer_add(fallback_interval, 
_eio_monitor_fallback_timer_cb, backend);
+   eina_hash_set(timer_hash, &backend, backend->timer);
 }
 
 static Eina_Bool
@@ -253,6 +258,7 @@ _eio_monitor_fallback_timer_cb(void *data)
    Eio_Monitor_Backend *backend = data;
 
    backend->timer = NULL;
+   eina_hash_set(timer_hash, &backend, NULL);
    backend->idler = ecore_idler_add(_eio_monitor_fallback_idler_cb, backend);
 
    return EINA_FALSE;
@@ -274,10 +280,13 @@ _eio_monitor_fallback_timer_cb(void *data)
     && !defined HAVE_NOTIFY_KEVENT
 void eio_monitor_backend_init(void)
 {
+   timer_hash = eina_hash_pointer_new(NULL);
 }
 
 void eio_monitor_backend_shutdown(void)
 {
+   eina_hash_free(timer_hash);
+   timer_hash = NULL;
 }
 
 void eio_monitor_backend_add(Eio_Monitor *monitor)
@@ -333,6 +342,7 @@ eio_monitor_fallback_del(Eio_Monitor *monitor)
    if (backend->work) ecore_thread_cancel(backend->work);
 
    if (backend->timer) ecore_timer_del(backend->timer);
+   eina_hash_set(timer_hash, &backend, NULL);
    backend->timer = NULL;
    if (backend->idler) ecore_idler_del(backend->idler);
    backend->idler = NULL;
@@ -356,3 +366,19 @@ eio_monitor_fallback_del(Eio_Monitor *monitor)
 /*============================================================================*
  *                                   API                                      *
  
*============================================================================*/
+
+
+EAPI void
+eio_monitoring_interval_set(double interval)
+{
+   Eina_Iterator *it;
+   Ecore_Timer *timer;
+
+   EINA_SAFETY_ON_TRUE_RETURN(interval < 0.0);
+   fallback_interval = interval;
+   if (!timer_hash) return;
+   it = eina_hash_iterator_data_new(timer_hash);
+   EINA_ITERATOR_FOREACH(it, timer)
+     ecore_timer_interval_set(timer, fallback_interval);
+   eina_iterator_free(it);
+}

-- 


Reply via email to