blob: 4e67cc9b1f23a9767e949d54a0a38522d74e5747 [file] [log] [blame]
// Copyright 2018 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 GARNET_LIB_CPUPERF_FILE_READER_H_
#define GARNET_LIB_CPUPERF_FILE_READER_H_
#include <cstdint>
#include <cstdio>
#include <functional>
#include <string>
#include <lib/fit/function.h>
#include <lib/fxl/files/unique_fd.h>
#include <lib/fxl/macros.h>
#include <lib/zircon-internal/device/cpu-trace/cpu-perf.h>
#include <zircon/types.h>
#include "reader.h"
namespace cpuperf {
class FileReader final : public Reader {
public:
using FileNameProducer = fit::function<std::string(uint32_t trace_num)>;
static bool Create(FileNameProducer file_name_producer, uint32_t num_traces,
std::unique_ptr<FileReader>* out_reader);
private:
FileReader(FileNameProducer file_name_producer, uint32_t num_traces);
bool MapBuffer(const std::string& name, uint32_t trace_num) override;
bool UnmapBuffer() override;
FileNameProducer file_name_producer_;
const void* buffer_contents_ = nullptr;
size_t file_size_ = 0;
bool file_is_mmapped_ = false;
FXL_DISALLOW_COPY_AND_ASSIGN(FileReader);
};
} // namespace cpuperf
#endif // GARNET_LIB_CPUPERF_FILE_READER_H_