Enlightenment CVS committal

Author  : sebastid
Project : e17
Module  : libs/ecore

Dir     : e17/libs/ecore/src/lib/ecore_file


Modified Files:
        Ecore_File.h Makefile.am ecore_file.c 
        ecore_file_monitor_dnotify.c ecore_file_monitor_fam.c 
        ecore_file_monitor_inotify.c ecore_file_monitor_poll.c 
        ecore_file_private.h 


Log Message:
Updates. Reduce polling time on no events.

===================================================================
RCS file: 
/cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_file/Ecore_File.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- Ecore_File.h        21 Feb 2005 16:03:06 -0000      1.2
+++ Ecore_File.h        22 Feb 2005 12:38:17 -0000      1.3
@@ -38,8 +38,8 @@
 EAPI int        ecore_file_mkpath   (const char *path);
 EAPI int        ecore_file_cp       (const char *src, const char *dst);
 EAPI char      *ecore_file_realpath (const char *file);
-EAPI char      *ecore_file_get_file (const char *path);
-EAPI char      *ecore_file_get_dir  (const char *path);
+EAPI char      *ecore_file_get_file (char *path);
+EAPI char      *ecore_file_get_dir  (char *path);
 
 EAPI int        ecore_file_can_exec (const char *file);
 EAPI char      *ecore_file_readlink (const char *link);
@@ -62,6 +62,7 @@
      ECORE_FILE_EVENT_CHANGED
 } Ecore_File_Event;
 
+#if 0
 struct _Ecore_File_Monitor {
      void (*func) (void *data,
                   Ecore_File_Monitor *ecore_file_monitor,
@@ -73,6 +74,7 @@
      Ecore_File_Type  type;
      void            *data;
 };
+#endif
 
 #if 0
 struct _Ecore_File_Monitor_Event {
@@ -94,5 +96,6 @@
                                                              const char *path),
                                                void *data);
 EAPI void                ecore_file_monitor_del(Ecore_File_Monitor 
*ecore_file_monitor);
+EAPI Ecore_File_Type     ecore_file_monitor_type_get(Ecore_File_Monitor 
*ecore_file_monitor);
 
 #endif
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_file/Makefile.am,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- Makefile.am 20 Feb 2005 12:17:07 -0000      1.1
+++ Makefile.am 22 Feb 2005 12:38:17 -0000      1.2
@@ -16,6 +16,7 @@
 libecore_file_la_SOURCES = \
 ecore_file.c \
 ecore_file_private.h \
+ecore_file_monitor.c \
 ecore_file_monitor_fam.c \
 ecore_file_monitor_inotify.c \
 ecore_file_monitor_dnotify.c \
@@ -31,6 +32,7 @@
 EXTRA_DIST = \
 ecore_file.c \
 ecore_file_private.h \
+ecore_file_monitor.c \
 ecore_file_monitor_fam.c \
 ecore_file_monitor_inotify.c \
 ecore_file_monitor_dnotify.c \
===================================================================
RCS file: 
/cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_file/ecore_file.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- ecore_file.c        21 Feb 2005 16:03:08 -0000      1.2
+++ ecore_file.c        22 Feb 2005 12:38:17 -0000      1.3
@@ -2,7 +2,6 @@
  * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
  */
 #include "ecore_file_private.h"
-#include "Ecore_File.h"
 
 /* externally accessible functions */
 int
@@ -116,7 +115,7 @@
 }
 
 char *
-ecore_file_get_file(const char *path)
+ecore_file_get_file(char *path)
 {
    char *result = NULL;
 
@@ -127,7 +126,7 @@
 }
 
 char *
-ecore_file_get_dir(const char *file)
+ecore_file_get_dir(char *file)
 {
    char               *p;
    char                buf[PATH_MAX];
===================================================================
RCS file: 
/cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_file/ecore_file_monitor_dnotify.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- ecore_file_monitor_dnotify.c        20 Feb 2005 12:17:07 -0000      1.1
+++ ecore_file_monitor_dnotify.c        22 Feb 2005 12:38:17 -0000      1.2
@@ -2,7 +2,6 @@
  * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
  */
 #include "ecore_file_private.h"
-#include "Ecore_File.h"
 
 /*
  * TODO:
===================================================================
RCS file: 
/cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_file/ecore_file_monitor_fam.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- ecore_file_monitor_fam.c    20 Feb 2005 12:17:07 -0000      1.1
+++ ecore_file_monitor_fam.c    22 Feb 2005 12:38:17 -0000      1.2
@@ -2,7 +2,6 @@
  * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
  */
 #include "ecore_file_private.h"
-#include "Ecore_File.h"
 
 /*
  * TODO:
===================================================================
RCS file: 
/cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_file/ecore_file_monitor_inotify.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- ecore_file_monitor_inotify.c        20 Feb 2005 12:17:07 -0000      1.1
+++ ecore_file_monitor_inotify.c        22 Feb 2005 12:38:17 -0000      1.2
@@ -2,7 +2,6 @@
  * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
  */
 #include "ecore_file_private.h"
-#include "Ecore_File.h"
 
 /*
  * TODO:
===================================================================
RCS file: 
/cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_file/ecore_file_monitor_poll.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -3 -r1.3 -r1.4
--- ecore_file_monitor_poll.c   21 Feb 2005 16:03:08 -0000      1.3
+++ ecore_file_monitor_poll.c   22 Feb 2005 12:38:17 -0000      1.4
@@ -2,7 +2,6 @@
  * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
  */
 #include "ecore_file_private.h"
-#include "Ecore_File.h"
 
 #ifdef HAVE_POLL
 
@@ -14,19 +13,8 @@
  * - Change poll time
  */
 
-typedef struct _Ecore_File_Monitor_Poll Ecore_File_Monitor_Poll;
 typedef struct _Ecore_File             Ecore_File;
 
-#define ECORE_FILE_MONITOR_POLL(x) ((Ecore_File_Monitor_Poll *)(x))
-
-struct _Ecore_File_Monitor_Poll
-{
-   Ecore_File_Monitor  monitor;
-   int                 mtime;
-   Evas_List          *files;
-   unsigned char       deleted;
-};
-
 struct _Ecore_File
 {
    char            *name;
@@ -34,6 +22,11 @@
    Ecore_File_Type  type;
 };
 
+#define ECORE_FILE_INTERVAL_MIN  1.0
+#define ECORE_FILE_INTERVAL_STEP 0.5
+#define ECORE_FILE_INTERVAL_MAX  5.0
+
+static double       _interval = ECORE_FILE_INTERVAL_MIN;
 static Ecore_Timer *_timer = NULL;
 static Evas_List   *_monitors = NULL;
 static int          _lock = 0;
@@ -78,18 +71,18 @@
                       void *data)
 {
    Ecore_File_Monitor *em;
-   Ecore_File_Monitor_Poll *emf;
    int len;
 
    if (!path) return NULL;
    if (!func) return NULL;
 
-   emf = calloc(1, sizeof(Ecore_File_Monitor_Poll));
-   em = ECORE_FILE_MONITOR(emf);
+   em = calloc(1, sizeof(Ecore_File_Monitor));
    if (!em) return NULL;
 
    if (!_timer)
-     _timer = ecore_timer_add(1.0, _ecore_file_monitor_handler, NULL);
+     _timer = ecore_timer_add(_interval, _ecore_file_monitor_handler, NULL);
+   else
+     ecore_timer_interval_set(_timer, ECORE_FILE_INTERVAL_MIN);
 
    em->path = strdup(path);
    len = strlen(em->path);
@@ -99,7 +92,7 @@
    em->func = func;
    em->data = data;
 
-   emf->mtime = ecore_file_mod_time(em->path);
+   em->mtime = ecore_file_mod_time(em->path);
    if (ecore_file_exists(em->path))
      {
        em->type = ecore_file_is_dir(em->path) ?
@@ -134,7 +127,7 @@
                            ECORE_FILE_TYPE_DIRECTORY :
                            ECORE_FILE_TYPE_FILE;
                  em->func(em->data, em, f->type, ECORE_FILE_EVENT_EXISTS, buf);
-                 emf->files = evas_list_append(emf->files, f);
+                 em->files = evas_list_append(em->files, f);
               }
             evas_list_free(files);
          }
@@ -153,25 +146,23 @@
 void
 ecore_file_monitor_del(Ecore_File_Monitor *em)
 {
-   Ecore_File_Monitor_Poll *emf;
    Evas_List *l;
 
-   emf = ECORE_FILE_MONITOR_POLL(em);
    if (_lock)
      {
-       emf->deleted = 1;
+       em->deleted = 1;
        return;
      }
 
    /* Remove files */
-   for (l = emf->files; l; l = l->next)
+   for (l = em->files; l; l = l->next)
      {
        Ecore_File *f;
        f = l->data;
        free(f->name);
        free(f);
      }
-   evas_list_free(emf->files);
+   evas_list_free(em->files);
 
    _monitors = evas_list_remove(_monitors, em);
    free(em->path);
@@ -182,6 +173,8 @@
        ecore_timer_del(_timer);
        _timer = NULL;
      }
+   else
+     ecore_timer_interval_set(_timer, ECORE_FILE_INTERVAL_MIN);
 }
 
 static int
@@ -189,6 +182,7 @@
 {
    Evas_List *monitor;
 
+   _interval += ECORE_FILE_INTERVAL_STEP;
    _lock = 1;
    for (monitor = _monitors; monitor;)
      {
@@ -199,15 +193,17 @@
        _ecore_file_monitor_check(em);
      }
    _lock = 0;
+   if (_interval > ECORE_FILE_INTERVAL_MAX)
+     _interval = ECORE_FILE_INTERVAL_MAX;
+   ecore_timer_interval_set(_timer, _interval);
+
    for (monitor = _monitors; monitor;)
      {
        Ecore_File_Monitor *em;
-       Ecore_File_Monitor_Poll *emf;
 
        em = monitor->data;
-       emf = ECORE_FILE_MONITOR_POLL(em);
        monitor = monitor->next;
-       if (emf->deleted)
+       if (em->deleted)
          ecore_file_monitor_del(em);
      }
    return 1;
@@ -216,30 +212,32 @@
 static void
 _ecore_file_monitor_check(Ecore_File_Monitor *em)
 {
-   Ecore_File_Monitor_Poll *emf;
    int mtime;
 
-   emf = ECORE_FILE_MONITOR_POLL(em);
    mtime = ecore_file_mod_time(em->path);
    switch (em->type)
      {
       case ECORE_FILE_TYPE_FILE:
-        if (mtime < emf->mtime)
+        if (mtime < em->mtime)
           {
              em->func(em->data, em, em->type, ECORE_FILE_EVENT_DELETED, 
em->path);
              em->type = ECORE_FILE_TYPE_NONE;
+             _interval = ECORE_FILE_INTERVAL_MIN;
+          }
+        else if (mtime > em->mtime)
+          {
+             em->func(em->data, em, em->type, ECORE_FILE_EVENT_CHANGED, 
em->path);
+             _interval = ECORE_FILE_INTERVAL_MIN;
           }
-        else if (mtime > emf->mtime)
-          em->func(em->data, em, em->type, ECORE_FILE_EVENT_CHANGED, em->path);
         break;
       case ECORE_FILE_TYPE_DIRECTORY:
-        if (mtime < emf->mtime)
+        if (mtime < em->mtime)
           {
              /* Deleted */
              Evas_List *l;
 
              /* Notify all files deleted */
-             for (l = emf->files; l;)
+             for (l = em->files; l;)
                {
                   Ecore_File *f;
                   char buf[PATH_MAX];
@@ -251,16 +249,17 @@
                   free(f->name);
                   free(f);
                }
-             emf->files = evas_list_free(emf->files);
+             em->files = evas_list_free(em->files);
              em->func(em->data, em, em->type, ECORE_FILE_EVENT_DELETED, 
em->path);
              em->type = ECORE_FILE_TYPE_NONE;
+             _interval = ECORE_FILE_INTERVAL_MIN;
           }
         else
           {
              Evas_List *l;
 
              /* Check for changed files */
-             for (l = emf->files; l;)
+             for (l = em->files; l;)
                {
                   Ecore_File *f;
                   char buf[PATH_MAX];
@@ -273,17 +272,21 @@
                   if (mtime < f->mtime)
                     {
                        em->func(em->data, em, f->type, 
ECORE_FILE_EVENT_DELETED, buf);
-                       emf->files = evas_list_remove(emf->files, f);
+                       em->files = evas_list_remove(em->files, f);
                        free(f->name);
                        free(f);
+                       _interval = ECORE_FILE_INTERVAL_MIN;
                     }
                   else if (mtime > f->mtime)
-                    em->func(em->data, em, f->type, ECORE_FILE_EVENT_CHANGED, 
buf);
+                    {
+                       em->func(em->data, em, f->type, 
ECORE_FILE_EVENT_CHANGED, buf);
+                       _interval = ECORE_FILE_INTERVAL_MIN;
+                    }
                   f->mtime = mtime;
                }
 
              /* Check for new files */
-             if (emf->mtime < mtime)
+             if (em->mtime < mtime)
                {
                   Evas_List *files;
 
@@ -316,14 +319,15 @@
                                  ECORE_FILE_TYPE_DIRECTORY :
                                  ECORE_FILE_TYPE_FILE;
                        em->func(em->data, em, f->type, 
ECORE_FILE_EVENT_CREATED, buf);
-                       emf->files = evas_list_append(emf->files, f);
+                       em->files = evas_list_append(em->files, f);
                     }
                   em->func(em->data, em, em->type, ECORE_FILE_EVENT_CHANGED, 
em->path);
+                  _interval = ECORE_FILE_INTERVAL_MIN;
                }
           }
         break;
       case ECORE_FILE_TYPE_NONE:
-        if (mtime > emf->mtime)
+        if (mtime > em->mtime)
           {
              /* Something has been created! */
              em->type = ecore_file_is_dir(em->path) ?
@@ -359,24 +363,23 @@
                           ECORE_FILE_TYPE_DIRECTORY :
                           ECORE_FILE_TYPE_FILE;
                        em->func(em->data, em, f->type, 
ECORE_FILE_EVENT_CREATED, buf);
-                       emf->files = evas_list_append(emf->files, f);
+                       em->files = evas_list_append(em->files, f);
                     }
                   evas_list_free(files);
                }
+             _interval = ECORE_FILE_INTERVAL_MIN;
           }
         break;
      }
-   emf->mtime = mtime;
+   em->mtime = mtime;
 }
 
 static int
 _ecore_file_monitor_checking(Ecore_File_Monitor *em, char *name)
 {
    Evas_List *l;
-   Ecore_File_Monitor_Poll *emf;
 
-   emf = ECORE_FILE_MONITOR_POLL(em);
-   for (l = emf->files; l; l = l->next)
+   for (l = em->files; l; l = l->next)
      {
        Ecore_File *f;
 
===================================================================
RCS file: 
/cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_file/ecore_file_private.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- ecore_file_private.h        20 Feb 2005 12:17:07 -0000      1.1
+++ ecore_file_private.h        22 Feb 2005 12:38:17 -0000      1.2
@@ -13,10 +13,29 @@
 #include "config.h"
 
 #include "Ecore.h"
+#include "Ecore_File.h"
 
 int ecore_file_monitor_init(void);
 int ecore_file_monitor_shutdown(void);
 
+struct _Ecore_File_Monitor
+{
+   void (*func) (void *data,
+                Ecore_File_Monitor *ecore_file_monitor,
+                Ecore_File_Type type,
+                Ecore_File_Event event,
+                const char *path);
+
+   char               *path;
+   Ecore_File_Type     type;
+   void               *data;
+   Evas_List          *files;
+#ifdef HAVE_POLL
+   int                 mtime;
+   unsigned char       deleted;
+#endif
+};
+
 /*
 #define HAVE_POLL
 #define HAVE_FAM




-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users.
Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to