• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef PROCESS_MEMORY_STATS_H_
6 #define PROCESS_MEMORY_STATS_H_
7 
8 #include <stdint.h>
9 
10 #include <map>
11 #include <memory>
12 
13 // Reads process memory stats from /proc/pid/{statm,smaps}.
14 class ProcessMemoryStats {
15  public:
16   struct MmapInfo {
17     char mapped_file[128] = {};
18     char prot_flags[5] = {};
19     uint64_t start_addr = 0;
20     uint64_t end_addr = 0;
21     uint64_t virt_kb = 0;
22     uint64_t pss_kb = 0;  // Proportional Set Size.
23     uint64_t rss_kb = 0;  // Resident Set Size.
24     uint64_t private_clean_kb = 0;
25     uint64_t private_dirty_kb = 0;
26     uint64_t shared_clean_kb = 0;
27     uint64_t shared_dirty_kb = 0;
28     uint64_t swapped_kb = 0;
29   };
30 
31   explicit ProcessMemoryStats(int pid);
32 
33   bool ReadLightStats();
34   bool ReadFullStats();
35 
36   // Available after ReadLightStats().
virt_kb()37   uint64_t virt_kb() const { return virt_kb_; }
rss_kb()38   uint64_t rss_kb() const { return rss_kb_; }
39 
40   // Available after ReadFullStats().
private_clean_kb()41   uint64_t private_clean_kb() const { return private_clean_kb_; }
private_dirty_kb()42   uint64_t private_dirty_kb() const { return private_dirty_kb_; }
shared_clean_kb()43   uint64_t shared_clean_kb() const { return shared_clean_kb_; }
shared_dirty_kb()44   uint64_t shared_dirty_kb() const { return shared_dirty_kb_; }
swapped_kb()45   uint64_t swapped_kb() const { return swapped_kb_; }
46 
47  private:
48   ProcessMemoryStats(const ProcessMemoryStats&) = delete;
49   void operator=(const ProcessMemoryStats&) = delete;
50 
51   const int pid_;
52 
53   // Light stats.
54   uint64_t virt_kb_ = 0;
55   uint64_t rss_kb_ = 0;
56 
57   // Full stats.
58   uint64_t pss_kb_ = 0;
59   uint64_t private_clean_kb_ = 0;
60   uint64_t private_dirty_kb_ = 0;
61   uint64_t shared_clean_kb_ = 0;
62   uint64_t shared_dirty_kb_ = 0;
63   uint64_t swapped_kb_ = 0;
64 
65   std::map<uintptr_t, std::unique_ptr<MmapInfo>> mmaps_;
66 };
67 
68 #endif  // PROCESS_MEMORY_STATS_H_
69