summaryrefslogtreecommitdiff
path: root/kde-unstable/kdebase-runtime/fix-nepomuk-cpu-usage.patch
blob: 545072807dff50cb097c5f640bba530f5de659a7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
commit 327ec9a67af653467b670115ebb3e26b00183c1d
Author: Sebastian Trueg <trueg@kde.org>
Date:   Thu Jul 7 17:33:23 2011 +0200

    Throttle the IndexCleaner the same way we do with the IndexScheduler.
    
    BUG: 276593

diff --git a/nepomuk/services/strigi/indexcleaner.cpp b/nepomuk/services/strigi/indexcleaner.cpp
index 5c604ab..9198d0b 100644
--- a/nepomuk/services/strigi/indexcleaner.cpp
+++ b/nepomuk/services/strigi/indexcleaner.cpp
@@ -47,7 +47,8 @@ using namespace Soprano::Vocabulary;
 
 
 Nepomuk::IndexCleaner::IndexCleaner(QObject* parent)
-    : KJob(parent)
+    : KJob(parent),
+      m_delay(0)
 {
     setCapabilities( Suspendable );
 }
@@ -268,7 +269,7 @@ void Nepomuk::IndexCleaner::slotRemoveResourcesDone(KJob* job)
 
     QMutexLocker lock(&m_stateMutex);
     if( !m_suspended ) {
-        clearNextBatch();
+        QTimer::singleShot(m_delay, this, SLOT(clearNextBatch()));
     }
 }
 
@@ -313,4 +314,9 @@ bool Nepomuk::IndexCleaner::doResume()
     return true;
 }
 
+void Nepomuk::IndexCleaner::setDelay(int msecs)
+{
+    m_delay = msecs;
+}
+
 #include "indexcleaner.moc"
diff --git a/nepomuk/services/strigi/indexcleaner.h b/nepomuk/services/strigi/indexcleaner.h
index e1c38ca..bf0713e 100644
--- a/nepomuk/services/strigi/indexcleaner.h
+++ b/nepomuk/services/strigi/indexcleaner.h
@@ -41,6 +41,16 @@ namespace Nepomuk {
         virtual bool doSuspend();
         virtual bool doResume();
 
+    public slots:
+        /**
+         * Set the delay between the cleanup queries.
+         * Used for throtteling the cleaner to not grab too
+         * many resources. Default is 0.
+         *
+         * \sa IndexScheduler::setIndexingSpeed()
+         */
+        void setDelay(int msecs);
+
     private slots:
         void clearNextBatch();
         void slotRemoveResourcesDone(KJob* job);
@@ -52,6 +62,7 @@ namespace Nepomuk {
 
         QMutex m_stateMutex;
         bool m_suspended;
+        int m_delay;
     };
 }
 
diff --git a/nepomuk/services/strigi/indexscheduler.cpp b/nepomuk/services/strigi/indexscheduler.cpp
index 3c92657..f3c6c36 100644
--- a/nepomuk/services/strigi/indexscheduler.cpp
+++ b/nepomuk/services/strigi/indexscheduler.cpp
@@ -208,7 +208,7 @@ Nepomuk::IndexScheduler::IndexScheduler( QObject* parent )
     : QObject( parent ),
       m_suspended( false ),
       m_indexing( false ),
-      m_speed( FullSpeed )
+      m_indexingDelay( 0 )
 {
     m_cleaner = new IndexCleaner(this);
     connect( m_cleaner, SIGNAL(finished(KJob*)), this, SLOT(slotCleaningDone()) );
@@ -266,7 +266,13 @@ void Nepomuk::IndexScheduler::setSuspended( bool suspended )
 void Nepomuk::IndexScheduler::setIndexingSpeed( IndexingSpeed speed )
 {
     kDebug() << speed;
-    m_speed = speed;
+    m_indexingDelay = 0;
+    if ( speed != FullSpeed ) {
+        m_indexingDelay = (speed == ReducedSpeed) ? s_reducedSpeedDelay : s_snailPaceDelay;
+    }
+    if( m_cleaner ) {
+        m_cleaner->setDelay(m_indexingDelay);
+    }
 }
 
 
@@ -481,11 +487,7 @@ bool Nepomuk::IndexScheduler::analyzeDir( const QString& dir_, Nepomuk::IndexSch
 void Nepomuk::IndexScheduler::callDoIndexing()
 {
     if( !m_suspended ) {
-        uint delay = 0;
-        if ( m_speed != FullSpeed ) {
-            delay = (m_speed == ReducedSpeed) ? s_reducedSpeedDelay : s_snailPaceDelay;
-        }
-        QTimer::singleShot( delay, this, SLOT(doIndexing()) );
+        QTimer::singleShot( m_indexingDelay, this, SLOT(doIndexing()) );
     }
 }
 
diff --git a/nepomuk/services/strigi/indexscheduler.h b/nepomuk/services/strigi/indexscheduler.h
index 9ae1f18..8756206 100644
--- a/nepomuk/services/strigi/indexscheduler.h
+++ b/nepomuk/services/strigi/indexscheduler.h
@@ -121,8 +121,6 @@ namespace Nepomuk {
             SnailPace
         };
 
-        IndexingSpeed currentSpeed() const { return m_speed; }
-
     public Q_SLOTS:
         void suspend();
         void resume();
@@ -226,7 +224,7 @@ namespace Nepomuk {
         QString m_currentFolder;
         KUrl m_currentUrl;
 
-        IndexingSpeed m_speed;
+        int m_indexingDelay;
         IndexCleaner* m_cleaner;
     };