diff --git a/web_server/app/render_2D/Gallery_Scene2D.cpp b/web_server/app/render_2D/Gallery_Scene2D.cpp index 004a070..c998dbc 100644 --- a/web_server/app/render_2D/Gallery_Scene2D.cpp +++ b/web_server/app/render_2D/Gallery_Scene2D.cpp @@ -18,6 +18,7 @@ #include #include #include +#include #include #include #include @@ -94,6 +95,20 @@ public: void set_client_metrics(Gallery_Client_Performance metrics) noexcept override { client_ = metrics; + constexpr double maximum_interval_ms = + static_cast(std::numeric_limits::max()) / + 1'000'000.0; + if (metrics.display_interval_latest_ms <= 0.0 || + metrics.display_interval_latest_ms > maximum_interval_ms) return; + const auto observed_interval_ns = static_cast( + metrics.display_interval_latest_ms * 1'000'000.0); + if (observed_interval_ns == 0) return; + const auto strategy = scene_->frame_control_strategy(); + if (auto* low_latency = + dynamic_cast(strategy.get())) { + static_cast(low_latency->set_consumer_feedback( + Frame_Consumer_Feedback{observed_interval_ns})); + } } adminive::Update_Result apply_patch( diff --git a/web_server/app/render_3D/Gallery_Scene3D.cpp b/web_server/app/render_3D/Gallery_Scene3D.cpp index b4e4eda..9a1d0d0 100644 --- a/web_server/app/render_3D/Gallery_Scene3D.cpp +++ b/web_server/app/render_3D/Gallery_Scene3D.cpp @@ -7,6 +7,7 @@ #include #include +#include #include #include #include @@ -87,6 +88,20 @@ public: void reset_monitoring() override { render_count_ = 0; } void set_client_metrics(Gallery_Client_Performance metrics) noexcept override { client_ = metrics; + constexpr double maximum_interval_ms = + static_cast(std::numeric_limits::max()) / + 1'000'000.0; + if (metrics.display_interval_latest_ms <= 0.0 || + metrics.display_interval_latest_ms > maximum_interval_ms) return; + const auto observed_interval_ns = static_cast( + metrics.display_interval_latest_ms * 1'000'000.0); + if (observed_interval_ns == 0) return; + const auto strategy = scene_->frame_control_strategy(); + if (auto* low_latency = + dynamic_cast(strategy.get())) { + static_cast(low_latency->set_consumer_feedback( + Frame_Consumer_Feedback{observed_interval_ns})); + } } adminive::Update_Result apply_patch( std::string_view, const nlohmann::json&) override {