diff options
Diffstat (limited to 'kde-unstable/kdebase-runtime/fix-nepomuk-cpu-usage.patch')
-rw-r--r-- | kde-unstable/kdebase-runtime/fix-nepomuk-cpu-usage.patch | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/kde-unstable/kdebase-runtime/fix-nepomuk-cpu-usage.patch b/kde-unstable/kdebase-runtime/fix-nepomuk-cpu-usage.patch new file mode 100644 index 000000000..545072807 --- /dev/null +++ b/kde-unstable/kdebase-runtime/fix-nepomuk-cpu-usage.patch @@ -0,0 +1,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; + }; + |