1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 19:57:35 +00:00

Kernel+ProcessManager: Let processes have an icon and show it in the table.

Processes can now have an icon assigned, which is essentially a 16x16 RGBA32
bitmap exposed as a shared buffer ID.

You set the icon ID by calling set_process_icon(int) and the icon ID will be
exposed through /proc/all.

To make this work, I added a mechanism for making shared buffers globally
accessible. For safety reasons, each app seals the icon buffer before making
it global.

Right now the first call to GWindow::set_icon() is what determines the
process icon. We'll probably change this in the future. :^)
This commit is contained in:
Andreas Kling 2019-07-29 07:26:01 +02:00
parent 7356fd389f
commit 5ded77df39
14 changed files with 97 additions and 2 deletions

View file

@ -22,6 +22,7 @@ class PageDirectory;
class Region;
class VMObject;
class ProcessTracer;
class SharedBuffer;
timeval kgettimeofday();
void kgettimeofday(timeval&);
@ -208,12 +209,14 @@ public:
int sys$mknod(const char* pathname, mode_t, dev_t);
int sys$create_shared_buffer(int, void** buffer);
int sys$share_buffer_with(int, pid_t peer_pid);
int sys$share_buffer_globally(int);
void* sys$get_shared_buffer(int shared_buffer_id);
int sys$release_shared_buffer(int shared_buffer_id);
int sys$seal_shared_buffer(int shared_buffer_id);
int sys$get_shared_buffer_size(int shared_buffer_id);
int sys$halt();
int sys$reboot();
int sys$set_process_icon(int icon_id);
static void initialize();
@ -281,6 +284,8 @@ public:
const ELFLoader* elf_loader() const { return m_elf_loader.ptr(); }
int icon_id() const { return m_icon_id; }
private:
friend class MemoryManager;
friend class Scheduler;
@ -359,6 +364,8 @@ private:
Lock m_big_lock { "Process" };
u64 m_alarm_deadline { 0 };
int m_icon_id { -1 };
};
class ProcessInspectionHandle {