• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2015 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 BASE_TRACE_EVENT_PROCESS_MEMORY_MAPS_H_
6 #define BASE_TRACE_EVENT_PROCESS_MEMORY_MAPS_H_
7 
8 #include <stdint.h>
9 
10 #include <string>
11 #include <vector>
12 
13 #include "base/base_export.h"
14 #include "base/macros.h"
15 
16 namespace base {
17 namespace trace_event {
18 
19 class TracedValue;
20 
21 // Data model for process-wide memory stats.
22 class BASE_EXPORT ProcessMemoryMaps {
23  public:
24   struct BASE_EXPORT VMRegion {
25     static const uint32_t kProtectionFlagsRead;
26     static const uint32_t kProtectionFlagsWrite;
27     static const uint32_t kProtectionFlagsExec;
28 
29     VMRegion();
30 
31     uint64_t start_address;
32     uint64_t size_in_bytes;
33     uint32_t protection_flags;
34     std::string mapped_file;
35 
36     // private_dirty_resident + private_clean_resident + shared_dirty_resident +
37     // shared_clean_resident = resident set size.
38     uint64_t byte_stats_private_dirty_resident;
39     uint64_t byte_stats_private_clean_resident;
40     uint64_t byte_stats_shared_dirty_resident;
41     uint64_t byte_stats_shared_clean_resident;
42 
43     uint64_t byte_stats_swapped;
44 
45     // For multiprocess accounting.
46     uint64_t byte_stats_proportional_resident;
47   };
48 
49   ProcessMemoryMaps();
50   ~ProcessMemoryMaps();
51 
AddVMRegion(const VMRegion & region)52   void AddVMRegion(const VMRegion& region) { vm_regions_.push_back(region); }
vm_regions()53   const std::vector<VMRegion>& vm_regions() const { return vm_regions_; }
54 
55   // Called at trace generation time to populate the TracedValue.
56   void AsValueInto(TracedValue* value) const;
57 
58   // Clears up all the VMRegion(s) stored.
59   void Clear();
60 
61  private:
62   std::vector<VMRegion> vm_regions_;
63 
64   DISALLOW_COPY_AND_ASSIGN(ProcessMemoryMaps);
65 };
66 
67 }  // namespace trace_event
68 }  // namespace base
69 
70 #endif  // BASE_TRACE_EVENT_PROCESS_MEMORY_MAPS_H_
71