ProcessStatisticsReader.h 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  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/String.h>
  8. #include <LibCore/File.h>
  9. #include <unistd.h>
  10. namespace Core {
  11. struct ThreadStatistics {
  12. pid_t tid;
  13. unsigned times_scheduled;
  14. unsigned ticks_user;
  15. unsigned ticks_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. String state;
  27. u32 cpu;
  28. u32 priority;
  29. String name;
  30. };
  31. struct ProcessStatistics {
  32. // Keep this in sync with /proc/all.
  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. unsigned nfds;
  42. bool kernel;
  43. String name;
  44. String executable;
  45. String tty;
  46. String pledge;
  47. String veil;
  48. size_t amount_virtual;
  49. size_t amount_resident;
  50. size_t amount_shared;
  51. size_t amount_dirty_private;
  52. size_t amount_clean_inode;
  53. size_t amount_purgeable_volatile;
  54. size_t amount_purgeable_nonvolatile;
  55. Vector<Core::ThreadStatistics> threads;
  56. // synthetic
  57. String username;
  58. };
  59. struct AllProcessesStatistics {
  60. Vector<ProcessStatistics> processes;
  61. u64 total_ticks_scheduled;
  62. u64 total_ticks_scheduled_kernel;
  63. };
  64. class ProcessStatisticsReader {
  65. public:
  66. static Optional<AllProcessesStatistics> get_all(RefPtr<Core::File>&);
  67. static Optional<AllProcessesStatistics> get_all();
  68. private:
  69. static String username_from_uid(uid_t);
  70. static HashMap<uid_t, String> s_usernames;
  71. };
  72. }