From 55639889c78a7ef5d524e0a05dc84a8ce4b80e53 Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Fri, 17 Jan 2025 22:19:20 +0100 Subject: [PATCH] [util] Expose frame rate environment variable We'll need this in more places. --- src/util/util_fps_limiter.cpp | 27 +++++++++++++++++++-------- src/util/util_fps_limiter.h | 7 +++++++ 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/src/util/util_fps_limiter.cpp b/src/util/util_fps_limiter.cpp index 22780c1b9..621e9a453 100644 --- a/src/util/util_fps_limiter.cpp +++ b/src/util/util_fps_limiter.cpp @@ -13,15 +13,11 @@ using namespace std::chrono_literals; namespace dxvk { FpsLimiter::FpsLimiter() { - std::string env = env::getEnvVar("DXVK_FRAME_RATE"); + auto override = getEnvironmentOverride(); - if (!env.empty()) { - try { - setTargetFrameRate(std::stod(env), 0); - m_envOverride = true; - } catch (const std::invalid_argument&) { - // no-op - } + if (override) { + setTargetFrameRate(*override, 0); + m_envOverride = true; } } @@ -128,4 +124,19 @@ namespace dxvk { return false; } + + std::optional FpsLimiter::getEnvironmentOverride() { + std::string env = env::getEnvVar("DXVK_FRAME_RATE"); + + if (!env.empty()) { + try { + return std::stod(env); + } catch (const std::invalid_argument&) { + // no op + } + } + + return std::nullopt; + } + } diff --git a/src/util/util_fps_limiter.h b/src/util/util_fps_limiter.h index 8cde74bb2..7c33a559f 100644 --- a/src/util/util_fps_limiter.h +++ b/src/util/util_fps_limiter.h @@ -1,6 +1,7 @@ #pragma once #include +#include #include "thread.h" #include "util_time.h" @@ -39,6 +40,12 @@ namespace dxvk { */ void delay(); + /** + * \brief Queries environment override + * \returns Frame rate given by environment override + */ + static std::optional getEnvironmentOverride(); + private: using TimePoint = dxvk::high_resolution_clock::time_point;