diff options
| author | Per Larsson <[email protected]> | 2021-12-16 10:49:03 +0100 |
|---|---|---|
| committer | Per Larsson <[email protected]> | 2021-12-16 10:49:03 +0100 |
| commit | 8888bc04fb8c9bca7b32d61f98bd437bbb4826c8 (patch) | |
| tree | 7568360f26a557cf6dc4482bef00bc33eaf6bbc2 /zencore/stats.cpp | |
| parent | A little better bundle task with trace support. (diff) | |
| parent | Use a CAS loop if atomic<Floating>::fetch_add() isn't available (diff) | |
| download | zen-8888bc04fb8c9bca7b32d61f98bd437bbb4826c8.tar.xz zen-8888bc04fb8c9bca7b32d61f98bd437bbb4826c8.zip | |
Merge branch 'main' of https://github.com/EpicGames/zen
Diffstat (limited to 'zencore/stats.cpp')
| -rw-r--r-- | zencore/stats.cpp | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/zencore/stats.cpp b/zencore/stats.cpp index 1bb6f6de0..595c45c3f 100644 --- a/zencore/stats.cpp +++ b/zencore/stats.cpp @@ -46,7 +46,19 @@ RawEWMA::Tick(double Alpha, uint64_t Interval, uint64_t Count, bool IsInitialUpd } else { - m_Rate.fetch_add(Alpha * (InstantRate - m_Rate)); + double Delta = Alpha * (InstantRate - m_Rate); + +#if defined(__cpp_lib_atomic_float) + m_Rate.fetch_add(Delta); +#else + double Value = m_Rate.load(std::memory_order_acquire); + double Next; + do + { + Next = Value + Delta; + } + while (!m_Rate.compare_exchange_weak(Value, Next, std::memory_order_relaxed)); +#endif } } |