blob: 594a26f46ff27b1bad52281c06ac6fb92764d081 [file] [log] [blame]
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef TOOLS_MEMORY_SIMULATOR_MEMORY_SIMULATOR_H_
#define TOOLS_MEMORY_SIMULATOR_MEMORY_SIMULATOR_H_
#include <stdint.h>
#include <cstdint>
#include <memory>
#include "base/rand_util.h"
#include "base/time/time.h"
#include "base/timer/timer.h"
#include "tools/memory/simulator/memory_holder.h"
namespace memory_simulator {
// Allocates, reads and writes memory pages at a configurable frequency.
class MemorySimulator {
public:
MemorySimulator();
~MemorySimulator();
void Start(int64_t page_alloc_per_second,
int64_t page_read_per_second,
int64_t page_write_per_second,
int64_t max_pages_allocated,
base::TimeTicks read_deadline,
base::TimeTicks write_deadline);
void StopAndFree();
int64_t GetPagesAllocated() const;
int64_t GetPagesRead() const;
int64_t GetPagesWritten() const;
private:
void Allocate();
void Read();
void Write();
std::unique_ptr<MemoryHolder> memory_holder_;
int64_t pages_allocated_ = 0;
int64_t max_pages_allocated_ = 0;
int64_t pages_read_ = 0;
int64_t pages_written_ = 0;
base::MetronomeTimer alloc_timer_;
base::MetronomeTimer read_timer_;
base::MetronomeTimer write_timer_;
base::TimeTicks read_deadline_;
base::TimeTicks write_deadline_;
};
} // namespace memory_simulator
#endif // TOOLS_MEMORY_SIMULATOR_MEMORY_SIMULATOR_H_