blob: 58d55ba33995d9029521236979932f59cc4cea94 [file] [edit]
// Copyright 2024 The Fuchsia Authors
//
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file or at
// https://opensource.org/licenses/MIT
#include "test-helper.h"
#include <cstddef>
power_management::EnergyModel MakeFakeEnergyModel(size_t power_levels) {
fbl::Vector<zx_processor_power_level_t> levels;
levels.resize(power_levels);
fbl::Vector<zx_processor_power_level_transition_t> transitions;
transitions.resize(power_levels * power_levels);
for (size_t i = 0; i < power_levels; ++i) {
levels[i].control_interface = static_cast<uint64_t>(ControlInterfaceIdForLevel(i));
levels[i].control_argument = ControlInterfaceArgForLevel(i);
levels[i].options =
i <= kMaxIdlePowerLevel ? ZX_PROCESSOR_POWER_LEVEL_OPTIONS_DOMAIN_INDEPENDENT : 0;
levels[i].processing_rate = i <= kMaxIdlePowerLevel ? 0 : i * 10;
levels[i].power_coefficient_nw = i + 1;
for (size_t j = 0; j < power_levels; ++j) {
transitions[j + i * power_levels].from = static_cast<uint8_t>(i);
transitions[j + i * power_levels].to = static_cast<uint8_t>(j);
}
}
auto model = power_management::EnergyModel::Create(levels, transitions);
ZX_ASSERT(model.is_ok());
return std::move(model).value();
}