taskflow 接入异步 datoviz性能监测
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user