修复webserver死锁
This commit is contained in:
@@ -70,9 +70,8 @@ Time_Of_Day current_time_of_day() {
|
||||
|
||||
class Gallery_Scene2D final : public Gallery_Scene_Interface {
|
||||
public:
|
||||
Gallery_Scene2D(std::string case_id, Gallery_Frame_Mode mode,
|
||||
bool automatic)
|
||||
: case_id_(std::move(case_id)), mode_(mode), automatic_(automatic) {
|
||||
Gallery_Scene2D(std::string case_id, Gallery_Frame_Mode mode)
|
||||
: case_id_(std::move(case_id)), mode_(mode) {
|
||||
rebuild();
|
||||
}
|
||||
|
||||
@@ -93,14 +92,6 @@ public:
|
||||
Gallery_Frame_Mode frame_mode() const noexcept override { return mode_; }
|
||||
void reset_monitoring() override { render_count_ = 0; }
|
||||
|
||||
bool can_render_automatically() const noexcept override {
|
||||
return automatic_ && mode_ == Gallery_Frame_Mode::Low_Latency;
|
||||
}
|
||||
|
||||
std::uint64_t kernel_refresh_interval_ns() const override {
|
||||
return scene_->observer().next_refresh_interval_ns;
|
||||
}
|
||||
|
||||
void set_client_metrics(Gallery_Client_Performance metrics) noexcept override {
|
||||
client_ = metrics;
|
||||
}
|
||||
@@ -129,18 +120,15 @@ public:
|
||||
}, event);
|
||||
}
|
||||
|
||||
Gallery_Render_Result render_latest_frame() override {
|
||||
bool request_frame() override {
|
||||
update_samples();
|
||||
const auto result = scene_->render_frame(true);
|
||||
if (!result) return Gallery_Render_Result::backend_failure;
|
||||
if (*result == Plot_Render_Status::view_inactive)
|
||||
return Gallery_Render_Result::inactive;
|
||||
if (*result != Plot_Render_Status::rendered)
|
||||
return Gallery_Render_Result::frame_unavailable;
|
||||
if (!result || *result != Plot_Render_Status::rendered)
|
||||
return false;
|
||||
if (scene_->wait_for_render() != Scene_Render_Result::none)
|
||||
return Gallery_Render_Result::backend_failure;
|
||||
return false;
|
||||
++render_count_;
|
||||
return Gallery_Render_Result::none;
|
||||
return true;
|
||||
}
|
||||
|
||||
std::optional<std::string> encode_latest_pixels() override {
|
||||
@@ -178,14 +166,9 @@ public:
|
||||
mode_ = next;
|
||||
return "frame strategy replaced";
|
||||
}
|
||||
if (request.id == "mode_cycle" || request.id == "mode_render") {
|
||||
static_cast<void>(render_latest_frame());
|
||||
return "frame rendered";
|
||||
}
|
||||
if (request.id == "capture_next_frame") {
|
||||
const auto capture = scene_->capture_next_frame();
|
||||
if (capture) static_cast<void>(render_latest_frame());
|
||||
return capture ? "frame captured" : "capture request rejected";
|
||||
return capture ? "capture request accepted" : "capture request rejected";
|
||||
}
|
||||
if (request.id == "capture_frames") {
|
||||
std::size_t count = 20;
|
||||
@@ -193,7 +176,6 @@ public:
|
||||
count = static_cast<std::size_t>(std::clamp(
|
||||
std::get<double>(*request.argument), 1.0, 1000.0));
|
||||
const auto capture = scene_->capture_frames(count);
|
||||
if (capture) static_cast<void>(render_latest_frame());
|
||||
return capture ? "frame capture started" : "capture request rejected";
|
||||
}
|
||||
recognized = false;
|
||||
@@ -379,9 +361,6 @@ private:
|
||||
}
|
||||
|
||||
scene_->activate_view();
|
||||
update_samples();
|
||||
static_cast<void>(scene_->render_frame(true));
|
||||
static_cast<void>(scene_->wait_for_render());
|
||||
}
|
||||
|
||||
void update_samples() {
|
||||
@@ -437,7 +416,6 @@ private:
|
||||
|
||||
std::string case_id_;
|
||||
Gallery_Frame_Mode mode_;
|
||||
bool automatic_{};
|
||||
Size viewport_{560, 320};
|
||||
std::unique_ptr<Render_Scene_2D> scene_;
|
||||
renderive_Owner<Frequency_Axis> frequency_axis_;
|
||||
@@ -458,9 +436,7 @@ private:
|
||||
} // namespace
|
||||
|
||||
std::unique_ptr<Gallery_Scene_Interface> make_gallery_scene_2d(
|
||||
std::uint64_t, std::string case_id, Gallery_Frame_Mode mode,
|
||||
bool automatic_low_latency) {
|
||||
return std::make_unique<Gallery_Scene2D>(
|
||||
std::move(case_id), mode, automatic_low_latency);
|
||||
std::uint64_t, std::string case_id, Gallery_Frame_Mode mode) {
|
||||
return std::make_unique<Gallery_Scene2D>(std::move(case_id), mode);
|
||||
}
|
||||
} // namespace renderive::web
|
||||
|
||||
@@ -4,5 +4,5 @@
|
||||
#include <memory>
|
||||
#include <string>
|
||||
namespace renderive::web {
|
||||
[[nodiscard]] std::unique_ptr<Gallery_Scene_Interface> make_gallery_scene_2d(std::uint64_t session_id, std::string case_id, Gallery_Frame_Mode mode, bool automatic_low_latency);
|
||||
[[nodiscard]] std::unique_ptr<Gallery_Scene_Interface> make_gallery_scene_2d(std::uint64_t session_id, std::string case_id, Gallery_Frame_Mode mode);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user