ProcessStatisticsReader.h 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. /*
  2. * Copyright (c) 2018-2021, Andreas Kling <kling@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <AK/ByteString.h>
  8. #include <AK/Time.h>
  9. #include <AK/Vector.h>
  10. #include <unistd.h>
  11. namespace Core {
  12. struct ThreadStatistics {
  13. pid_t tid;
  14. unsigned times_scheduled;
  15. u64 time_user;
  16. u64 time_kernel;
  17. unsigned syscall_count;
  18. unsigned inode_faults;
  19. unsigned zero_faults;
  20. unsigned cow_faults;
  21. u64 unix_socket_read_bytes;
  22. u64 unix_socket_write_bytes;
  23. u64 ipv4_socket_read_bytes;
  24. u64 ipv4_socket_write_bytes;
  25. u64 file_read_bytes;
  26. u64 file_write_bytes;
  27. ByteString state;
  28. u32 cpu;
  29. u32 priority;
  30. ByteString name;
  31. };
  32. struct ProcessStatistics {
  33. // Keep this in sync with /sys/kernel/processes.
  34. // From the kernel side:
  35. pid_t pid;
  36. pid_t pgid;
  37. pid_t pgp;
  38. pid_t sid;
  39. uid_t uid;
  40. gid_t gid;
  41. pid_t ppid;
  42. bool kernel;
  43. ByteString name;
  44. ByteString executable;
  45. ByteString tty;
  46. ByteString pledge;
  47. ByteString veil;
  48. UnixDateTime creation_time;
  49. size_t amount_virtual;
  50. size_t amount_resident;
  51. size_t amount_shared;
  52. size_t amount_dirty_private;
  53. size_t amount_clean_inode;
  54. size_t amount_purgeable_volatile;
  55. size_t amount_purgeable_nonvolatile;
  56. Vector<Core::ThreadStatistics> threads;
  57. // synthetic
  58. ByteString username;
  59. };
  60. struct AllProcessesStatistics {
  61. Vector<ProcessStatistics> processes;
  62. u64 total_time_scheduled;
  63. u64 total_time_scheduled_kernel;
  64. };
  65. class ProcessStatisticsReader {
  66. public:
  67. static ErrorOr<AllProcessesStatistics> get_all(SeekableStream&, bool include_usernames = true);
  68. static ErrorOr<AllProcessesStatistics> get_all(bool include_usernames = true);
  69. private:
  70. static ByteString username_from_uid(uid_t);
  71. static HashMap<uid_t, ByteString> s_usernames;
  72. };
  73. }