ProcessStatisticsReader.h 1.9 KB

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