// 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_TOTALS_H_
#define BASE_TRACE_EVENT_PROCESS_MEMORY_TOTALS_H_

#include <stdint.h>

#include <map>

#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 ProcessMemoryTotals {
 public:
  ProcessMemoryTotals();
  ~ProcessMemoryTotals();

  // Called at trace generation time to populate the TracedValue.
  void AsValueInto(TracedValue* value) const;

  // Clears up all the data collected.
  void Clear();

  uint64_t resident_set_bytes() const { return resident_set_bytes_; }
  void set_resident_set_bytes(uint64_t value) { resident_set_bytes_ = value; }

  uint64_t peak_resident_set_bytes() const { return peak_resident_set_bytes_; }
  void set_peak_resident_set_bytes(uint64_t value) {
    peak_resident_set_bytes_ = value;
  }

  // On some platforms (recent linux kernels, see goo.gl/sMvAVz) the peak rss
  // can be reset. When is_peak_rss_resettable == true, the peak refers to
  // peak from the previous measurement. When false, it is the absolute peak
  // since the start of the process.
  bool is_peak_rss_resetable() const { return is_peak_rss_resetable_; }
  void set_is_peak_rss_resetable(bool value) { is_peak_rss_resetable_ = value; }

  void SetExtraFieldInBytes(const char* name, uint64_t value);

 private:
  uint64_t resident_set_bytes_;
  uint64_t peak_resident_set_bytes_;
  bool is_peak_rss_resetable_;

  // Extra metrics for OS-specific statistics.
  std::map<const char*, uint64_t> extra_fields_;

  DISALLOW_COPY_AND_ASSIGN(ProcessMemoryTotals);
};

}  // namespace trace_event
}  // namespace base

#endif  // BASE_TRACE_EVENT_PROCESS_MEMORY_TOTALS_H_
