改进
This commit is contained in:
@@ -4,6 +4,7 @@
|
||||
#include "Gallery_Observer_Adminive.h"
|
||||
#include "Gallery_Renderables.h"
|
||||
#include "Gallery_Session_Control_Adminive.h"
|
||||
#include "common/Gallery_Scheduler_Adminive.h"
|
||||
|
||||
#include "adminive/adminive.hpp"
|
||||
#include "adminive/adapters/nlohmann_json.hpp"
|
||||
@@ -392,6 +393,10 @@ Json dashboard_contract() {
|
||||
dashboard_field("呈现 P95 ms", "client_performance.display_interval_p95_ms", "fixed", 2),
|
||||
dashboard_field("呈现 P99 ms", "client_performance.display_interval_p99_ms", "fixed", 2),
|
||||
dashboard_field("响应负载 MB/s", "performance.pixel_payload_megabytes_per_second", "fixed", 1),
|
||||
dashboard_field("TBB 并发度", "scheduler.concurrency"),
|
||||
dashboard_field("活动 Worker", "scheduler.active_workers"),
|
||||
dashboard_field("峰值 Worker", "scheduler.peak_workers"),
|
||||
dashboard_field("活动外部线程", "scheduler.active_external_threads"),
|
||||
described_dashboard_field<renderive::Plot_Frame_Status>(
|
||||
"kernel_observer", "pending_frame_count"),
|
||||
described_dashboard_field<renderive::Plot_Frame_Status>(
|
||||
@@ -433,6 +438,12 @@ Json dashboard_contract() {
|
||||
{"source", "client_performance"},
|
||||
{"descriptor", adminive::to_descriptor_json<
|
||||
Json, Gallery_Client_Performance>()}
|
||||
},
|
||||
{
|
||||
{"title", "oneTBB 调度器"},
|
||||
{"source", "scheduler"},
|
||||
{"descriptor", adminive::to_descriptor_json<
|
||||
Json, renderive::scheduling::Scheduler_Statistics>()}
|
||||
}
|
||||
})}
|
||||
}}
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
#pragma once
|
||||
#include "renderive/scheduling/Scheduler.hpp"
|
||||
#include "adminive/adminive.hpp"
|
||||
namespace adminive {
|
||||
template <>
|
||||
struct Type_Descriptor<renderive::scheduling::Scheduler_Statistics> {
|
||||
static auto get() {
|
||||
using T = renderive::scheduling::Scheduler_Statistics;
|
||||
return object<T>("scheduler_statistics",
|
||||
ADMINIVE_FIELD_LABEL(T, concurrency, "调度并发度"),
|
||||
ADMINIVE_FIELD_LABEL(T, active_workers, "活动 Worker"),
|
||||
ADMINIVE_FIELD_LABEL(T, peak_workers, "峰值 Worker"),
|
||||
ADMINIVE_FIELD_LABEL(T, active_external_threads, "活动外部线程"),
|
||||
ADMINIVE_FIELD_LABEL(T, peak_external_threads, "峰值外部线程"),
|
||||
ADMINIVE_FIELD_LABEL(T, worker_entry_count, "Worker 进入次数"),
|
||||
ADMINIVE_FIELD_LABEL(T, worker_exit_count, "Worker 退出次数"),
|
||||
ADMINIVE_FIELD_LABEL(T, external_entry_count, "外部线程进入次数"),
|
||||
ADMINIVE_FIELD_LABEL(T, external_exit_count, "外部线程退出次数"))
|
||||
.label("oneTBB 调度器");
|
||||
}
|
||||
};
|
||||
static_assert(Described_Type<renderive::scheduling::Scheduler_Statistics>);
|
||||
}
|
||||
@@ -3,6 +3,7 @@
|
||||
#include "../Gallery_Enum.h"
|
||||
#include "../Gallery_Observer_Adminive.h"
|
||||
#include "../Gallery_Session_Control_Adminive.h"
|
||||
#include "../common/Gallery_Scheduler_Adminive.h"
|
||||
#include "../Pixel_Frame.h"
|
||||
#include "../Web_Performance_Log.h"
|
||||
#include "render_2D/export.h"
|
||||
@@ -653,6 +654,8 @@ public:
|
||||
{"kernel_observer", std::move(observer_data)},
|
||||
{"consumer_feedback", std::move(consumer_feedback_data)},
|
||||
{"client_performance", std::move(client_performance_data)},
|
||||
{"scheduler", adminive::to_frontend_json<nlohmann::json>(
|
||||
renderive::scheduling::scheduler_statistics())},
|
||||
{"renderable_observers", controls_.observers(plot_.render_scene())},
|
||||
{"performance_capture", gallery_performance_capture_json(plot_.render_scene())},
|
||||
{"last_action_result", last_action_result_}
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
#include "../Gallery_Capture_Json.h"
|
||||
#include "../Gallery_Enum.h"
|
||||
#include "../common/Gallery_Scheduler_Adminive.h"
|
||||
#include "../common/Pixel_Frame.h"
|
||||
#include <render_3D/Point_Scene.h>
|
||||
|
||||
@@ -461,6 +462,8 @@ public:
|
||||
{"presentation_fps", client_performance_.presentation_fps},
|
||||
{"websocket_buffered_bytes",
|
||||
client_performance_.websocket_buffered_bytes}}},
|
||||
{"scheduler", adminive::to_frontend_json<nlohmann::json>(
|
||||
renderive::scheduling::scheduler_statistics())},
|
||||
{"session_id", session_id_},
|
||||
{"performance_capture",
|
||||
gallery_performance_capture_json(scene_.render_scene())},
|
||||
|
||||
@@ -240,6 +240,7 @@ TEST(RenderiveWebDatovizGallery, PublishesRealRgbaAndRendersAfterResize) {
|
||||
const auto observed = response_json(session.handle(gallery_request(
|
||||
Gallery_Request_Kind::Observe,
|
||||
R"({"category":"event","type":"gallery_observe","client_metrics":{}})")));
|
||||
EXPECT_TRUE(observed.at("telemetry").contains("scheduler"));
|
||||
const auto& performance = observed.at("telemetry").at("performance");
|
||||
EXPECT_GT(performance.at("measured_fps").get<double>(), 0.0);
|
||||
EXPECT_GT(performance.at("pixel_response_fps").get<double>(), 0.0);
|
||||
|
||||
@@ -243,7 +243,7 @@ TEST(RenderiveWebGallery, AdminiveCatalogCoversEveryControlCaseAndThreeModes) {
|
||||
TEST(RenderiveWebGallery, CatalogOwnsDashboardFieldsAndDynamicBehavior) {
|
||||
const nlohmann::json catalog = parse_json(Gallery_Protocol::catalog_json());
|
||||
const auto& dashboard = catalog.at("dashboard");
|
||||
EXPECT_EQ(dashboard.at("performance").at("fields").size(), 26U);
|
||||
EXPECT_EQ(dashboard.at("performance").at("fields").size(), 30U);
|
||||
EXPECT_EQ(dashboard.at("limits").at("fields").size(), 4U);
|
||||
EXPECT_EQ(dashboard.at("observer").at("sections").size(), 4U);
|
||||
std::set<std::string> client_sources;
|
||||
@@ -972,6 +972,7 @@ TEST(RenderiveWebGallery, EveryIndependentCore2CanvasBuildsAndRenders) {
|
||||
EXPECT_EQ(telemetry.at("frame_mode").at("id"), std::string(mode)) << case_id;
|
||||
EXPECT_TRUE(telemetry.at("telemetry").contains("kernel_observer")) << case_id;
|
||||
EXPECT_TRUE(telemetry.at("telemetry").contains("performance")) << case_id;
|
||||
EXPECT_TRUE(telemetry.at("telemetry").contains("scheduler")) << case_id;
|
||||
EXPECT_TRUE(telemetry.at("telemetry").contains("data_shape")) << case_id;
|
||||
EXPECT_GT(telemetry.at("telemetry").at("data_shape").at("rendered_elements")
|
||||
.get<std::size_t>(), 0U) << case_id;
|
||||
|
||||
Reference in New Issue
Block a user