Files
Renderive/web_server/app/Gallery_Observer_Adminive.h
T
2026-08-12 11:03:16 +08:00

125 lines
6.1 KiB
C++

#pragma once
#include "Gallery_Enum.h"
#include "render_2D/plot/Plot_Core.h"
#include "adminive/adminive.hpp"
#include "adminive/adapters/magic_enum.hpp"
#include <cstdint>
#include <stdexcept>
#include <string>
namespace renderive::web {
struct Gallery_Consumer_Feedback_Snapshot {
bool master_enabled{};
bool pixel_enabled{};
bool presentation_enabled{};
bool manual_enabled{};
double manual_fps{};
std::string source;
std::uint64_t pixel_interval_ns{};
std::uint64_t presentation_interval_ns{};
std::uint64_t manual_interval_ns{};
};
} // namespace renderive::web
namespace adminive {
template <class Json>
struct Value_Adapter<renderive::Frame_Control_Mode, Json> {
using value_type = std::string;
static std::string read(renderive::Frame_Control_Mode value) {
return renderive::web::gallery_enum_id(value);
}
static void write(renderive::Frame_Control_Mode& target, std::string value) {
const auto parsed =
renderive::web::gallery_enum_cast<renderive::Frame_Control_Mode>(value);
if (!parsed)
throw std::invalid_argument("unknown frame control mode: " + value);
target = *parsed;
}
};
template <>
struct Type_Descriptor<renderive::Frame_Observer_Snapshot> {
static auto get() {
using T = renderive::Frame_Observer_Snapshot;
return object<T>("kernel_observer",
ADMINIVE_FIELD_LABEL(T, mode, "模式"),
ADMINIVE_FIELD_LABEL(T, last_event, "最近事件"),
ADMINIVE_FIELD_LABEL(T, limit_state, "当前瓶颈"),
ADMINIVE_FIELD_LABEL(T, frequency_hz, "配置频率"),
ADMINIVE_FIELD_LABEL(T, observation_count, "观察次数"),
ADMINIVE_FIELD_LABEL(T, produced_frame_count, "发布"),
ADMINIVE_FIELD_LABEL(T, consumed_frame_count, "完成"),
ADMINIVE_FIELD_LABEL(T, dropped_frame_count, "丢弃"),
ADMINIVE_FIELD_LABEL(T, failed_operation_count, "失败"),
ADMINIVE_FIELD_LABEL(T, pending_frame_count, "待处理"),
ADMINIVE_FIELD_LABEL(T, latest_sequence, "最新序号"),
ADMINIVE_FIELD_LABEL(T, paint_duration_ns, "PaintEvent"),
ADMINIVE_FIELD_LABEL(T, render_duration_ns, "后台渲染"),
ADMINIVE_FIELD_LABEL(T, target_interval_ns, "目标间隔"),
ADMINIVE_FIELD_LABEL(T, frequency_limit_enabled, "频率限制"),
ADMINIVE_FIELD_LABEL(T, consumer_feedback_enabled, "Kernel 反馈有效"),
ADMINIVE_FIELD_LABEL(T, bottleneck_duration_ns, "内部瓶颈"),
ADMINIVE_FIELD_LABEL(T, consumer_sample_interval_ns, "消费者原始采样"),
ADMINIVE_FIELD_LABEL(T, consumer_smoothed_interval_ns, "消费者平滑周期"),
ADMINIVE_FIELD_LABEL(T, consumer_variation_ns, "消费者抖动"),
ADMINIVE_FIELD_LABEL(T, consumer_safety_interval_ns, "消费者安全期限"),
ADMINIVE_FIELD_LABEL(T, consumer_interval_ns, "消费者限速周期"),
ADMINIVE_FIELD_LABEL(T, next_refresh_interval_ns, "下次刷新"),
ADMINIVE_FIELD_LABEL(T, paint_lease_wait_ns, "Painter Lease 等待"),
ADMINIVE_FIELD_LABEL(T, paint_state_wait_ns, "Paint State 等待"),
ADMINIVE_FIELD_LABEL(T, publish_state_wait_ns, "Publish State 等待"),
ADMINIVE_FIELD_LABEL(T, ready_wait_ns, "Ready 等待"),
ADMINIVE_FIELD_LABEL(T, frame_age_at_render_ns, "开始渲染时帧龄"),
ADMINIVE_FIELD_LABEL(T, render_lease_wait_ns, "Render Lease 等待"),
ADMINIVE_FIELD_LABEL(T, render_state_wait_ns, "Render State 等待"),
ADMINIVE_FIELD_LABEL(T, render_finish_state_wait_ns, "Render Finish 等待"),
ADMINIVE_FIELD_LABEL(T, queue_wait_ns, "回放队列等待"),
ADMINIVE_FIELD_LABEL(T, end_to_end_ns, "端到端延迟"),
ADMINIVE_FIELD_LABEL(T, task_execution_state, "任务执行状态")
.enum_label<Task_Execution_State::Idle>("空闲")
.enum_label<Task_Execution_State::Queued>("已排队")
.enum_label<Task_Execution_State::Running>("执行中")
.enum_label<Task_Execution_State::Completed>("已完成")
.enum_label<Task_Execution_State::Failed>("失败"),
ADMINIVE_FIELD_LABEL(T, task_worker_count, "Taskflow 工作线程"),
ADMINIVE_FIELD_LABEL(T, task_graph_node_count, "任务图节点"),
ADMINIVE_FIELD_LABEL(T, task_completed_node_count, "已完成节点"),
ADMINIVE_FIELD_LABEL(T, task_running_node_count, "运行中节点"),
ADMINIVE_FIELD_LABEL(T, task_pending_node_count, "待执行节点"),
ADMINIVE_FIELD_LABEL(T, task_peak_parallelism, "峰值并行度"),
ADMINIVE_FIELD_LABEL(T, task_failed_node_count, "失败节点"),
ADMINIVE_FIELD_LABEL(T, task_graph_duration_ns, "任务图耗时"))
.label("内核观察器");
}
};
template <>
struct Type_Descriptor<renderive::web::Gallery_Consumer_Feedback_Snapshot> {
static auto get() {
using T = renderive::web::Gallery_Consumer_Feedback_Snapshot;
return object<T>("consumer_feedback",
ADMINIVE_FIELD_LABEL(T, master_enabled, "消费者反馈总开关"),
ADMINIVE_FIELD_LABEL(T, pixel_enabled, "像素响应反馈"),
ADMINIVE_FIELD_LABEL(T, presentation_enabled, "浏览器呈现反馈"),
ADMINIVE_FIELD_LABEL(T, manual_enabled, "手动消费者反馈"),
ADMINIVE_FIELD_LABEL(T, manual_fps, "手动消费者 FPS"),
ADMINIVE_FIELD_LABEL(T, source, "生效反馈来源"),
ADMINIVE_FIELD_LABEL(T, pixel_interval_ns, "像素响应周期"),
ADMINIVE_FIELD_LABEL(T, presentation_interval_ns, "浏览器呈现周期"),
ADMINIVE_FIELD_LABEL(T, manual_interval_ns, "手动消费者周期"))
.label("消费者反馈");
}
};
static_assert(Described_Type<renderive::Frame_Observer_Snapshot>);
static_assert(Described_Type<renderive::web::Gallery_Consumer_Feedback_Snapshot>);
} // namespace adminive