mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-12-02 04:20:28 +00:00
WindowServer: Let the CPU monitor keep /proc/all open between refreshes.
Just seek to the beginning on every iteration and start over. This avoids a bunch of syscalls.
This commit is contained in:
parent
30b0e5f82e
commit
bc6ac1c2f2
Notes:
sideshowbarker
2024-07-19 14:41:49 +09:00
Author: https://github.com/awesomekling Commit: https://github.com/SerenityOS/serenity/commit/bc6ac1c2f2a
2 changed files with 7 additions and 4 deletions
|
@ -31,14 +31,15 @@ void WSCPUMonitor::get_cpu_usage(unsigned& busy, unsigned& idle)
|
|||
busy = 0;
|
||||
idle = 0;
|
||||
|
||||
FILE* fp = fopen("/proc/all", "r");
|
||||
if (!fp) {
|
||||
if (!m_fp)
|
||||
m_fp = fopen("/proc/all", "r");
|
||||
if (!m_fp) {
|
||||
perror("failed to open /proc/all");
|
||||
ASSERT_NOT_REACHED();
|
||||
}
|
||||
for (;;) {
|
||||
char buf[BUFSIZ];
|
||||
char* ptr = fgets(buf, sizeof(buf), fp);
|
||||
char* ptr = fgets(buf, sizeof(buf), m_fp);
|
||||
if (!ptr)
|
||||
break;
|
||||
auto parts = String(buf, Chomp).split(',');
|
||||
|
@ -55,7 +56,7 @@ void WSCPUMonitor::get_cpu_usage(unsigned& busy, unsigned& idle)
|
|||
else
|
||||
busy += nsched;
|
||||
}
|
||||
int rc = fclose(fp);
|
||||
int rc = fseek(m_fp, 0, SEEK_SET);
|
||||
ASSERT(rc == 0);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#pragma once
|
||||
|
||||
#include <AK/CircularQueue.h>
|
||||
#include <stdio.h>
|
||||
|
||||
class Painter;
|
||||
class Rect;
|
||||
|
@ -18,5 +19,6 @@ private:
|
|||
void get_cpu_usage(unsigned& busy, unsigned& idle);
|
||||
|
||||
CircularQueue<float, 30> m_cpu_history;
|
||||
FILE* m_fp { nullptr };
|
||||
bool m_dirty { false };
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue