diff --git a/Applications/SystemMonitor/ProcessMemoryMapWidget.cpp b/Applications/SystemMonitor/ProcessMemoryMapWidget.cpp index 8b28c21c0b..8ce589303f 100644 --- a/Applications/SystemMonitor/ProcessMemoryMapWidget.cpp +++ b/Applications/SystemMonitor/ProcessMemoryMapWidget.cpp @@ -30,6 +30,13 @@ ProcessMemoryMapWidget::ProcessMemoryMapWidget(GWidget* parent) builder.append('T'); return builder.to_string(); }); + pid_vm_fields.empend("Purgeable", TextAlignment::CenterLeft, [](auto& object) { + if (!object.get("purgeable").to_bool()) + return ""; + if (object.get("volatile").to_bool()) + return "Volatile"; + return "Non-volatile"; + }); pid_vm_fields.empend("name", "Name", TextAlignment::CenterLeft); m_json_model = GJsonArrayModel::create({}, move(pid_vm_fields)); m_table_view->set_model(GSortingProxyModel::create(*m_json_model)); diff --git a/Applications/SystemMonitor/ProcessModel.cpp b/Applications/SystemMonitor/ProcessModel.cpp index f79cb0b869..6cbd5d859c 100644 --- a/Applications/SystemMonitor/ProcessModel.cpp +++ b/Applications/SystemMonitor/ProcessModel.cpp @@ -59,6 +59,10 @@ String ProcessModel::column_name(int column) const return "Virtual"; case Column::Physical: return "Physical"; + case Column::PurgeableVolatile: + return "Purg:V"; + case Column::PurgeableNonvolatile: + return "Purg:N"; case Column::CPU: return "CPU"; case Column::Name: @@ -107,6 +111,10 @@ GModel::ColumnMetadata ProcessModel::column_metadata(int column) const return { 65, TextAlignment::CenterRight }; case Column::Physical: return { 65, TextAlignment::CenterRight }; + case Column::PurgeableVolatile: + return { 65, TextAlignment::CenterRight }; + case Column::PurgeableNonvolatile: + return { 65, TextAlignment::CenterRight }; case Column::CPU: return { 32, TextAlignment::CenterRight }; case Column::Name: @@ -175,6 +183,10 @@ GVariant ProcessModel::data(const GModelIndex& index, Role role) const return (int)thread.current_state.amount_virtual; case Column::Physical: return (int)thread.current_state.amount_resident; + case Column::PurgeableVolatile: + return (int)thread.current_state.amount_purgeable_volatile; + case Column::PurgeableNonvolatile: + return (int)thread.current_state.amount_purgeable_nonvolatile; case Column::CPU: return thread.current_state.cpu_percent; case Column::Name: @@ -239,6 +251,10 @@ GVariant ProcessModel::data(const GModelIndex& index, Role role) const return pretty_byte_size(thread.current_state.amount_virtual); case Column::Physical: return pretty_byte_size(thread.current_state.amount_resident); + case Column::PurgeableVolatile: + return pretty_byte_size(thread.current_state.amount_purgeable_volatile); + case Column::PurgeableNonvolatile: + return pretty_byte_size(thread.current_state.amount_purgeable_nonvolatile); case Column::CPU: return thread.current_state.cpu_percent; case Column::Name: @@ -297,6 +313,8 @@ void ProcessModel::update() state.file_write_bytes = thread.file_write_bytes; state.amount_virtual = it.value.amount_virtual; state.amount_resident = it.value.amount_resident; + state.amount_purgeable_volatile = it.value.amount_purgeable_volatile; + state.amount_purgeable_nonvolatile = it.value.amount_purgeable_nonvolatile; state.icon_id = it.value.icon_id; state.name = thread.name; diff --git a/Applications/SystemMonitor/ProcessModel.h b/Applications/SystemMonitor/ProcessModel.h index bb22d459cb..15d734e246 100644 --- a/Applications/SystemMonitor/ProcessModel.h +++ b/Applications/SystemMonitor/ProcessModel.h @@ -30,6 +30,8 @@ public: TID, Virtual, Physical, + PurgeableVolatile, + PurgeableNonvolatile, Syscalls, InodeFaults, ZeroFaults, @@ -70,6 +72,8 @@ private: String priority; size_t amount_virtual; size_t amount_resident; + size_t amount_purgeable_volatile; + size_t amount_purgeable_nonvolatile; unsigned syscall_count; unsigned inode_faults; unsigned zero_faults; diff --git a/Libraries/LibCore/CProcessStatisticsReader.cpp b/Libraries/LibCore/CProcessStatisticsReader.cpp index 2f48c49eb2..07ba35f875 100644 --- a/Libraries/LibCore/CProcessStatisticsReader.cpp +++ b/Libraries/LibCore/CProcessStatisticsReader.cpp @@ -38,6 +38,8 @@ HashMap CProcessStatisticsReader::get_all() process.amount_virtual = process_object.get("amount_virtual").to_u32(); process.amount_resident = process_object.get("amount_resident").to_u32(); process.amount_shared = process_object.get("amount_shared").to_u32(); + process.amount_purgeable_volatile = process_object.get("amount_purgeable_volatile").to_u32(); + process.amount_purgeable_nonvolatile = process_object.get("amount_purgeable_nonvolatile").to_u32(); process.icon_id = process_object.get("icon_id").to_int(); auto thread_array = process_object.get("threads").as_array(); diff --git a/Libraries/LibCore/CProcessStatisticsReader.h b/Libraries/LibCore/CProcessStatisticsReader.h index 564c002ede..4fa3806782 100644 --- a/Libraries/LibCore/CProcessStatisticsReader.h +++ b/Libraries/LibCore/CProcessStatisticsReader.h @@ -39,6 +39,8 @@ struct CProcessStatistics { size_t amount_virtual; size_t amount_resident; size_t amount_shared; + size_t amount_purgeable_volatile; + size_t amount_purgeable_nonvolatile; int icon_id; Vector threads;