浏览代码

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.
Ben Wiederhake 2 年之前
父节点
当前提交
b23a0b409d
共有 2 个文件被更改,包括 13 次插入13 次删除
  1. 13 12
      Userland/Applications/SystemMonitor/ProcessModel.cpp
  2. 0 1
      Userland/Applications/SystemMonitor/ProcessModel.h

+ 13 - 12
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;

+ 0 - 1
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 };