Hi,

KDE currently uses polling to detect file and directory changes on
FreeBSD, which can use up cpu time (and laptop battery power). The
kded4 process seems to make heavy use of this and currently
continuously consumes about 5% of my cpu and often causes it to be
throttled up by powerd.

I've attached a patch that makes KDE use QFileSystemWatcher on FreeBSD
which uses kqueue instead of stat. I've been using it for the past few
days and it seems to work rather well.

One thing I'm not sure about is whether it works with NFS, so it could
use some more testing. If you'd like to test it, replace
/usr/ports/x11/kdelibs4/files/patch-kio-kio-kdirwatch.cpp with the
attached patch and reinstall kdelibs.
--- kio/CMakeLists.txt.orig     2010-06-24 14:08:17.000000000 +0200
+++ kio/CMakeLists.txt  2010-06-24 14:08:42.000000000 +0200
@@ -28,11 +28,9 @@
 
 check_include_files(sys/inotify.h SYS_INOTIFY_H_FOUND)
 macro_bool_to_01(SYS_INOTIFY_H_FOUND HAVE_SYS_INOTIFY_H)
-if(WIN32)
- # currently for win32 only --> enable it for all in 4.1?
- option(USE_QFILESYSTEMWATCHER "Use QFileSystemWatcher instead polling for 
KDirWatch" ON)
- macro_bool_to_01(USE_QFILESYSTEMWATCHER HAVE_QFILESYSTEMWATCHER)
-endif(WIN32)
+
+option(USE_QFILESYSTEMWATCHER "Use QFileSystemWatcher instead polling for 
KDirWatch" ON)
+macro_bool_to_01(USE_QFILESYSTEMWATCHER HAVE_QFILESYSTEMWATCHER)
 
 configure_file(kio/config-kdirwatch.h.cmake 
${CMAKE_CURRENT_BINARY_DIR}/kio/config-kdirwatch.h )
 configure_file(kio/config-strigi.h.cmake 
${CMAKE_CURRENT_BINARY_DIR}/kio/config-strigi.h )
--- kio/kio/kdirwatch.cpp.orig  2010-02-26 19:30:10.000000000 +0100
+++ kio/kio/kdirwatch.cpp       2010-06-24 14:46:54.000000000 +0200
@@ -91,12 +91,10 @@
   } else if (method == "QFSWatch") {
     return KDirWatchPrivate::QFSWatch;
   } else {
-#ifdef Q_OS_WIN
-    return KDirWatchPrivate::QFSWatch;
-#elif defined(Q_OS_FREEBSD)
-    return KDirWatchPrivate::Stat;
-#else
+#ifdef Q_OS_LINUX
     return KDirWatchPrivate::INotify;
+#else
+    return KDirWatchPrivate::QFSWatch;
 #endif
   }
 }
--- kio/kio/kdirwatch_p.h.orig  2010-06-24 15:21:37.000000000 +0200
+++ kio/kio/kdirwatch_p.h       2010-06-24 15:21:58.000000000 +0200
@@ -102,7 +102,7 @@
   QHash<QString,QFileSystemWatcher*> m_paths;
 };
 #else
-typedef KFileSystemWatcher QFileSystemWatcher;
+typedef QFileSystemWatcher KFileSystemWatcher;
 #endif
 #endif
 
_______________________________________________
kde-freebsd mailing list
kde-freebsd@kde.org
https://mail.kde.org/mailman/listinfo/kde-freebsd
See also http://freebsd.kde.org/ for latest information

Reply via email to