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:
parent
dfc5eb2b6d
commit
92b46d9814
5 changed files with 33 additions and 0 deletions
|
@ -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));
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue