diff options
author | Ben Wiederhake <BenWiederhake.GitHub@gmx.de> | 2023-05-13 14:52:21 +0200 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2023-05-14 13:46:57 +0200 |
commit | b23a0b409d911a51c87dfc810e9e96555f4ccc0d (patch) | |
tree | c0134384aceac24688e783427692d03ac20d4d29 /Userland/Applications/SystemMonitor | |
parent | 07b6fb9104907bec0e930eef4c65a054d13d7d1f (diff) | |
download | serenity-b23a0b409d911a51c87dfc810e9e96555f4ccc0d.zip |
SystemMonitor: Prefer Core::File, poll ProcessStatisticsReader correctly
The signature of Core::ProcessStatisticsReader::get_all changed, and
instead of requiring a pointer to an open file, it now needs a bool to
indicate whether usernames should be polled or not. `m_proc_all` was
always converted to `false` in `RefPtr::operator bool()`, so we were
missing usernames for a long time.
Diffstat (limited to 'Userland/Applications/SystemMonitor')
-rw-r--r-- | Userland/Applications/SystemMonitor/ProcessModel.cpp | 25 | ||||
-rw-r--r-- | Userland/Applications/SystemMonitor/ProcessModel.h | 1 |
2 files changed, 13 insertions, 13 deletions
diff --git a/Userland/Applications/SystemMonitor/ProcessModel.cpp b/Userland/Applications/SystemMonitor/ProcessModel.cpp index 2db509af77..b576de6a92 100644 --- a/Userland/Applications/SystemMonitor/ProcessModel.cpp +++ b/Userland/Applications/SystemMonitor/ProcessModel.cpp @@ -10,7 +10,6 @@ #include <AK/JsonValue.h> #include <AK/NonnullRefPtr.h> #include <AK/NumberFormat.h> -#include <LibCore/DeprecatedFile.h> #include <LibCore/ProcessStatisticsReader.h> #include <LibGUI/FileIconProvider.h> #include <LibGUI/Icon.h> @@ -31,16 +30,18 @@ ProcessModel::ProcessModel() VERIFY(!s_the); s_the = this; - auto file = Core::DeprecatedFile::construct("/sys/kernel/cpuinfo"); - if (file->open(Core::OpenMode::ReadOnly)) { - auto buffer = file->read_all(); - auto json = JsonValue::from_string({ buffer }); - auto cpuinfo_array = json.value().as_array(); - cpuinfo_array.for_each([&](auto& value) { - auto& cpu_object = value.as_object(); - auto cpu_id = cpu_object.get_u32("processor"sv).value(); - m_cpus.append(make<CpuInfo>(cpu_id)); - }); + auto file_or_error = Core::File::open("/sys/kernel/cpuinfo"sv, Core::File::OpenMode::Read); + if (!file_or_error.is_error()) { + auto buffer_or_error = file_or_error.value()->read_until_eof(); + if (!buffer_or_error.is_error()) { + auto json = JsonValue::from_string({ buffer_or_error.value() }); + auto cpuinfo_array = json.value().as_array(); + cpuinfo_array.for_each([&](auto& value) { + auto& cpu_object = value.as_object(); + auto cpu_id = cpu_object.get_u32("processor"sv).value(); + m_cpus.append(make<CpuInfo>(cpu_id)); + }); + } } if (m_cpus.is_empty()) @@ -442,7 +443,7 @@ static DeprecatedString read_command_line(pid_t pid) void ProcessModel::update() { auto previous_tid_count = m_threads.size(); - auto all_processes = Core::ProcessStatisticsReader::get_all(m_proc_all); + auto all_processes = Core::ProcessStatisticsReader::get_all(true); HashTable<int> live_tids; u64 total_time_scheduled_diff = 0; diff --git a/Userland/Applications/SystemMonitor/ProcessModel.h b/Userland/Applications/SystemMonitor/ProcessModel.h index 02e75ec6d4..40bda1286d 100644 --- a/Userland/Applications/SystemMonitor/ProcessModel.h +++ b/Userland/Applications/SystemMonitor/ProcessModel.h @@ -244,7 +244,6 @@ private: HashMap<int, NonnullRefPtr<Thread>> m_threads; Vector<NonnullOwnPtr<Process>> m_processes; Vector<NonnullOwnPtr<CpuInfo>> m_cpus; - RefPtr<Core::DeprecatedFile> m_proc_all; GUI::Icon m_kernel_process_icon; u64 m_total_time_scheduled { 0 }; u64 m_total_time_scheduled_kernel { 0 }; |