blob: ae031bb5d915a41ae93bcf098c49395a76edf3ad [file] [log] [blame]
// Copyright 2019 The Fuchsia 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 SRC_DEVELOPER_MEMORY_MONITOR_HIGH_WATER_H_
#define SRC_DEVELOPER_MEMORY_MONITOR_HIGH_WATER_H_
#include <lib/fit/function.h>
#include <string>
#include "src/developer/memory/metrics/capture.h"
#include "src/developer/memory/metrics/digest.h"
#include "src/developer/memory/metrics/summary.h"
#include "src/developer/memory/metrics/watcher.h"
#include "src/lib/fxl/macros.h"
namespace monitor {
class HighWater {
public:
HighWater(const std::string& dir, zx::duration poll_frequency, uint64_t high_water_threshold,
async_dispatcher_t* dispatcher, memory::CaptureFn capture_cb);
~HighWater() = default;
void RecordHighWater(const memory::Capture& capture);
void RecordHighWaterDigest(const memory::Capture& capture);
std::string GetHighWater() const;
std::string GetPreviousHighWater() const;
std::string GetHighWaterDigest() const;
std::string GetPreviousHighWaterDigest() const;
private:
std::string GetFile(const char* filename) const;
const std::string dir_;
memory::Watcher watcher_;
memory::Namer namer_;
memory::Digester digester_;
FXL_DISALLOW_COPY_AND_ASSIGN(HighWater);
};
} // namespace monitor
#endif // SRC_DEVELOPER_MEMORY_MONITOR_HIGH_WATER_H_