修复webserver死锁
This commit is contained in:
@@ -69,9 +69,8 @@ Visual_Family visual_family(std::string_view case_id) {
|
||||
|
||||
class Gallery_Scene3D final : public Gallery_Scene_Interface {
|
||||
public:
|
||||
Gallery_Scene3D(std::string case_id, Gallery_Frame_Mode mode,
|
||||
bool automatic)
|
||||
: case_id_(std::move(case_id)), mode_(mode), automatic_(automatic) {
|
||||
Gallery_Scene3D(std::string case_id, Gallery_Frame_Mode mode)
|
||||
: case_id_(std::move(case_id)), mode_(mode) {
|
||||
rebuild();
|
||||
}
|
||||
|
||||
@@ -86,12 +85,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;
|
||||
}
|
||||
@@ -109,11 +102,11 @@ public:
|
||||
}
|
||||
void dispatch(const Gallery_Input_Event&) override {}
|
||||
|
||||
Gallery_Render_Result render_latest_frame() override {
|
||||
bool request_frame() override {
|
||||
if (scene_->request_frame() != Frame_Request_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 {
|
||||
@@ -152,14 +145,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;
|
||||
@@ -167,7 +155,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;
|
||||
@@ -203,12 +190,10 @@ private:
|
||||
state.visual_family = visual_family(case_id_);
|
||||
scene_ = Render_Scene_3D::Builder{state}.build(
|
||||
visual_, make_strategy(mode_));
|
||||
static_cast<void>(scene_->request_frame());
|
||||
}
|
||||
|
||||
std::string case_id_;
|
||||
Gallery_Frame_Mode mode_;
|
||||
bool automatic_{};
|
||||
Extent extent_{560, 320};
|
||||
std::shared_ptr<Point_Visual> visual_;
|
||||
std::unique_ptr<Render_Scene_3D> scene_;
|
||||
@@ -218,9 +203,7 @@ private:
|
||||
} // namespace
|
||||
|
||||
std::unique_ptr<Gallery_Scene_Interface> make_gallery_scene_3d(
|
||||
std::uint64_t, std::string case_id, Gallery_Frame_Mode mode,
|
||||
bool automatic_low_latency) {
|
||||
return std::make_unique<Gallery_Scene3D>(
|
||||
std::move(case_id), mode, automatic_low_latency);
|
||||
std::uint64_t, std::string case_id, Gallery_Frame_Mode mode) {
|
||||
return std::make_unique<Gallery_Scene3D>(std::move(case_id), mode);
|
||||
}
|
||||
} // namespace renderive::web
|
||||
|
||||
Reference in New Issue
Block a user