From 2fa5e2b66b622797ae3dce4fc989d95b74e5d0d7 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Tue, 14 May 2019 17:12:35 +0200 Subject: [PATCH] ProcessManager: Keep /proc/all open to reduce CPU impact of ProcessManager. --- Applications/ProcessManager/ProcessModel.cpp | 15 ++++++++------- Applications/ProcessManager/ProcessModel.h | 2 ++ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/Applications/ProcessManager/ProcessModel.cpp b/Applications/ProcessManager/ProcessModel.cpp index 9161920619..e9eae323dc 100644 --- a/Applications/ProcessManager/ProcessModel.cpp +++ b/Applications/ProcessManager/ProcessModel.cpp @@ -7,7 +7,13 @@ ProcessModel::ProcessModel(GraphWidget& graph) : m_graph(graph) + , m_proc_all("/proc/all") { + if (!m_proc_all.open(CIODevice::ReadOnly)) { + fprintf(stderr, "ProcessManager: Failed to open /proc/all: %s\n", m_proc_all.error_string()); + exit(1); + } + setpwent(); while (auto* passwd = getpwent()) m_usernames.set(passwd->pw_uid, passwd->pw_name); @@ -137,12 +143,7 @@ GVariant ProcessModel::data(const GModelIndex& index, Role role) const void ProcessModel::update() { - CFile file("/proc/all"); - if (!file.open(CIODevice::ReadOnly)) { - fprintf(stderr, "ProcessManager: Failed to open /proc/all: %s\n", file.error_string()); - exit(1); - return; - } + m_proc_all.seek(0); unsigned last_sum_nsched = 0; for (auto& it : m_processes) @@ -151,7 +152,7 @@ void ProcessModel::update() HashTable live_pids; unsigned sum_nsched = 0; for (;;) { - auto line = file.read_line(1024); + auto line = m_proc_all.read_line(1024); if (line.is_empty()) break; auto chomped = String((const char*)line.pointer(), line.size() - 1, Chomp); diff --git a/Applications/ProcessManager/ProcessModel.h b/Applications/ProcessManager/ProcessModel.h index c552c3ec3d..92ff292a0b 100644 --- a/Applications/ProcessManager/ProcessModel.h +++ b/Applications/ProcessManager/ProcessModel.h @@ -4,6 +4,7 @@ #include #include #include +#include #include class GraphWidget; @@ -64,4 +65,5 @@ private: RetainPtr m_high_priority_icon; RetainPtr m_low_priority_icon; RetainPtr m_normal_priority_icon; + CFile m_proc_all; };