// Copyright 2015 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef BASE_TRACE_EVENT_PROCESS_MEMORY_MAPS_H_ #define BASE_TRACE_EVENT_PROCESS_MEMORY_MAPS_H_ #include <stdint.h> #include <string> #include <vector> #include "base/base_export.h" #include "base/macros.h" namespace base { namespace trace_event { class TracedValue; // Data model for process-wide memory stats. class BASE_EXPORT ProcessMemoryMaps { public: struct BASE_EXPORT VMRegion { static const uint32_t kProtectionFlagsRead; static const uint32_t kProtectionFlagsWrite; static const uint32_t kProtectionFlagsExec; static const uint32_t kProtectionFlagsMayshare; VMRegion(); VMRegion(const VMRegion& other); uint64_t start_address; uint64_t size_in_bytes; uint32_t protection_flags; std::string mapped_file; // private_dirty_resident + private_clean_resident + shared_dirty_resident + // shared_clean_resident = resident set size. uint64_t byte_stats_private_dirty_resident; uint64_t byte_stats_private_clean_resident; uint64_t byte_stats_shared_dirty_resident; uint64_t byte_stats_shared_clean_resident; uint64_t byte_stats_swapped; // For multiprocess accounting. uint64_t byte_stats_proportional_resident; }; ProcessMemoryMaps(); ~ProcessMemoryMaps(); void AddVMRegion(const VMRegion& region) { vm_regions_.push_back(region); } const std::vector<VMRegion>& vm_regions() const { return vm_regions_; } // Called at trace generation time to populate the TracedValue. void AsValueInto(TracedValue* value) const; // Clears up all the VMRegion(s) stored. void Clear(); private: std::vector<VMRegion> vm_regions_; DISALLOW_COPY_AND_ASSIGN(ProcessMemoryMaps); }; } // namespace trace_event } // namespace base #endif // BASE_TRACE_EVENT_PROCESS_MEMORY_MAPS_H_