mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 04:37:34 +00:00
ProcessManager: Show per-process CPU usage percentage.
This commit is contained in:
parent
c1fc2b0534
commit
a202ed88f6
1 changed files with 18 additions and 5 deletions
|
@ -20,14 +20,15 @@ public:
|
||||||
virtual ~ProcessTableModel() override { }
|
virtual ~ProcessTableModel() override { }
|
||||||
|
|
||||||
virtual int row_count() const override { return m_processes.size(); }
|
virtual int row_count() const override { return m_processes.size(); }
|
||||||
virtual int column_count() const override { return 3; }
|
virtual int column_count() const override { return 4; }
|
||||||
|
|
||||||
virtual String column_name(int column) const override
|
virtual String column_name(int column) const override
|
||||||
{
|
{
|
||||||
switch (column) {
|
switch (column) {
|
||||||
case 0: return "PID";
|
case 0: return "PID";
|
||||||
case 1: return "State";
|
case 1: return "State";
|
||||||
case 2: return "Name";
|
case 2: return "CPU";
|
||||||
|
case 3: return "Name";
|
||||||
default: ASSERT_NOT_REACHED();
|
default: ASSERT_NOT_REACHED();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -36,7 +37,8 @@ public:
|
||||||
switch (column) {
|
switch (column) {
|
||||||
case 0: return 30;
|
case 0: return 30;
|
||||||
case 1: return 80;
|
case 1: return 80;
|
||||||
case 2: return 100;
|
case 2: return 30;
|
||||||
|
case 3: return 200;
|
||||||
default: ASSERT_NOT_REACHED();
|
default: ASSERT_NOT_REACHED();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -59,7 +61,8 @@ public:
|
||||||
switch (column) {
|
switch (column) {
|
||||||
case 0: return String::format("%d", process.current_state.pid);
|
case 0: return String::format("%d", process.current_state.pid);
|
||||||
case 1: return process.current_state.state;
|
case 1: return process.current_state.state;
|
||||||
case 2: return process.current_state.name;
|
case 2: return String::format("%d", (int)process.current_state.cpu_percent);
|
||||||
|
case 3: return process.current_state.name;
|
||||||
}
|
}
|
||||||
ASSERT_NOT_REACHED();
|
ASSERT_NOT_REACHED();
|
||||||
}
|
}
|
||||||
|
@ -72,7 +75,12 @@ public:
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned last_sum_nsched = 0;
|
||||||
|
for (auto& it : m_processes)
|
||||||
|
last_sum_nsched += it.value->current_state.nsched;
|
||||||
|
|
||||||
HashTable<pid_t> live_pids;
|
HashTable<pid_t> live_pids;
|
||||||
|
unsigned sum_nsched = 0;
|
||||||
for (;;) {
|
for (;;) {
|
||||||
char buf[BUFSIZ];
|
char buf[BUFSIZ];
|
||||||
char* ptr = fgets(buf, sizeof(buf), fp);
|
char* ptr = fgets(buf, sizeof(buf), fp);
|
||||||
|
@ -112,6 +120,8 @@ public:
|
||||||
(*it).value->current_state = state;
|
(*it).value->current_state = state;
|
||||||
|
|
||||||
live_pids.set(pid);
|
live_pids.set(pid);
|
||||||
|
|
||||||
|
sum_nsched += nsched;
|
||||||
}
|
}
|
||||||
int rc = fclose(fp);
|
int rc = fclose(fp);
|
||||||
ASSERT(rc == 0);
|
ASSERT(rc == 0);
|
||||||
|
@ -123,6 +133,10 @@ public:
|
||||||
pids_to_remove.append(it.key);
|
pids_to_remove.append(it.key);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
auto& process = *it.value;
|
||||||
|
dword nsched_diff = process.current_state.nsched - process.previous_state.nsched;
|
||||||
|
process.current_state.cpu_percent = ((float)nsched_diff * 100) / (float)(sum_nsched - last_sum_nsched);
|
||||||
m_pids.append(it.key);
|
m_pids.append(it.key);
|
||||||
}
|
}
|
||||||
for (auto pid : pids_to_remove)
|
for (auto pid : pids_to_remove)
|
||||||
|
@ -146,7 +160,6 @@ private:
|
||||||
String priority;
|
String priority;
|
||||||
unsigned linear;
|
unsigned linear;
|
||||||
unsigned committed;
|
unsigned committed;
|
||||||
unsigned nsched_since_prev;
|
|
||||||
float cpu_percent;
|
float cpu_percent;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue