|
|
@@ -2,6 +2,10 @@
|
|
|
// Licensed under GPLv2 or any later version
|
|
|
// Refer to the license.txt file included.
|
|
|
|
|
|
+#include <algorithm>
|
|
|
+#include <array>
|
|
|
+#include <utility>
|
|
|
+
|
|
|
#include "common/logging/log.h"
|
|
|
#include "core/core_timing.h"
|
|
|
#include "core/hle/service/apm/controller.h"
|
|
|
@@ -9,8 +13,7 @@
|
|
|
|
|
|
namespace Service::APM {
|
|
|
|
|
|
-constexpr PerformanceConfiguration DEFAULT_PERFORMANCE_CONFIGURATION =
|
|
|
- PerformanceConfiguration::Config7;
|
|
|
+constexpr auto DEFAULT_PERFORMANCE_CONFIGURATION = PerformanceConfiguration::Config7;
|
|
|
|
|
|
Controller::Controller(Core::Timing::CoreTiming& core_timing)
|
|
|
: core_timing{core_timing}, configs{
|
|
|
@@ -22,18 +25,35 @@ Controller::~Controller() = default;
|
|
|
|
|
|
void Controller::SetPerformanceConfiguration(PerformanceMode mode,
|
|
|
PerformanceConfiguration config) {
|
|
|
- static const std::map<PerformanceConfiguration, u32> PCONFIG_TO_SPEED_MAP{
|
|
|
- {PerformanceConfiguration::Config1, 1020}, {PerformanceConfiguration::Config2, 1020},
|
|
|
- {PerformanceConfiguration::Config3, 1224}, {PerformanceConfiguration::Config4, 1020},
|
|
|
- {PerformanceConfiguration::Config5, 1020}, {PerformanceConfiguration::Config6, 1224},
|
|
|
- {PerformanceConfiguration::Config7, 1020}, {PerformanceConfiguration::Config8, 1020},
|
|
|
- {PerformanceConfiguration::Config9, 1020}, {PerformanceConfiguration::Config10, 1020},
|
|
|
- {PerformanceConfiguration::Config11, 1020}, {PerformanceConfiguration::Config12, 1020},
|
|
|
- {PerformanceConfiguration::Config13, 1785}, {PerformanceConfiguration::Config14, 1785},
|
|
|
- {PerformanceConfiguration::Config15, 1020}, {PerformanceConfiguration::Config16, 1020},
|
|
|
- };
|
|
|
-
|
|
|
- SetClockSpeed(PCONFIG_TO_SPEED_MAP.find(config)->second);
|
|
|
+ static constexpr std::array<std::pair<PerformanceConfiguration, u32>, 16> config_to_speed{{
|
|
|
+ {PerformanceConfiguration::Config1, 1020},
|
|
|
+ {PerformanceConfiguration::Config2, 1020},
|
|
|
+ {PerformanceConfiguration::Config3, 1224},
|
|
|
+ {PerformanceConfiguration::Config4, 1020},
|
|
|
+ {PerformanceConfiguration::Config5, 1020},
|
|
|
+ {PerformanceConfiguration::Config6, 1224},
|
|
|
+ {PerformanceConfiguration::Config7, 1020},
|
|
|
+ {PerformanceConfiguration::Config8, 1020},
|
|
|
+ {PerformanceConfiguration::Config9, 1020},
|
|
|
+ {PerformanceConfiguration::Config10, 1020},
|
|
|
+ {PerformanceConfiguration::Config11, 1020},
|
|
|
+ {PerformanceConfiguration::Config12, 1020},
|
|
|
+ {PerformanceConfiguration::Config13, 1785},
|
|
|
+ {PerformanceConfiguration::Config14, 1785},
|
|
|
+ {PerformanceConfiguration::Config15, 1020},
|
|
|
+ {PerformanceConfiguration::Config16, 1020},
|
|
|
+ }};
|
|
|
+
|
|
|
+ const auto iter = std::find_if(config_to_speed.cbegin(), config_to_speed.cend(),
|
|
|
+ [config](const auto& entry) { return entry.first == config; });
|
|
|
+
|
|
|
+ if (iter == config_to_speed.cend()) {
|
|
|
+ LOG_ERROR(Service_APM, "Invalid performance configuration value provided: {}",
|
|
|
+ static_cast<u32>(config));
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ SetClockSpeed(iter->second);
|
|
|
configs.insert_or_assign(mode, config);
|
|
|
}
|
|
|
|