14 #ifndef hifi_RefreshRateManager_h
15 #define hifi_RefreshRateManager_h
23 #include <SettingHandle.h>
24 #include <ScriptEngineCast.h>
25 #include <ScriptManager.h>
26 #include <shared/ReadWriteLockable.h>
28 class RefreshRateManager : QObject {
31 enum RefreshRateProfile {
38 Q_ENUM(RefreshRateProfile)
39 static bool isValidRefreshRateProfile(RefreshRateProfile value) {
return (value >= 0 && value < RefreshRateProfile::PROFILE_NUM); }
58 enum RefreshRateRegime {
67 Q_ENUM(RefreshRateRegime)
68 static bool isValidRefreshRateRegime(RefreshRateRegime value) {
return (value >= RefreshRateRegime::FOCUS_ACTIVE && value <= RefreshRateRegime::SHUTDOWN); }
89 static bool isValidUXMode(UXMode value) {
return (value >= UXMode::DESKTOP && value <= UXMode::VR); }
92 ~RefreshRateManager() =
default;
94 void setRefreshRateProfile(RefreshRateProfile refreshRateProfile);
95 RefreshRateProfile getRefreshRateProfile()
const;
97 void setRefreshRateRegime(RefreshRateRegime refreshRateRegime);
98 RefreshRateRegime getRefreshRateRegime()
const;
100 void setUXMode(UXMode uxMode);
101 UXMode getUXMode()
const {
return _uxMode; }
103 void setRefreshRateOperator(std::function<
void(
int)> refreshRateOperator) { _refreshRateOperator = refreshRateOperator; }
104 int getActiveRefreshRate()
const {
return _activeRefreshRate; }
105 void updateRefreshRateController()
const;
108 int queryRefreshRateTarget(RefreshRateProfile profile, RefreshRateRegime regime, UXMode uxMode)
const;
110 int getCustomRefreshRate(RefreshRateRegime regime);
111 void setCustomRefreshRate(RefreshRateRegime regime,
int value);
113 void resetInactiveTimer();
114 void toggleInactive();
116 static std::string refreshRateProfileToString(RefreshRateProfile refreshRateProfile);
117 static RefreshRateProfile refreshRateProfileFromString(std::string refreshRateProfile);
118 static std::string uxModeToString(UXMode uxMode);
119 static std::string refreshRateRegimeToString(RefreshRateRegime refreshRateRegime);
122 mutable int _activeRefreshRate { 20 };
123 RefreshRateProfile _refreshRateProfile { RefreshRateProfile::INTERACTIVE};
124 RefreshRateRegime _refreshRateRegime { RefreshRateRegime::STARTUP };
125 UXMode _uxMode { UXMode::DESKTOP };
127 mutable ReadWriteLockable _refreshRateProfileSettingLock;
128 Setting::Handle<int> _refreshRateProfileSetting{
"refreshRateProfile", RefreshRateProfile::INTERACTIVE };
129 std::array<Setting::Handle<int>, REGIME_NUM> _customRefreshRateSettings { {
130 {
"customRefreshRateFocusActive", 60 },
131 {
"customRefreshRateFocusInactive", 60 },
132 {
"customRefreshRateUnfocus", 60 },
133 {
"customRefreshRateMinimized", 2 },
134 {
"customRefreshRateStartup", 30 },
135 {
"customRefreshRateShutdown", 30 }
138 std::function<void(
int)> _refreshRateOperator {
nullptr };
140 std::shared_ptr<QTimer> _inactiveTimer { std::make_shared<QTimer>() };