修复webserver死锁

This commit is contained in:
2026-08-17 20:38:43 +08:00
parent 47cf1af7a5
commit 03433a412a
16 changed files with 160 additions and 349 deletions
+29 -22
View File
@@ -56,7 +56,7 @@ Json parse_object(std::string_view text) {
return value.is_object() ? std::move(value) : Json::object();
}
Json actions() {
return Json::array({
Json result = Json::array({
{{"id", "frame_strategy_low_latency"}, {"label", "Low latency"},
{"api", "Renderable_Editor::replace_frame_control_strategy"},
{"group", "Frame strategy"}, {"request_frame", true}},
@@ -65,18 +65,25 @@ Json actions() {
{"group", "Frame strategy"}, {"request_frame", true}},
{{"id", "frame_strategy_playback"}, {"label", "Playback"},
{"api", "Renderable_Editor::replace_frame_control_strategy"},
{"group", "Frame strategy"}, {"request_frame", true}},
{{"id", "mode_render"}, {"label", "Render frame"},
{"api", "Scene::render"}, {"group", "Frame"}, {"request_frame", true}},
{{"id", "capture_next_frame"}, {"label", "Capture next frame"},
{"api", "Scene_Base::capture_next_frame"}, {"group", "Performance Capture"},
{"request_frame", true}},
{{"id", "capture_frames"}, {"label", "Capture N frames"},
{"api", "Scene_Base::capture_frames"}, {"group", "Performance Capture"},
{"argument_input", "number"}, {"argument_default", 20}, {"request_frame", true}},
{{"id", "reset"}, {"label", "Reset scene"},
{"api", "Scene::Builder"}, {"group", "Scene"}, {"request_frame", true}}
{"group", "Frame strategy"}, {"request_frame", true}}
});
result.push_back({
{"id", "capture_next_frame"}, {"label", "Capture next frame"},
{"api", "Scene_Base::capture_next_frame"},
{"group", "Performance Capture"}, {"request_frame", true}
});
result.push_back({
{"id", "capture_frames"}, {"label", "Capture N frames"},
{"api", "Scene_Base::capture_frames"}, {"group", "Performance Capture"},
{"argument_input", "number"}, {"argument_default", 20},
{"request_frame", true}
});
result.push_back({
{"id", "reset"}, {"label", "Reset scene"},
{"api", "Scene::Builder"}, {"group", "Scene"},
{"request_frame", true}
});
return result;
}
template <class T>
Gallery_Request_Result<T> fail(Gallery_Request_Error error) {
@@ -93,7 +100,7 @@ std::string Gallery_Protocol::catalog_json() {
{"category", item.category}, {"description", "Live Renderive scene"},
{"order", index},
{"control_count_by_mode", {{"manual", 0}, {"low_latency", 0}, {"playback", 0}}},
{"action_count_by_mode", {{"manual", 7}, {"low_latency", 7}, {"playback", 7}}}
{"action_count_by_mode", {{"manual", 6}, {"low_latency", 6}, {"playback", 6}}}
});
}
Json field_mode{{"label", "Mode"}, {"source", "kernel_observer.mode"}};
@@ -119,14 +126,14 @@ std::string Gallery_Protocol::catalog_json() {
{"frame_button_label", "Render frame"}},
{{"id", "playback"}, {"title", "Playback"}, {"strategy", "Flow"},
{"description", "Ordered frame playback"}, {"order", 2}, {"accent", "#84b3ce"},
{"automatic", false}, {"request_after_response", false},
{"automatic", true}, {"request_after_response", false},
{"request_on_animation_frame", true}, {"observer_visible", true},
{"frame_button_label", "Render frame"}}
})},
{"cases", std::move(published_cases)},
{"coverage", {{"case_count", cases.size()}, {"page_count", 1},
{"canvas_count", cases.size()}, {"manual_control_count", 0},
{"manual_action_count", cases.size() * 7}}},
{"manual_action_count", cases.size() * 6}}},
{"dashboard", {
{"performance", {{"fields", Json::array({
{{"label", "Rendered"}, {"source", "performance.successful_render_count"},
@@ -232,13 +239,13 @@ Gallery_Protocol::control_patch_request(std::string_view message) {
}
bool Gallery_Protocol::action_available(std::string_view case_id,
Gallery_Frame_Mode,
std::string_view action_id) {
return is_case(case_id) &&
(action_id == "reset" || action_id == "mode_render" ||
action_id == "capture_next_frame" || action_id == "capture_frames" ||
action_id == "frame_strategy_low_latency" ||
action_id == "frame_strategy_manual" ||
action_id == "frame_strategy_playback");
if (!is_case(case_id))
return false;
return action_id == "reset" || action_id == "capture_next_frame" ||
action_id == "capture_frames" ||
action_id == "frame_strategy_low_latency" ||
action_id == "frame_strategy_manual" ||
action_id == "frame_strategy_playback";
}
} // namespace renderive::web