Port FluidSim core and scenarios to C++20
This commit is contained in:
24
include/FluidSim/ThreadLoadTracker.hpp
Normal file
24
include/FluidSim/ThreadLoadTracker.hpp
Normal file
@@ -0,0 +1,24 @@
|
||||
#pragma once
|
||||
|
||||
#include <atomic>
|
||||
|
||||
namespace fluidsim::port {
|
||||
|
||||
class ThreadLoadTracker {
|
||||
public:
|
||||
void record(double busy_milliseconds, double budget_milliseconds) {
|
||||
if (budget_milliseconds <= 0.0) return;
|
||||
constexpr double alpha = 0.05;
|
||||
const double instant = busy_milliseconds / budget_milliseconds * 100.0;
|
||||
const double previous = load_percent_.load(std::memory_order_relaxed);
|
||||
load_percent_.store(previous + alpha * (instant - previous), std::memory_order_relaxed);
|
||||
last_busy_ms_.store(busy_milliseconds, std::memory_order_relaxed);
|
||||
}
|
||||
double load_percent() const { return load_percent_.load(std::memory_order_relaxed); }
|
||||
double last_step_microseconds() const { return last_busy_ms_.load(std::memory_order_relaxed) * 1000.0; }
|
||||
private:
|
||||
std::atomic<double> load_percent_{};
|
||||
std::atomic<double> last_busy_ms_{};
|
||||
};
|
||||
|
||||
} // namespace fluidsim::port
|
||||
Reference in New Issue
Block a user