mirror of
https://github.com/mudita/MuditaOS.git
synced 2026-04-20 15:07:17 -04:00
In order to synchronize the Low Power mode, the services were immediately informed about the frequency change, so that they can update their resources (e.g. PWM filling) and services may request the maximum CPU frequency in order to perform a task (e.g. screen redraw, telephone conversation)
63 lines
2.7 KiB
C++
63 lines
2.7 KiB
C++
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
|
|
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
|
|
|
|
#define CATCH_CONFIG_MAIN
|
|
|
|
#include <catch2/catch.hpp>
|
|
#include <SystemManager/CpuGovernor.hpp>
|
|
#include <Service/CpuSentinel.hpp>
|
|
|
|
TEST_CASE("Power Manager CPU sentinels governor test")
|
|
{
|
|
using namespace sys;
|
|
std::shared_ptr<CpuSentinel> testSentinel_0 = nullptr;
|
|
auto testSentinel_1 = std::make_shared<CpuSentinel>("testSentinel_1", nullptr);
|
|
auto testSentinel_2 = std::make_shared<CpuSentinel>("testSentinel_2", nullptr);
|
|
auto testSentinel_3 = std::make_shared<CpuSentinel>("testSentinel_1", nullptr);
|
|
|
|
SECTION("Sentinel registration")
|
|
{
|
|
auto governor = std::make_unique<CpuGovernor>();
|
|
REQUIRE(governor->GetNumberOfRegisteredSentinels() == 0);
|
|
|
|
governor->RegisterNewSentinel(testSentinel_0);
|
|
REQUIRE(governor->GetNumberOfRegisteredSentinels() == 0);
|
|
|
|
governor->RegisterNewSentinel(testSentinel_1);
|
|
REQUIRE(governor->GetNumberOfRegisteredSentinels() == 1);
|
|
|
|
governor->RegisterNewSentinel(testSentinel_2);
|
|
REQUIRE(governor->GetNumberOfRegisteredSentinels() == 2);
|
|
|
|
governor->RegisterNewSentinel(testSentinel_3);
|
|
REQUIRE(governor->GetNumberOfRegisteredSentinels() == 2);
|
|
}
|
|
|
|
SECTION("Sentinel demands")
|
|
{
|
|
auto governor = std::make_unique<CpuGovernor>();
|
|
governor->RegisterNewSentinel(testSentinel_1);
|
|
governor->RegisterNewSentinel(testSentinel_2);
|
|
|
|
REQUIRE(governor->GetMinimumFrequencyRequested() == bsp::CpuFrequencyHz::Level_1);
|
|
|
|
governor->SetCpuFrequencyRequest("testSentinel_1", bsp::CpuFrequencyHz::Level_4);
|
|
REQUIRE(governor->GetMinimumFrequencyRequested() == bsp::CpuFrequencyHz::Level_4);
|
|
|
|
governor->SetCpuFrequencyRequest("testSentinel_2", bsp::CpuFrequencyHz::Level_6);
|
|
REQUIRE(governor->GetMinimumFrequencyRequested() == bsp::CpuFrequencyHz::Level_6);
|
|
|
|
governor->SetCpuFrequencyRequest("testSentinel_1", bsp::CpuFrequencyHz::Level_2);
|
|
REQUIRE(governor->GetMinimumFrequencyRequested() == bsp::CpuFrequencyHz::Level_6);
|
|
|
|
governor->ResetCpuFrequencyRequest("testSentinel_2");
|
|
REQUIRE(governor->GetMinimumFrequencyRequested() == bsp::CpuFrequencyHz::Level_2);
|
|
|
|
governor->SetCpuFrequencyRequest("bedNameSentinel", bsp::CpuFrequencyHz::Level_6);
|
|
REQUIRE(governor->GetMinimumFrequencyRequested() == bsp::CpuFrequencyHz::Level_2);
|
|
|
|
governor->ResetCpuFrequencyRequest("testSentinel_1");
|
|
REQUIRE(governor->GetMinimumFrequencyRequested() == bsp::CpuFrequencyHz::Level_1);
|
|
}
|
|
}
|