Applying my own comments, and refining the profile values

This commit is contained in:
Sam Gateau 2019-05-02 00:54:00 -07:00
parent d031e8806a
commit 531ec14253
2 changed files with 27 additions and 44 deletions

View file

@ -20,7 +20,7 @@
#include <display-plugins/hmd/HmdDisplayPlugin.h> #include <display-plugins/hmd/HmdDisplayPlugin.h>
static const int HMD_TARGET_RATE = 90; static const int VR_TARGET_RATE = 90;
static const std::array<std::string, RefreshRateManager::RefreshRateProfile::PROFILE_NUM> REFRESH_RATE_PROFILE_TO_STRING = static const std::array<std::string, RefreshRateManager::RefreshRateProfile::PROFILE_NUM> REFRESH_RATE_PROFILE_TO_STRING =
{ { "Eco", "Interactive", "Realtime" } }; { { "Eco", "Interactive", "Realtime" } };
@ -38,13 +38,13 @@ static const std::map<std::string, RefreshRateManager::RefreshRateProfile> REFRE
// Porfile regimes are: // Porfile regimes are:
// { { "Focus_Active", "Focus_Inactive", "Unfocus", "Minimized", "StartUp", "ShutDown" } } // { { "FocusActive", "FocusInactive", "Unfocus", "Minimized", "StartUp", "ShutDown" } }
static const std::array<int, RefreshRateManager::RefreshRateRegime::REGIME_NUM> ECO_PROFILE = static const std::array<int, RefreshRateManager::RefreshRateRegime::REGIME_NUM> ECO_PROFILE =
{ { 15, 5, 5, 2, 30, 30 } }; { { 20, 10, 5, 2, 30, 30 } };
static const std::array<int, RefreshRateManager::RefreshRateRegime::REGIME_NUM> INTERACTIVE_PROFILE = static const std::array<int, RefreshRateManager::RefreshRateRegime::REGIME_NUM> INTERACTIVE_PROFILE =
{ { 30, 20, 5, 2, 30, 30 } }; { { 30, 20, 10, 2, 30, 30 } };
static const std::array<int, RefreshRateManager::RefreshRateRegime::REGIME_NUM> REALTIME_PROFILE = static const std::array<int, RefreshRateManager::RefreshRateRegime::REGIME_NUM> REALTIME_PROFILE =
{ { 60, 60, 10, 2, 30, 30} }; { { 60, 60, 10, 2, 30, 30} };
@ -73,14 +73,11 @@ std::string RefreshRateManager::uxModeToString(RefreshRateManager::RefreshRateMa
} }
RefreshRateManager::RefreshRateManager() { RefreshRateManager::RefreshRateManager() {
_refreshRateProfile = (RefreshRateManager::RefreshRateProfile) _refreshRateMode.get(); _refreshRateProfile = (RefreshRateManager::RefreshRateProfile) _refreshRateProfileSetting.get();
_inactiveTimer->setInterval(INACTIVE_TIMER_LIMIT); _inactiveTimer->setInterval(INACTIVE_TIMER_LIMIT);
_inactiveTimer->setSingleShot(true); _inactiveTimer->setSingleShot(true);
QObject::connect(_inactiveTimer.get(), &QTimer::timeout, [&] { QObject::connect(_inactiveTimer.get(), &QTimer::timeout, [&] {
if (_uxMode == RefreshRateManager::UXMode::DESKTOP && toggleInactive();
getRefreshRateRegime() == RefreshRateManager::RefreshRateRegime::FOCUS_ACTIVE) {
setRefreshRateRegime(RefreshRateManager::RefreshRateRegime::FOCUS_INACTIVE);
}
}); });
} }
@ -91,11 +88,18 @@ void RefreshRateManager::resetInactiveTimer() {
} }
} }
void RefreshRateManager::toggleInactive() {
if (_uxMode == RefreshRateManager::UXMode::DESKTOP &&
getRefreshRateRegime() == RefreshRateManager::RefreshRateRegime::FOCUS_ACTIVE) {
setRefreshRateRegime(RefreshRateManager::RefreshRateRegime::FOCUS_INACTIVE);
}
}
void RefreshRateManager::setRefreshRateProfile(RefreshRateManager::RefreshRateProfile refreshRateProfile) { void RefreshRateManager::setRefreshRateProfile(RefreshRateManager::RefreshRateProfile refreshRateProfile) {
if (_refreshRateProfile != refreshRateProfile) { if (_refreshRateProfile != refreshRateProfile) {
_refreshRateModeLock.withWriteLock([&] { _refreshRateProfileSettingLock.withWriteLock([&] {
_refreshRateProfile = refreshRateProfile; _refreshRateProfile = refreshRateProfile;
_refreshRateMode.set((int) refreshRateProfile); _refreshRateProfileSetting.set((int) refreshRateProfile);
}); });
updateRefreshRateController(); updateRefreshRateController();
} }
@ -105,8 +109,8 @@ RefreshRateManager::RefreshRateProfile RefreshRateManager::getRefreshRateProfile
RefreshRateManager::RefreshRateProfile profile = RefreshRateManager::RefreshRateProfile::REALTIME; RefreshRateManager::RefreshRateProfile profile = RefreshRateManager::RefreshRateProfile::REALTIME;
if (getUXMode() != RefreshRateManager::UXMode::VR) { if (getUXMode() != RefreshRateManager::UXMode::VR) {
profile =(RefreshRateManager::RefreshRateProfile) _refreshRateModeLock.resultWithReadLock<int>([&] { profile =(RefreshRateManager::RefreshRateProfile) _refreshRateProfileSettingLock.resultWithReadLock<int>([&] {
return _refreshRateMode.get(); return _refreshRateProfileSetting.get();
}); });
} }
@ -114,8 +118,11 @@ RefreshRateManager::RefreshRateProfile RefreshRateManager::getRefreshRateProfile
} }
RefreshRateManager::RefreshRateRegime RefreshRateManager::getRefreshRateRegime() const { RefreshRateManager::RefreshRateRegime RefreshRateManager::getRefreshRateRegime() const {
return getUXMode() == RefreshRateManager::UXMode::VR ? RefreshRateManager::RefreshRateRegime::FOCUS_ACTIVE : if (getUXMode() == RefreshRateManager::UXMode::VR) {
_refreshRateRegime; return RefreshRateManager::RefreshRateRegime::FOCUS_ACTIVE;
} else {
return _refreshRateRegime;
}
} }
void RefreshRateManager::setRefreshRateRegime(RefreshRateManager::RefreshRateRegime refreshRateRegime) { void RefreshRateManager::setRefreshRateRegime(RefreshRateManager::RefreshRateRegime refreshRateRegime) {
@ -137,31 +144,12 @@ void RefreshRateManager::updateRefreshRateController() const {
if (_refreshRateOperator) { if (_refreshRateOperator) {
int targetRefreshRate; int targetRefreshRate;
if (_uxMode == RefreshRateManager::UXMode::DESKTOP) { if (_uxMode == RefreshRateManager::UXMode::DESKTOP) {
if (_refreshRateRegime == RefreshRateManager::RefreshRateRegime::FOCUS_ACTIVE &&
_refreshRateProfile == RefreshRateManager::RefreshRateProfile::INTERACTIVE) {
targetRefreshRate = getInteractiveRefreshRate();
} else {
targetRefreshRate = REFRESH_RATE_PROFILES[_refreshRateProfile][_refreshRateRegime]; targetRefreshRate = REFRESH_RATE_PROFILES[_refreshRateProfile][_refreshRateRegime];
}
} else { } else {
targetRefreshRate = HMD_TARGET_RATE; targetRefreshRate = VR_TARGET_RATE;
} }
_refreshRateOperator(targetRefreshRate); _refreshRateOperator(targetRefreshRate);
_activeRefreshRate = targetRefreshRate; _activeRefreshRate = targetRefreshRate;
} }
} }
void RefreshRateManager::setInteractiveRefreshRate(int refreshRate) {
_refreshRateLock.withWriteLock([&] {
_interactiveRefreshRate.set(refreshRate);
});
updateRefreshRateController();
}
int RefreshRateManager::getInteractiveRefreshRate() const {
return _refreshRateLock.resultWithReadLock<int>([&] {
return _interactiveRefreshRate.get();
});
}

View file

@ -60,10 +60,9 @@ public:
void setRefreshRateOperator(std::function<void(int)> refreshRateOperator) { _refreshRateOperator = refreshRateOperator; } void setRefreshRateOperator(std::function<void(int)> refreshRateOperator) { _refreshRateOperator = refreshRateOperator; }
int getActiveRefreshRate() const { return _activeRefreshRate; } int getActiveRefreshRate() const { return _activeRefreshRate; }
void updateRefreshRateController() const; void updateRefreshRateController() const;
void setInteractiveRefreshRate(int refreshRate);
int getInteractiveRefreshRate() const;
void resetInactiveTimer(); void resetInactiveTimer();
void toggleInactive();
static std::string refreshRateProfileToString(RefreshRateProfile refreshRateProfile); static std::string refreshRateProfileToString(RefreshRateProfile refreshRateProfile);
static RefreshRateProfile refreshRateProfileFromString(std::string refreshRateProfile); static RefreshRateProfile refreshRateProfileFromString(std::string refreshRateProfile);
@ -71,20 +70,16 @@ public:
static std::string refreshRateRegimeToString(RefreshRateRegime refreshRateRegime); static std::string refreshRateRegimeToString(RefreshRateRegime refreshRateRegime);
private: private:
mutable ReadWriteLockable _refreshRateLock;
mutable ReadWriteLockable _refreshRateModeLock;
mutable int _activeRefreshRate { 20 }; mutable int _activeRefreshRate { 20 };
RefreshRateProfile _refreshRateProfile { RefreshRateProfile::INTERACTIVE}; RefreshRateProfile _refreshRateProfile { RefreshRateProfile::INTERACTIVE};
RefreshRateRegime _refreshRateRegime { RefreshRateRegime::STARTUP }; RefreshRateRegime _refreshRateRegime { RefreshRateRegime::STARTUP };
UXMode _uxMode; UXMode _uxMode;
Setting::Handle<int> _interactiveRefreshRate { "interactiveRefreshRate", 20}; mutable ReadWriteLockable _refreshRateProfileSettingLock;
Setting::Handle<int> _refreshRateMode { "refreshRateProfile", INTERACTIVE }; Setting::Handle<int> _refreshRateProfileSetting { "refreshRateProfile", RefreshRateProfile::INTERACTIVE };
std::function<void(int)> _refreshRateOperator { nullptr }; std::function<void(int)> _refreshRateOperator { nullptr };
std::shared_ptr<QTimer> _inactiveTimer { std::make_shared<QTimer>() }; std::shared_ptr<QTimer> _inactiveTimer { std::make_shared<QTimer>() };
}; };