125 lines
6.1 KiB
C++
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("Kernel Observer");
|
|
}
|
|
};
|
|
|
|
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("Consumer Feedback");
|
|
}
|
|
};
|
|
|
|
static_assert(Described_Type<renderive::Frame_Observer_Snapshot>);
|
|
static_assert(Described_Type<renderive::web::Gallery_Consumer_Feedback_Snapshot>);
|
|
|
|
} // namespace adminive
|