修复若干问题
This commit is contained in:
@@ -143,12 +143,24 @@ std::optional<double> action_number(const Gallery_Action_Request& request) {
|
||||
return std::nullopt;
|
||||
return std::get<double>(*request.argument);
|
||||
}
|
||||
|
||||
Plot_Frame_Mode plot_frame_mode(Gallery_Frame_Mode mode) {
|
||||
switch (mode) {
|
||||
case Gallery_Frame_Mode::Manual:
|
||||
return Plot_Frame_Mode::Manual;
|
||||
case Gallery_Frame_Mode::Low_Latency:
|
||||
return Plot_Frame_Mode::Low_Latency;
|
||||
case Gallery_Frame_Mode::Playback:
|
||||
return Plot_Frame_Mode::Playback;
|
||||
}
|
||||
throw std::invalid_argument("unknown gallery frame mode");
|
||||
}
|
||||
} // namespace
|
||||
template <class Scene_Type>
|
||||
class Gallery_Scene final : public Gallery_Scene_Interface {
|
||||
public:
|
||||
Gallery_Scene(std::uint64_t session_id, std::string case_id, Gallery_Frame_Mode frame_mode, bool automatic_low_latency)
|
||||
: session_id_(session_id), case_id_(std::move(case_id)), frame_mode_(frame_mode), automatic_low_latency_(automatic_low_latency), performance_started_(std::chrono::steady_clock::now()) {
|
||||
: session_id_(session_id), case_id_(std::move(case_id)), frame_mode_(frame_mode), automatic_low_latency_(automatic_low_latency),
|
||||
plot_(Plot_Scene_Options{plot_frame_mode(frame_mode)}), performance_started_(std::chrono::steady_clock::now()) {
|
||||
plot_.init();
|
||||
plot_.set_viewport_size({560, 320});
|
||||
root_ = plot_.root_renderable();
|
||||
@@ -172,7 +184,7 @@ public:
|
||||
}
|
||||
attach_performance_overlay(plot_);
|
||||
apply_layout();
|
||||
session_control_ = std::make_unique<Gallery_Session_Control<Scene_Type>>(
|
||||
session_control_ = std::make_unique<Gallery_Session_Control<Plot_Scene>>(
|
||||
plot_, *primary_, feedback_policy_);
|
||||
register_controls();
|
||||
set_performance_plot_name(plot_, case_id_ + "/" + gallery_enum_id(frame_mode_));
|
||||
@@ -193,9 +205,9 @@ public:
|
||||
[[nodiscard]] nlohmann::json controls() const {
|
||||
return {
|
||||
{"resources", controls_.resources()},
|
||||
{"observers", controls_.observers(plot_)},
|
||||
{"render_plan", controls_.render_plan(plot_)},
|
||||
{"performance_capture", gallery_performance_capture_json(plot_)}
|
||||
{"observers", controls_.observers(plot_.render_scene())},
|
||||
{"render_plan", controls_.render_plan(plot_.render_scene())},
|
||||
{"performance_capture", gallery_performance_capture_json(plot_.render_scene())}
|
||||
};
|
||||
}
|
||||
[[nodiscard]] Gallery_Frame_Mode frame_mode() const noexcept {
|
||||
@@ -262,7 +274,7 @@ public:
|
||||
}
|
||||
apply_layout();
|
||||
update_model();
|
||||
plot_.notify_model_dirty();
|
||||
plot_.request_redraw();
|
||||
return result;
|
||||
}
|
||||
void resize(int width, int height) override {
|
||||
@@ -351,10 +363,10 @@ public:
|
||||
last_action_result_.clear();
|
||||
recognized = true;
|
||||
if (request.id == "capture_next_frame") {
|
||||
const auto state = plot_.capture_state();
|
||||
const auto state = plot_.render_scene().capture_state();
|
||||
if (state.enabled())
|
||||
return "A performance capture session is already active";
|
||||
const auto session_id = plot_.capture_next_frame();
|
||||
const auto session_id = plot_.render_scene().capture_next_frame();
|
||||
last_action_result_ = "capture session=" + std::to_string(session_id);
|
||||
return "Capture next render frame requested";
|
||||
}
|
||||
@@ -364,10 +376,10 @@ public:
|
||||
return invalid_argument(recognized);
|
||||
const std::size_t count = static_cast<std::size_t>(
|
||||
std::clamp(std::llround(*argument), 1LL, 1000LL));
|
||||
const auto state = plot_.capture_state();
|
||||
const auto state = plot_.render_scene().capture_state();
|
||||
if (state.enabled())
|
||||
return "A performance capture session is already active";
|
||||
const auto session_id = plot_.capture_frames(count);
|
||||
const auto session_id = plot_.render_scene().capture_frames(count);
|
||||
last_action_result_ = "capture session=" + std::to_string(session_id) +
|
||||
", frames=" + std::to_string(count);
|
||||
return "Consecutive render frame capture requested";
|
||||
@@ -557,7 +569,7 @@ public:
|
||||
last_action_result_ = notice;
|
||||
}
|
||||
[[nodiscard]] std::string telemetry_json() const {
|
||||
const auto observer = plot_.frame_observer_snapshot();
|
||||
const auto observer = plot_.frame_status();
|
||||
const auto telemetry_now = std::chrono::steady_clock::now();
|
||||
const double elapsed_seconds = std::max(
|
||||
std::chrono::duration<double>(telemetry_now - performance_started_).count(),
|
||||
@@ -641,8 +653,8 @@ public:
|
||||
{"kernel_observer", std::move(observer_data)},
|
||||
{"consumer_feedback", std::move(consumer_feedback_data)},
|
||||
{"client_performance", std::move(client_performance_data)},
|
||||
{"renderable_observers", controls_.observers(plot_)},
|
||||
{"performance_capture", gallery_performance_capture_json(plot_)},
|
||||
{"renderable_observers", controls_.observers(plot_.render_scene())},
|
||||
{"performance_capture", gallery_performance_capture_json(plot_.render_scene())},
|
||||
{"last_action_result", last_action_result_}
|
||||
};
|
||||
if (primary_) {
|
||||
@@ -925,7 +937,7 @@ private:
|
||||
if (now - last_performance_log_ < std::chrono::seconds(1))
|
||||
return;
|
||||
last_performance_log_ = now;
|
||||
const auto observer = plot_.frame_observer_snapshot();
|
||||
const auto observer = plot_.frame_status();
|
||||
const auto unix_ms = std::chrono::duration_cast<std::chrono::milliseconds>(
|
||||
std::chrono::system_clock::now().time_since_epoch())
|
||||
.count();
|
||||
@@ -1344,9 +1356,9 @@ private:
|
||||
std::string case_id_;
|
||||
Gallery_Frame_Mode frame_mode_ = Gallery_Frame_Mode::Low_Latency;
|
||||
bool automatic_low_latency_{};
|
||||
Scene_Type plot_;
|
||||
Plot_Scene plot_;
|
||||
Gallery_Feedback_Policy feedback_policy_;
|
||||
std::unique_ptr<Gallery_Session_Control<Scene_Type>> session_control_;
|
||||
std::unique_ptr<Gallery_Session_Control<Plot_Scene>> session_control_;
|
||||
Gallery_Controls controls_;
|
||||
std::chrono::steady_clock::time_point performance_started_;
|
||||
std::chrono::steady_clock::time_point last_performance_log_;
|
||||
@@ -1389,14 +1401,7 @@ private:
|
||||
std::string last_action_result_;
|
||||
};
|
||||
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) {
|
||||
switch (mode) {
|
||||
case Gallery_Frame_Mode::Manual:
|
||||
return std::make_unique<Gallery_Scene<Manual_Scene2D>>(session_id, std::move(case_id), mode, automatic_low_latency);
|
||||
case Gallery_Frame_Mode::Low_Latency:
|
||||
return std::make_unique<Gallery_Scene<Scene2D>>(session_id, std::move(case_id), mode, automatic_low_latency);
|
||||
case Gallery_Frame_Mode::Playback:
|
||||
return std::make_unique<Gallery_Scene<Playback_Scene2D>>(session_id, std::move(case_id), mode, automatic_low_latency);
|
||||
}
|
||||
throw std::invalid_argument("unknown gallery frame mode");
|
||||
return std::make_unique<Gallery_Scene>(session_id, std::move(case_id),
|
||||
mode, automatic_low_latency);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user