taskflow 接入异步 datoviz性能监测

This commit is contained in:
2026-08-15 02:12:03 +08:00
parent 2c7c8abd4f
commit 282768e0ea
36 changed files with 1890 additions and 234 deletions
@@ -1,5 +1,7 @@
#include "render_3D/Point_Demo.h"
#include <renderive/scene/base/Scene_Base.hpp>
#include <gtest/gtest.h>
#include <algorithm>
@@ -101,5 +103,48 @@ TEST(PointRenderIntegration, KernelEventsReachDatovizArcballOnItsDomain) {
}
}
TEST(PointRenderIntegration,
CapturesExternalGpuLifetimeAndSeparatedBackendPhases) {
try {
auto demo = make_point_demo(Scene_Options{.viewport = {320, 200}});
auto& kernel_scene = demo.scene->render_scene();
const Capture_Session_Id capture = kernel_scene.capture_next_frame();
ASSERT_TRUE(demo.scene->request_frame());
const auto session = kernel_scene.capture_session(capture);
ASSERT_TRUE(session);
ASSERT_EQ(session->captured_count(), 1U);
const auto& snapshot = *session->frames.front().snapshot;
const auto plan = kernel_scene.find_render_plan(
snapshot.render_plan_version);
ASSERT_TRUE(plan);
const auto render_node = std::find_if(
plan->graph.nodes.begin(), plan->graph.nodes.end(),
[](const Render_Node& node) {
return node.kind == Render_Node_Kind::render;
});
ASSERT_NE(render_node, plan->graph.nodes.end());
const auto& execution = snapshot.node_executions.at(
render_node->execution_index);
EXPECT_EQ(execution.status, Node_Execution_Status::complete);
EXPECT_GT(execution.external_start_time_ns, 0U);
EXPECT_GE(execution.external_end_time_ns,
execution.external_start_time_ns);
EXPECT_GE(execution.duration_ns(), execution.cpu_duration_ns());
EXPECT_TRUE(execution.metrics.contains(
Node_Metric_Kind::queue_wait_ns));
EXPECT_TRUE(execution.metrics.contains(
Node_Metric_Kind::backend_execute_duration_ns));
EXPECT_TRUE(execution.metrics.contains(
Node_Metric_Kind::gpu_fence_wait_ns));
EXPECT_TRUE(execution.metrics.contains(
Node_Metric_Kind::readback_duration_ns));
EXPECT_GT(execution.metrics.get(
Node_Metric_Kind::backend_artifact_json_bytes), 0U);
} catch (const std::exception& error) {
GTEST_SKIP() << "Vulkan/Datoviz unavailable: " << error.what();
}
}
} // namespace
} // namespace renderive::render_3d