| // 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_PERFMON_CONTROLLER_H_ |
| #define GARNET_LIB_PERFMON_CONTROLLER_H_ |
| |
| #include <lib/zircon-internal/device/cpu-trace/perf-mon.h> |
| #include <lib/zx/vmo.h> |
| |
| #include <cstdint> |
| #include <memory> |
| #include <string> |
| |
| #include "garnet/lib/perfmon/config.h" |
| #include "garnet/lib/perfmon/properties.h" |
| #include "garnet/lib/perfmon/reader.h" |
| #include "src/lib/fxl/macros.h" |
| |
| namespace perfmon { |
| |
| class Controller { |
| public: |
| // The protcol specifies buffer sizes in 4K pages. |
| static constexpr uint32_t kLog2PageSize = 12; |
| static constexpr uint32_t kPageSize = 1 << kLog2PageSize; |
| // The protocol restricts buffer sizes to 256MB. |
| static constexpr uint32_t kMaxBufferSizeInPages = (256 * 1024 * 1024) / kPageSize; |
| |
| // Return true if perfmon is supported on this device. |
| static bool IsSupported(); |
| |
| // Fetch the properties of this device. |
| static bool GetProperties(Properties* props); |
| |
| static bool Create(uint32_t buffer_size_in_pages, const Config config, |
| std::unique_ptr<Controller>* out_controller); |
| |
| // Note: Virtual methods are used here to hide the implementation. |
| // There is no intent to provide polymorphism here. |
| |
| virtual ~Controller() = default; |
| |
| virtual bool Start() = 0; |
| |
| // It is ok to call this while stopped. |
| virtual void Stop() = 0; |
| |
| virtual bool started() const = 0; |
| |
| virtual uint32_t num_traces() const = 0; |
| |
| virtual const Config& config() const = 0; |
| |
| virtual bool GetBufferHandle(const std::string& name, uint32_t trace_num, zx::vmo* out_vmo) = 0; |
| |
| virtual std::unique_ptr<Reader> GetReader() = 0; |
| |
| protected: |
| Controller() = default; |
| |
| FXL_DISALLOW_COPY_AND_ASSIGN(Controller); |
| }; |
| |
| } // namespace perfmon |
| |
| #endif // GARNET_LIB_PERFMON_CONTROLLER_H_ |