blob: 2ad296b629a48d01dca7d8f07725abde85c0f1c2 [file] [log] [blame]
// Copyright 2020 The Chromium OS 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 ML_BENCHMARK_MEMORY_SAMPLER_H_
#define ML_BENCHMARK_MEMORY_SAMPLER_H_
#include <base/memory/ref_counted.h>
#include <base/synchronization/lock.h>
#include <base/task/thread_pool.h>
#include <base/time/time.h>
#include <gtest/gtest_prod.h> // for FRIEND_TEST
namespace ml_benchmark {
class PeakMemorySampler : public base::RefCountedThreadSafe<PeakMemorySampler> {
public:
PeakMemorySampler();
static void StartSampling(scoped_refptr<PeakMemorySampler> sampler);
static void StopSampling(scoped_refptr<PeakMemorySampler> sampler);
int64_t GetMaxSample();
protected:
~PeakMemorySampler();
friend class base::RefCountedThreadSafe<PeakMemorySampler>;
private:
static void SampleMemory(scoped_refptr<PeakMemorySampler> sampler);
void SetRunning(bool is_running);
base::Location from_here_;
bool running_ = false;
base::Lock lock_;
base::TimeDelta sampling_interval_ = base::TimeDelta::FromSeconds(1);
int64_t max_sample_ = 0;
scoped_refptr<base::SequencedTaskRunner> task_runner_;
// For testing purposes
int sample_counter_ = 0;
FRIEND_TEST(PeakMemorySamplerTest, BasicFunctions);
};
} // namespace ml_benchmark
#endif // ML_BENCHMARK_MEMORY_SAMPLER_H_