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 | * <tr><td><code>"Interactive"</code></td><td>Medium refresh rate, which is reduced when Interface doesn't have focus or is | 48 | * <tr><td><code>"Interactive"</code></td><td>Medium refresh rate, which is reduced when Interface doesn't have focus or is |
| 49 | * minimized.</td></tr> | 49 | * minimized.</td></tr> |
| 50 | * <tr><td><code>"Realtime"</code></td><td>High refresh rate, even when Interface doesn't have focus or is minimized. | 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 | * </tbody> | 52 | * </tbody> |
| 52 | * </table> | 53 | * </table> |
| 53 | * @typedef {string} RefreshRateProfileName | 54 | * @typedef {string} RefreshRateProfileName |
| 54 | */ | 55 | */ |
| 55 | static const std::array<std::string, RefreshRateManager::RefreshRateProfile::PROFILE_NUM> REFRESH_RATE_PROFILE_TO_STRING = | 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 | /*@jsdoc | 59 | /*@jsdoc |
| 59 | * <p>Interface states that affect the refresh rate.</p> | 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 | { { 30, 20, 10, 2, 30, 30 } }; | 109 | { { 30, 20, 10, 2, 30, 30 } }; |
| 109 | 110 | ||
| 110 | static const std::array<int, RefreshRateManager::RefreshRateRegime::REGIME_NUM> REALTIME_PROFILE = | 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 | static const std::array<int, RefreshRateManager::RefreshRateRegime::REGIME_NUM> CUSTOM_PROFILE = REALTIME_PROFILE; // derived from settings and modified by scripts below |
| 114 | { { ECO_PROFILE, INTERACTIVE_PROFILE, REALTIME_PROFILE } }; | 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 | static const int INACTIVE_TIMER_LIMIT = 3000; | 120 | static const int INACTIVE_TIMER_LIMIT = 3000; |
| @@ -135,6 +138,10 @@ std::string RefreshRateManager::uxModeToString(RefreshRateManager::RefreshRateMa · 17 unmodified lines | |||
| 135 | 138 | ||
| 136 | RefreshRateManager::RefreshRateManager() { | 139 | RefreshRateManager::RefreshRateManager() { |
| 137 | _refreshRateProfile = (RefreshRateManager::RefreshRateProfile) _refreshRateProfileSetting.get(); | 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 | _inactiveTimer->setInterval(INACTIVE_TIMER_LIMIT); | 145 | _inactiveTimer->setInterval(INACTIVE_TIMER_LIMIT); |
| 139 | _inactiveTimer->setSingleShot(true); | 146 | _inactiveTimer->setSingleShot(true); |
| 140 | QObject::connect(_inactiveTimer.get(), &QTimer::timeout, [&] { | 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) | 179 | int RefreshRateManager::getCustomRefreshRate(RefreshRateRegime regime) { |
| 173 | { | 180 | if (isValidRefreshRateRegime(regime)) { |
| 174 | Q_ASSERT(regime >= 0 && regime < RefreshRateRegime::REGIME_NUM); | 181 | return REFRESH_RATE_PROFILES[RefreshRateProfile::CUSTOM][regime]; |
| 175 | if (regime < 0 && regime >= RefreshRateRegime::REGIME_NUM) | 182 | } |
| 176 | return -1; | ||
| 177 | 183 | ||
| 178 | return _customProfile[regime]; | 184 | return 0; |
| 179 | } | 185 | } |
| 180 | 186 | ||
| 181 | int RefreshRateManager::setCustomRefreshRate(RefreshRateRegime regime, int value) | 187 | void RefreshRateManager::setCustomRefreshRate(RefreshRateRegime regime, int value) { |
| 182 | { | 188 | value = std::max(value, 1); |
| 183 | Q_ASSERT(regime >= 0 && regime < RefreshRateRegime::REGIME_NUM); | 189 | if (isValidRefreshRateRegime(regime)) { |
| 184 | if (regime < 0 && regime >= RefreshRateRegime::REGIME_NUM) | 190 | _refreshRateProfileSettingLock.withWriteLock([&] { |
| 185 | return -1; | 191 | REFRESH_RATE_PROFILES[RefreshRateProfile::CUSTOM][regime] = value; |
| 186 | 192 | _customRefreshRateSettings[regime].set(value); | |
| 187 | _customProfile[regime] = value; | 193 | }); |
| 188 | return 0; | 194 | updateRefreshRateController(); |
| 195 | } | ||
| 189 | } | 196 | } |
| 190 | 197 | ||
| 191 | RefreshRateManager::RefreshRateProfile RefreshRateManager::getRefreshRateProfile() const { | 198 | RefreshRateManager::RefreshRateProfile RefreshRateManager::getRefreshRateProfile() const { |
| @@ -211,7 +218,6 @@ void RefreshRateManager::setRefreshRateRegime(RefreshRateManager::RefreshRateReg · 19 unmodified lines | |||
| 211 | _refreshRateRegime = refreshRateRegime; | 218 | _refreshRateRegime = refreshRateRegime; |
| 212 | updateRefreshRateController(); | 219 | updateRefreshRateController(); |
| 213 | } | 220 | } |
| 214 | |||
| 215 | } | 221 | } |
| 216 | 222 | ||
| 217 | void RefreshRateManager::setUXMode(RefreshRateManager::UXMode uxMode) { | 223 | void RefreshRateManager::setUXMode(RefreshRateManager::UXMode uxMode) { |