From 541043d2b49cad04b250ca168831b1078c6fc2f7 Mon Sep 17 00:00:00 2001 From: Ivailo Monev Date: Mon, 16 May 2022 12:15:48 +0300 Subject: [PATCH] plasma: optimize kill runner attempting to cleanup every 50ms or create KSysGuard::Processes pointer and suspend matching before the term length is checked is sub-optimal Signed-off-by: Ivailo Monev --- plasma/runners/kill/killrunner.cpp | 51 ++++---------------------------------- plasma/runners/kill/killrunner.h | 26 +++---------------- 2 files changed, 8 insertions(+), 69 deletions(-) diff --git a/plasma/runners/kill/killrunner.cpp b/plasma/runners/kill/killrunner.cpp index 07a2fa55..5c61a893 100644 --- a/plasma/runners/kill/killrunner.cpp +++ b/plasma/runners/kill/killrunner.cpp @@ -26,26 +26,16 @@ #include #include -#include "ksysguard/processcore/processes.h" -#include "ksysguard/processcore/process.h" #include "killrunner_config.h" #include KillRunner::KillRunner(QObject *parent, const QVariantList& args) - : Plasma::AbstractRunner(parent, args), - m_processes(0) + : Plasma::AbstractRunner(parent, args) { Q_UNUSED(args); setObjectName(QLatin1String("Kill Runner")); reloadConfiguration(); - - connect(this, SIGNAL(prepare()), this, SLOT(prep())); - connect(this, SIGNAL(teardown()), this, SLOT(cleanup())); - - m_delayedCleanupTimer.setInterval(50); - m_delayedCleanupTimer.setSingleShot(true); - connect(&m_delayedCleanupTimer, SIGNAL(timeout()), this, SLOT(cleanup())); } KillRunner::~KillRunner() @@ -68,27 +58,6 @@ void KillRunner::reloadConfiguration() setSyntaxes(syntaxes); } -void KillRunner::prep() -{ - m_delayedCleanupTimer.stop(); -} - -void KillRunner::cleanup() -{ - if (!m_processes) { - return; - } - - if (m_prepLock.tryLockForWrite()) { - delete m_processes; - m_processes = 0; - - m_prepLock.unlock(); - } else { - m_delayedCleanupTimer.stop(); - } -} - void KillRunner::match(Plasma::RunnerContext &context) { QString term = context.query(); @@ -97,19 +66,6 @@ void KillRunner::match(Plasma::RunnerContext &context) return; } - m_prepLock.lockForRead(); - if (!m_processes) { - m_prepLock.unlock(); - m_prepLock.lockForWrite(); - if (!m_processes) { - suspendMatching(true); - m_processes = new KSysGuard::Processes(); - m_processes->updateAllProcesses(); - suspendMatching(false); - } - } - m_prepLock.unlock(); - term = term.right(term.length() - m_triggerWord.length()); if (term.length() < 2) { @@ -117,7 +73,10 @@ void KillRunner::match(Plasma::RunnerContext &context) } QList matches; - const QList processlist = m_processes->getAllProcesses(); + KSysGuard::Processes *processes = new KSysGuard::Processes(); + processes->updateAllProcesses(); + const QList processlist = processes->getAllProcesses(); + processes->deleteLater(); foreach (const KSysGuard::Process *process, processlist) { if (!context.isValid()) { return; diff --git a/plasma/runners/kill/killrunner.h b/plasma/runners/kill/killrunner.h index 76bd0068..92e5dd37 100644 --- a/plasma/runners/kill/killrunner.h +++ b/plasma/runners/kill/killrunner.h @@ -20,19 +20,12 @@ #ifndef KILLRUNNER_H #define KILLRUNNER_H -#include -#include - +#include #include +#include "ksysguard/processcore/processes.h" +#include "ksysguard/processcore/process.h" #include "killrunner_config.h" -#include - -namespace KSysGuard -{ - class Processes; - class Process; -} class KillRunner : public Plasma::AbstractRunner { @@ -47,10 +40,6 @@ public: QList actionsForMatch(const Plasma::QueryMatch &match); void reloadConfiguration(); -private Q_SLOTS: - void prep(); - void cleanup(); - private: /** @param uid the uid of the user * @return the username of the user with the UID uid @@ -62,15 +51,6 @@ private: /** How to sort */ KillRunnerConfig::Sort m_sorting; - - /** process lister */ - KSysGuard::Processes *m_processes; - - /** lock for initializing m_processes */ - QReadWriteLock m_prepLock; - - /** timer for retrying the cleanup due to lock contention */ - QTimer m_delayedCleanupTimer; }; K_EXPORT_PLASMA_RUNNER(kill, KillRunner) -- 2.11.0