更完
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
#include "Gallery_Plot_Session.h"
|
||||
#include "Gallery_Controls.h"
|
||||
#include "Gallery_Enum.h"
|
||||
#include "Gallery_Observer_Adminive.h"
|
||||
#include "Gallery_Protocol.h"
|
||||
#include "Gallery_Session_Control_Adminive.h"
|
||||
#include "Pixel_Frame.h"
|
||||
@@ -75,26 +77,11 @@ std::optional<double> action_number(const Gallery_Action_Request& request) {
|
||||
return std::get<double>(*request.argument);
|
||||
}
|
||||
Frame_Control_Mode core_frame_mode(Gallery_Frame_Mode mode) {
|
||||
switch (mode) {
|
||||
case Gallery_Frame_Mode::Manual:
|
||||
return Frame_Control_Mode::Manual;
|
||||
case Gallery_Frame_Mode::Playback:
|
||||
return Frame_Control_Mode::Playback;
|
||||
case Gallery_Frame_Mode::Low_Latency:
|
||||
return Frame_Control_Mode::Low_Latency;
|
||||
}
|
||||
return Frame_Control_Mode::Low_Latency;
|
||||
}
|
||||
std::string_view frame_mode_name(Gallery_Frame_Mode mode) {
|
||||
switch (mode) {
|
||||
case Gallery_Frame_Mode::Manual:
|
||||
return "manual";
|
||||
case Gallery_Frame_Mode::Playback:
|
||||
return "playback";
|
||||
case Gallery_Frame_Mode::Low_Latency:
|
||||
return "low_latency";
|
||||
}
|
||||
return "low_latency";
|
||||
const auto result = magic_enum::enum_cast<Frame_Control_Mode>(
|
||||
magic_enum::enum_name(mode));
|
||||
if (!result)
|
||||
throw std::logic_error("Gallery frame mode has no Kernel strategy");
|
||||
return *result;
|
||||
}
|
||||
} // namespace
|
||||
class Gallery_Scene final {
|
||||
@@ -118,7 +105,7 @@ public:
|
||||
session_control_ = std::make_unique<Gallery_Session_Control>(
|
||||
plot_, *primary_, feedback_policy_);
|
||||
register_controls();
|
||||
set_performance_plot_name(plot_, case_id_ + "/" + std::string(frame_mode_name(frame_mode_)));
|
||||
set_performance_plot_name(plot_, case_id_ + "/" + gallery_enum_id(frame_mode_));
|
||||
if (frame_mode_ == Gallery_Frame_Mode::Low_Latency)
|
||||
plot_.set_max_render_fps(30.0);
|
||||
plot_.activate_view();
|
||||
@@ -434,9 +421,24 @@ public:
|
||||
const double pixel_fps = recent_pixel_rate(pixel_history_, telemetry_now);
|
||||
const double pixel_megabytes_per_second = recent_pixel_megabytes_per_second(
|
||||
pixel_history_, telemetry_now);
|
||||
const bool low_latency = frame_mode_ == Gallery_Frame_Mode::Low_Latency;
|
||||
const Gallery_Consumer_Feedback_Snapshot consumer_feedback{
|
||||
low_latency && feedback_policy_.enabled,
|
||||
low_latency && feedback_policy_.pixel,
|
||||
low_latency && feedback_policy_.presentation,
|
||||
low_latency && feedback_policy_.manual,
|
||||
low_latency ? feedback_policy_.manual_fps : 0.0,
|
||||
consumer_feedback_source_,
|
||||
consumer_pixel_interval_ns_,
|
||||
consumer_presentation_interval_ns_,
|
||||
consumer_manual_interval_ns_};
|
||||
nlohmann::json observer_data =
|
||||
adminive::to_frontend_json<nlohmann::json>(observer);
|
||||
nlohmann::json consumer_feedback_data =
|
||||
adminive::to_frontend_json<nlohmann::json>(consumer_feedback);
|
||||
nlohmann::json telemetry{
|
||||
{"case", case_id_},
|
||||
{"frame_mode", frame_mode_name(frame_mode_)},
|
||||
{"frame_mode", gallery_enum_id(frame_mode_)},
|
||||
{"frame_index", frame_index_},
|
||||
{
|
||||
"viewport", {
|
||||
@@ -467,75 +469,11 @@ public:
|
||||
{
|
||||
"automatic_low_latency_scheduler",
|
||||
automatic_low_latency_ && frame_mode_ == Gallery_Frame_Mode::Low_Latency
|
||||
},
|
||||
{"kernel_paint_ms", static_cast<double>(observer.paint_duration_ns) / 1e6},
|
||||
{"kernel_render_ms", static_cast<double>(observer.render_duration_ns) / 1e6},
|
||||
{"kernel_bottleneck_ms", static_cast<double>(observer.bottleneck_duration_ns) / 1e6},
|
||||
{"kernel_end_to_end_ms", static_cast<double>(observer.end_to_end_ns) / 1e6}
|
||||
}
|
||||
},
|
||||
{
|
||||
"kernel_observer", {
|
||||
{"mode", frame_mode_name(frame_mode_)},
|
||||
{"last_event", observer.last_event},
|
||||
{"limit_state", observer.limit_state},
|
||||
{"configured_frequency_hz", observer.frequency_hz},
|
||||
{"observation_count", observer.observation_count},
|
||||
{"produced_frame_count", observer.produced_frame_count},
|
||||
{"consumed_frame_count", observer.consumed_frame_count},
|
||||
{"dropped_frame_count", observer.dropped_frame_count},
|
||||
{"failed_operation_count", observer.failed_operation_count},
|
||||
{"pending_frame_count", observer.pending_frame_count},
|
||||
{"latest_sequence", observer.latest_sequence},
|
||||
{"paint_duration_ns", observer.paint_duration_ns},
|
||||
{"render_duration_ns", observer.render_duration_ns},
|
||||
{"target_interval_ns", observer.target_interval_ns},
|
||||
{"frequency_limit_enabled", observer.frequency_limit_enabled},
|
||||
{"consumer_feedback_enabled", observer.consumer_feedback_enabled},
|
||||
{
|
||||
"consumer_feedback_master_enabled",
|
||||
frame_mode_ == Gallery_Frame_Mode::Low_Latency &&
|
||||
feedback_policy_.enabled
|
||||
},
|
||||
{
|
||||
"consumer_pixel_feedback_enabled",
|
||||
frame_mode_ == Gallery_Frame_Mode::Low_Latency &&
|
||||
feedback_policy_.pixel
|
||||
},
|
||||
{
|
||||
"consumer_presentation_feedback_enabled",
|
||||
frame_mode_ == Gallery_Frame_Mode::Low_Latency &&
|
||||
feedback_policy_.presentation
|
||||
},
|
||||
{
|
||||
"consumer_manual_feedback_enabled",
|
||||
frame_mode_ == Gallery_Frame_Mode::Low_Latency &&
|
||||
feedback_policy_.manual
|
||||
},
|
||||
{"consumer_manual_fps", frame_mode_ == Gallery_Frame_Mode::Low_Latency ? feedback_policy_.manual_fps : 0.0},
|
||||
{"consumer_feedback_source", consumer_feedback_source_},
|
||||
{"consumer_pixel_interval_ns", consumer_pixel_interval_ns_},
|
||||
{"consumer_presentation_interval_ns", consumer_presentation_interval_ns_},
|
||||
{"consumer_manual_interval_ns", consumer_manual_interval_ns_},
|
||||
{"bottleneck_duration_ns", observer.bottleneck_duration_ns},
|
||||
{"consumer_sample_interval_ns", observer.consumer_sample_interval_ns},
|
||||
{"consumer_smoothed_interval_ns", observer.consumer_smoothed_interval_ns},
|
||||
{"consumer_variation_ns", observer.consumer_variation_ns},
|
||||
{"consumer_safety_interval_ns", observer.consumer_safety_interval_ns},
|
||||
{"consumer_interval_ns", observer.consumer_interval_ns},
|
||||
{"next_refresh_interval_ns", observer.next_refresh_interval_ns},
|
||||
{"paint_lease_wait_ns", observer.paint_lease_wait_ns},
|
||||
{"paint_state_wait_ns", observer.paint_state_wait_ns},
|
||||
{"publish_state_wait_ns", observer.publish_state_wait_ns},
|
||||
{"ready_wait_ns", observer.ready_wait_ns},
|
||||
{"frame_age_at_render_ns", observer.frame_age_at_render_ns},
|
||||
{"render_lease_wait_ns", observer.render_lease_wait_ns},
|
||||
{"render_state_wait_ns", observer.render_state_wait_ns},
|
||||
{"render_finish_state_wait_ns", observer.render_finish_state_wait_ns},
|
||||
{"queue_wait_ns", observer.queue_wait_ns},
|
||||
{"end_to_end_ns", observer.end_to_end_ns}
|
||||
}
|
||||
}
|
||||
},
|
||||
{"kernel_observer", std::move(observer_data)},
|
||||
{"consumer_feedback", std::move(consumer_feedback_data)},
|
||||
{
|
||||
"client_performance", {
|
||||
{"transport_fps", client_transport_fps_},
|
||||
@@ -556,49 +494,12 @@ public:
|
||||
},
|
||||
{"last_action_result", last_action_result_}
|
||||
};
|
||||
if (frame_mode_ == Gallery_Frame_Mode::Low_Latency) {
|
||||
telemetry["render_fps"] = plot_.max_render_fps();
|
||||
telemetry["refresh_feedback_hz"] = plot_.refresh_feedback_snapshot().frequency_hz;
|
||||
const auto scheduler_interval_ns = kernel_refresh_interval_ns();
|
||||
telemetry["low_latency_limit"] = {
|
||||
{"current", observer.limit_state},
|
||||
{"frequency_limited", observer.limit_state == "frequency_limited"},
|
||||
{"paint_limited", observer.limit_state == "paint_limited"},
|
||||
{"render_limited", observer.limit_state == "render_limited"},
|
||||
{"consumer_limited", observer.limit_state == "consumer_limited"},
|
||||
{"configured_frequency_hz", observer.frequency_hz},
|
||||
{"frequency_limit_enabled", observer.frequency_limit_enabled},
|
||||
{"consumer_feedback_enabled", observer.consumer_feedback_enabled},
|
||||
{"consumer_feedback_master_enabled", feedback_policy_.enabled},
|
||||
{"consumer_pixel_feedback_enabled", feedback_policy_.pixel},
|
||||
{"consumer_presentation_feedback_enabled", feedback_policy_.presentation},
|
||||
{"consumer_manual_feedback_enabled", feedback_policy_.manual},
|
||||
{"consumer_manual_fps", feedback_policy_.manual_fps},
|
||||
{"consumer_feedback_source", consumer_feedback_source_},
|
||||
{"consumer_pixel_interval_ns", consumer_pixel_interval_ns_},
|
||||
{"consumer_presentation_interval_ns", consumer_presentation_interval_ns_},
|
||||
{"consumer_manual_interval_ns", consumer_manual_interval_ns_},
|
||||
{"target_interval_ns", observer.target_interval_ns},
|
||||
{"paint_duration_ns", observer.paint_duration_ns},
|
||||
{"render_duration_ns", observer.render_duration_ns},
|
||||
{"bottleneck_duration_ns", observer.bottleneck_duration_ns},
|
||||
{"consumer_sample_interval_ns", observer.consumer_sample_interval_ns},
|
||||
{"consumer_smoothed_interval_ns", observer.consumer_smoothed_interval_ns},
|
||||
{"consumer_variation_ns", observer.consumer_variation_ns},
|
||||
{"consumer_safety_interval_ns", observer.consumer_safety_interval_ns},
|
||||
{"consumer_interval_ns", observer.consumer_interval_ns},
|
||||
{"scheduler_interval_ns", scheduler_interval_ns},
|
||||
{"scheduler_frequency_hz", scheduler_interval_ns == 0 ? 0.0 : 1'000'000'000.0 / static_cast<double>(scheduler_interval_ns)}
|
||||
};
|
||||
}
|
||||
if (primary_) {
|
||||
telemetry["renderable"] = {
|
||||
{"object_name", primary_->object_name()},
|
||||
{"visible", primary_->is_visible()},
|
||||
{
|
||||
"cache_mode", primary_->get_cache_mode() == Renderable_Cache_Mode::Direct
|
||||
? "Direct"
|
||||
: "Local_Pixel"
|
||||
"cache_mode", magic_enum::enum_name(primary_->get_cache_mode())
|
||||
}
|
||||
};
|
||||
}
|
||||
@@ -887,7 +788,7 @@ private:
|
||||
{"unix_ms", unix_ms},
|
||||
{"session_id", session_id_},
|
||||
{"case", case_id_},
|
||||
{"frame_mode", frame_mode_name(frame_mode_)},
|
||||
{"frame_mode", gallery_enum_id(frame_mode_)},
|
||||
{"configured_fps", low_latency ? plot_.max_render_fps() : 0.0},
|
||||
{"automatic_scheduler_interval_ns", scheduler_interval_ns},
|
||||
{"automatic_scheduler_fps", scheduler_interval_ns == 0 ? 0.0 : 1'000'000'000.0 / static_cast<double>(scheduler_interval_ns)},
|
||||
|
||||
Reference in New Issue
Block a user