Showing the changes to interface/src/RefreshRateManager.cpp (1 of 3 files). Show all
Unified · Split
| @@ -48,12 +48,13 @@ static const int VR_TARGET_RATE = 90; · 47 unmodified lines | ||
| 48 | 48 | * <tr><td><code>"Interactive"</code></td><td>Medium refresh rate, which is reduced when Interface doesn't have focus or is |
| 49 | 49 | * minimized.</td></tr> |
| 50 | 50 | * <tr><td><code>"Realtime"</code></td><td>High refresh rate, even when Interface doesn't have focus or is minimized. |
| 51 | + * <tr><td><code>"Custom"</code></td><td>Custom refresh rate for full control over the refresh rate in all states. | |
| 51 | 52 | * </tbody> |
| 52 | 53 | * </table> |
| 53 | 54 | * @typedef {string} RefreshRateProfileName |
| 54 | 55 | */ |
| 55 | 56 | static const std::array<std::string, RefreshRateManager::RefreshRateProfile::PROFILE_NUM> REFRESH_RATE_PROFILE_TO_STRING = |
| 56 | − { { "Eco", "Interactive", "Realtime" } }; | |
| 57 | + { { "Eco", "Interactive", "Realtime", "Custom" } }; | |
| 57 | 58 | |
| 58 | 59 | /*@jsdoc |
| 59 | 60 | * <p>Interface states that affect the refresh rate.</p> |
| @@ -108,10 +109,12 @@ static const std::array<int, RefreshRateManager::RefreshRateRegime::REGIME_NUM> · 48 unmodified lines | ||
| 108 | 109 | { { 30, 20, 10, 2, 30, 30 } }; |
| 109 | 110 | |
| 110 | 111 | static const std::array<int, RefreshRateManager::RefreshRateRegime::REGIME_NUM> REALTIME_PROFILE = |
| 111 | − { { 60, 60, 60, 2, 30, 30} }; | |
| 112 | + { { 60, 60, 60, 2, 30, 30 } }; | |
| 112 | 113 | |
| 113 | −static const std::array<std::array<int, RefreshRateManager::RefreshRateRegime::REGIME_NUM>, RefreshRateManager::RefreshRateProfile::PROFILE_NUM> REFRESH_RATE_PROFILES = | |
| 114 | − { { ECO_PROFILE, INTERACTIVE_PROFILE, REALTIME_PROFILE } }; | |
| 114 | +static const std::array<int, RefreshRateManager::RefreshRateRegime::REGIME_NUM> CUSTOM_PROFILE = REALTIME_PROFILE; // derived from settings and modified by scripts below | |
| 115 | + | |
| 116 | +static std::array<std::array<int, RefreshRateManager::RefreshRateRegime::REGIME_NUM>, RefreshRateManager::RefreshRateProfile::PROFILE_NUM> REFRESH_RATE_PROFILES = | |
| 117 | + { { ECO_PROFILE, INTERACTIVE_PROFILE, REALTIME_PROFILE, CUSTOM_PROFILE } }; | |
| 115 | 118 | |
| 116 | 119 | |
| 117 | 120 | static const int INACTIVE_TIMER_LIMIT = 3000; |
| @@ -135,6 +138,10 @@ std::string RefreshRateManager::uxModeToString(RefreshRateManager::RefreshRateMa · 17 unmodified lines | ||
| 135 | 138 | |
| 136 | 139 | RefreshRateManager::RefreshRateManager() { |
| 137 | 140 | _refreshRateProfile = (RefreshRateManager::RefreshRateProfile) _refreshRateProfileSetting.get(); |
| 141 | + for (size_t i = 0; i < _customRefreshRateSettings.size(); i++) { | |
| 142 | + REFRESH_RATE_PROFILES[CUSTOM][i] = _customRefreshRateSettings[i].get(); | |
| 143 | + } | |
| 144 | + | |
| 138 | 145 | _inactiveTimer->setInterval(INACTIVE_TIMER_LIMIT); |
| 139 | 146 | _inactiveTimer->setSingleShot(true); |
| 140 | 147 | QObject::connect(_inactiveTimer.get(), &QTimer::timeout, [&] { |
| @@ -169,23 +176,23 @@ void RefreshRateManager::setRefreshRateProfile(RefreshRateManager::RefreshRatePr · 28 unmodified lines | ||
| 169 | 176 | } |
| 170 | 177 | } |
| 171 | 178 | |
| 172 | −int RefreshRateManager::getCustomRefreshRate(RefreshRateRegime regime) | |
| 173 | −{ | |
| 174 | − Q_ASSERT(regime >= 0 && regime < RefreshRateRegime::REGIME_NUM); | |
| 175 | − if (regime < 0 && regime >= RefreshRateRegime::REGIME_NUM) | |
| 176 | − return -1; | |
| 179 | +int RefreshRateManager::getCustomRefreshRate(RefreshRateRegime regime) { | |
| 180 | + if (isValidRefreshRateRegime(regime)) { | |
| 181 | + return REFRESH_RATE_PROFILES[RefreshRateProfile::CUSTOM][regime]; | |
| 182 | + } | |
| 177 | 183 | |
| 178 | − return _customProfile[regime]; | |
| 184 | + return 0; | |
| 179 | 185 | } |
| 180 | 186 | |
| 181 | −int RefreshRateManager::setCustomRefreshRate(RefreshRateRegime regime, int value) | |
| 182 | −{ | |
| 183 | − Q_ASSERT(regime >= 0 && regime < RefreshRateRegime::REGIME_NUM); | |
| 184 | − if (regime < 0 && regime >= RefreshRateRegime::REGIME_NUM) | |
| 185 | − return -1; | |
| 186 | − | |
| 187 | − _customProfile[regime] = value; | |
| 188 | − return 0; | |
| 187 | +void RefreshRateManager::setCustomRefreshRate(RefreshRateRegime regime, int value) { | |
| 188 | + value = std::max(value, 1); | |
| 189 | + if (isValidRefreshRateRegime(regime)) { | |
| 190 | + _refreshRateProfileSettingLock.withWriteLock([&] { | |
| 191 | + REFRESH_RATE_PROFILES[RefreshRateProfile::CUSTOM][regime] = value; | |
| 192 | + _customRefreshRateSettings[regime].set(value); | |
| 193 | + }); | |
| 194 | + updateRefreshRateController(); | |
| 195 | + } | |
| 189 | 196 | } |
| 190 | 197 | |
| 191 | 198 | RefreshRateManager::RefreshRateProfile RefreshRateManager::getRefreshRateProfile() const { |
| @@ -211,7 +218,6 @@ void RefreshRateManager::setRefreshRateRegime(RefreshRateManager::RefreshRateReg · 19 unmodified lines | ||
| 211 | 218 | _refreshRateRegime = refreshRateRegime; |
| 212 | 219 | updateRefreshRateController(); |
| 213 | 220 | } |
| 214 | − | |
| 215 | 221 | } |
| 216 | 222 | |
| 217 | 223 | void RefreshRateManager::setUXMode(RefreshRateManager::UXMode uxMode) { |