ProcessModel.h 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #pragma once
  2. #include <AK/AKString.h>
  3. #include <AK/HashMap.h>
  4. #include <AK/Vector.h>
  5. #include <LibGUI/GModel.h>
  6. #include <unistd.h>
  7. class GraphWidget;
  8. class ProcessModel final : public GModel {
  9. public:
  10. enum Column {
  11. Icon = 0,
  12. Name,
  13. CPU,
  14. State,
  15. Priority,
  16. User,
  17. PID,
  18. Virtual,
  19. Physical,
  20. Syscalls,
  21. __Count
  22. };
  23. static NonnullRefPtr<ProcessModel> create(GraphWidget& graph) { return adopt(*new ProcessModel(graph)); }
  24. virtual ~ProcessModel() override;
  25. virtual int row_count(const GModelIndex&) const override;
  26. virtual int column_count(const GModelIndex&) const override;
  27. virtual String column_name(int column) const override;
  28. virtual ColumnMetadata column_metadata(int column) const override;
  29. virtual GVariant data(const GModelIndex&, Role = Role::Display) const override;
  30. virtual void update() override;
  31. private:
  32. explicit ProcessModel(GraphWidget&);
  33. GraphWidget& m_graph;
  34. struct ProcessState {
  35. pid_t pid;
  36. unsigned times_scheduled;
  37. String name;
  38. String state;
  39. String user;
  40. String priority;
  41. size_t amount_virtual;
  42. size_t amount_resident;
  43. unsigned syscall_count;
  44. float cpu_percent;
  45. };
  46. struct Process {
  47. ProcessState current_state;
  48. ProcessState previous_state;
  49. };
  50. HashMap<uid_t, String> m_usernames;
  51. HashMap<pid_t, OwnPtr<Process>> m_processes;
  52. Vector<pid_t> m_pids;
  53. RefPtr<GraphicsBitmap> m_generic_process_icon;
  54. RefPtr<GraphicsBitmap> m_high_priority_icon;
  55. RefPtr<GraphicsBitmap> m_low_priority_icon;
  56. RefPtr<GraphicsBitmap> m_normal_priority_icon;
  57. };