1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 14:28:12 +00:00

SystemMonitor: Show information about purgeable memory

This patch exposes some fields about purgeable memory regions.
We now also show total purgeable volatile and non-volatile memory in
the big process table.
This commit is contained in:
Andreas Kling 2019-12-09 19:16:58 +01:00
parent dfc5eb2b6d
commit 92b46d9814
5 changed files with 33 additions and 0 deletions

View file

@ -30,6 +30,13 @@ ProcessMemoryMapWidget::ProcessMemoryMapWidget(GWidget* parent)
builder.append('T'); builder.append('T');
return builder.to_string(); 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); pid_vm_fields.empend("name", "Name", TextAlignment::CenterLeft);
m_json_model = GJsonArrayModel::create({}, move(pid_vm_fields)); m_json_model = GJsonArrayModel::create({}, move(pid_vm_fields));
m_table_view->set_model(GSortingProxyModel::create(*m_json_model)); m_table_view->set_model(GSortingProxyModel::create(*m_json_model));

View file

@ -59,6 +59,10 @@ String ProcessModel::column_name(int column) const
return "Virtual"; return "Virtual";
case Column::Physical: case Column::Physical:
return "Physical"; return "Physical";
case Column::PurgeableVolatile:
return "Purg:V";
case Column::PurgeableNonvolatile:
return "Purg:N";
case Column::CPU: case Column::CPU:
return "CPU"; return "CPU";
case Column::Name: case Column::Name:
@ -107,6 +111,10 @@ GModel::ColumnMetadata ProcessModel::column_metadata(int column) const
return { 65, TextAlignment::CenterRight }; return { 65, TextAlignment::CenterRight };
case Column::Physical: case Column::Physical:
return { 65, TextAlignment::CenterRight }; return { 65, TextAlignment::CenterRight };
case Column::PurgeableVolatile:
return { 65, TextAlignment::CenterRight };
case Column::PurgeableNonvolatile:
return { 65, TextAlignment::CenterRight };
case Column::CPU: case Column::CPU:
return { 32, TextAlignment::CenterRight }; return { 32, TextAlignment::CenterRight };
case Column::Name: case Column::Name:
@ -175,6 +183,10 @@ GVariant ProcessModel::data(const GModelIndex& index, Role role) const
return (int)thread.current_state.amount_virtual; return (int)thread.current_state.amount_virtual;
case Column::Physical: case Column::Physical:
return (int)thread.current_state.amount_resident; 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: case Column::CPU:
return thread.current_state.cpu_percent; return thread.current_state.cpu_percent;
case Column::Name: 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); return pretty_byte_size(thread.current_state.amount_virtual);
case Column::Physical: case Column::Physical:
return pretty_byte_size(thread.current_state.amount_resident); 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: case Column::CPU:
return thread.current_state.cpu_percent; return thread.current_state.cpu_percent;
case Column::Name: case Column::Name:
@ -297,6 +313,8 @@ void ProcessModel::update()
state.file_write_bytes = thread.file_write_bytes; state.file_write_bytes = thread.file_write_bytes;
state.amount_virtual = it.value.amount_virtual; state.amount_virtual = it.value.amount_virtual;
state.amount_resident = it.value.amount_resident; 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.icon_id = it.value.icon_id;
state.name = thread.name; state.name = thread.name;

View file

@ -30,6 +30,8 @@ public:
TID, TID,
Virtual, Virtual,
Physical, Physical,
PurgeableVolatile,
PurgeableNonvolatile,
Syscalls, Syscalls,
InodeFaults, InodeFaults,
ZeroFaults, ZeroFaults,
@ -70,6 +72,8 @@ private:
String priority; String priority;
size_t amount_virtual; size_t amount_virtual;
size_t amount_resident; size_t amount_resident;
size_t amount_purgeable_volatile;
size_t amount_purgeable_nonvolatile;
unsigned syscall_count; unsigned syscall_count;
unsigned inode_faults; unsigned inode_faults;
unsigned zero_faults; unsigned zero_faults;

View file

@ -38,6 +38,8 @@ HashMap<pid_t, CProcessStatistics> CProcessStatisticsReader::get_all()
process.amount_virtual = process_object.get("amount_virtual").to_u32(); process.amount_virtual = process_object.get("amount_virtual").to_u32();
process.amount_resident = process_object.get("amount_resident").to_u32(); process.amount_resident = process_object.get("amount_resident").to_u32();
process.amount_shared = process_object.get("amount_shared").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(); process.icon_id = process_object.get("icon_id").to_int();
auto thread_array = process_object.get("threads").as_array(); auto thread_array = process_object.get("threads").as_array();

View file

@ -39,6 +39,8 @@ struct CProcessStatistics {
size_t amount_virtual; size_t amount_virtual;
size_t amount_resident; size_t amount_resident;
size_t amount_shared; size_t amount_shared;
size_t amount_purgeable_volatile;
size_t amount_purgeable_nonvolatile;
int icon_id; int icon_id;
Vector<CThreadStatistics> threads; Vector<CThreadStatistics> threads;