blob: 84c84f2d9d74d9a9b623c35c797c2f15b2a8cb0e [file] [log] [blame]
// Copyright 2017 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_DEVICE_READER_H_
#define GARNET_LIB_CPUPERF_DEVICE_READER_H_
#include <lib/fxl/macros.h>
#include <lib/zx/vmar.h>
#include <lib/zx/vmo.h>
#include <lib/zircon-internal/device/cpu-trace/cpu-perf.h>
#include <zircon/types.h>
#include "reader.h"
namespace cpuperf {
class DeviceReader final : public Reader {
public:
// |fd| is borrowed.
static bool Create(int fd, uint32_t buffer_size,
std::unique_ptr<DeviceReader>* out_reader);
~DeviceReader();
bool GetProperties(cpuperf_properties_t* props);
bool GetConfig(cpuperf_config_t* config);
private:
// |fd| is borrowed.
DeviceReader(int fd, uint32_t buffer_size, zx::vmar vmar);
bool MapBuffer(const std::string& name, uint32_t trace_num) override;
bool UnmapBuffer() override;
const int fd_; // borrowed
const size_t buffer_size_;
zx::vmar vmar_;
const void* buffer_contents_ = nullptr;
zx::vmo current_vmo_;
FXL_DISALLOW_COPY_AND_ASSIGN(DeviceReader);
};
} // namespace cpuperf
#endif // GARNET_LIB_CPUPERF_DEVICE_READER_H_