| // Copyright 2020 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 SRC_DEVICES_CPU_BIN_CPUCTL_PERFORMANCE_DOMAIN_H_ |
| #define SRC_DEVICES_CPU_BIN_CPUCTL_PERFORMANCE_DOMAIN_H_ |
| |
| #include <fuchsia/device/llcpp/fidl.h> |
| #include <fuchsia/device/manager/llcpp/fidl.h> |
| #include <fuchsia/hardware/cpu/ctrl/llcpp/fidl.h> |
| |
| #include <tuple> |
| #include <utility> |
| #include <variant> |
| #include <vector> |
| |
| namespace cpuctrl = ::llcpp::fuchsia::hardware::cpu::ctrl; |
| namespace fuchsia_device = ::llcpp::fuchsia::device; |
| |
| class CpuPerformanceDomain { |
| public: |
| static std::variant<zx_status_t, CpuPerformanceDomain> CreateFromPath(const std::string& path); |
| std::pair<zx_status_t, uint64_t> GetNumLogicalCores(); |
| std::tuple<zx_status_t, uint64_t, cpuctrl::CpuPerformanceStateInfo> GetCurrentPerformanceState(); |
| const std::vector<cpuctrl::CpuPerformanceStateInfo>& GetPerformanceStates(); |
| zx_status_t SetPerformanceState(uint32_t new_performance_state); |
| |
| protected: |
| // Don't allow explicit construction. |
| explicit CpuPerformanceDomain(cpuctrl::Device::SyncClient cpu_client, |
| fuchsia_device::Controller::SyncClient device_client) |
| : cpu_client_(std::move(cpu_client)), device_client_(std::move(device_client)) {} |
| |
| cpuctrl::Device::SyncClient cpu_client_; |
| fuchsia_device::Controller::SyncClient device_client_; |
| |
| // Don't use this directly. Instead call GetPerformanceStates(). |
| std::vector<cpuctrl::CpuPerformanceStateInfo> cached_pstates_; |
| }; |
| |
| #endif // SRC_DEVICES_CPU_BIN_CPUCTL_PERFORMANCE_DOMAIN_H_ |