优化
This commit is contained in:
@@ -162,6 +162,13 @@ Taskflow_Frame_Trace Render_Frame::take_taskflow_trace() {
|
||||
result.markers.push_back(Frame_Trace_Point{
|
||||
static_cast<Frame_Trace_Marker>(index), decode_present_value(encoded)});
|
||||
}
|
||||
for (std::size_t index = 0; index < measurement_count; ++index) {
|
||||
const auto encoded = d->measurements[index].load(std::memory_order_acquire);
|
||||
if (!encoded) continue;
|
||||
result.measurements.push_back(Frame_Trace_Value{
|
||||
static_cast<Frame_Trace_Measurement>(index),
|
||||
decode_present_value(encoded)});
|
||||
}
|
||||
result.graphs = std::move(d->taskflow_graphs);
|
||||
for (auto& worker : d->taskflow_workers) {
|
||||
for (auto& task : worker.tasks)
|
||||
|
||||
@@ -11,6 +11,11 @@ struct Taskflow_Frame_Access;
|
||||
struct Frame_Statistics_Sample;
|
||||
enum struct Frame_Trace_Marker : std::uint8_t {
|
||||
created,
|
||||
plot_update_started,
|
||||
plot_update_finished,
|
||||
scene_render_entered,
|
||||
scene_advance_started,
|
||||
scene_advance_finished,
|
||||
scene_render_requested,
|
||||
scene_render_started,
|
||||
event_dispatch_started,
|
||||
@@ -119,6 +124,7 @@ struct Taskflow_Frame_Trace {
|
||||
std::uint64_t created_time_unix_ns{}; /* 帧创建 Unix 时间,单位纳秒。 */
|
||||
std::size_t worker_count{}; /* 捕获时全局 Executor 的 worker 数。 */
|
||||
std::vector<Frame_Trace_Point> markers{}; /* 与该帧 DAG 共用时间原点的原始流水线时间点。 */
|
||||
std::vector<Frame_Trace_Value> measurements{}; /* 本帧原始耗时测量;不另建统计副本。 */
|
||||
std::vector<Taskflow_Graph_Trace> graphs{}; /* 本帧主动执行的业务 DAG 元信息。 */
|
||||
std::vector<Taskflow_Task_Trace> tasks{}; /* 本帧窗口内原生 Observer 完成的任务执行。 */
|
||||
};
|
||||
|
||||
@@ -176,6 +176,7 @@ TEST(task_graph_observer, business_dag_and_native_execution_share_node_identity)
|
||||
frame.mark(aethera::Frame_Trace_Marker::paint_frame_target_started);
|
||||
frame.mark(aethera::Frame_Trace_Marker::paint_frame_target_finished);
|
||||
frame.mark(aethera::Frame_Trace_Marker::paint_finished);
|
||||
frame.record(aethera::Frame_Trace_Measurement::plot_update_ns, 125'000);
|
||||
frame.request_taskflow_trace();
|
||||
ASSERT_TRUE(aethera::detail::begin_taskflow_trace(frame));
|
||||
aethera::detail::run_taskflow(frame_graph, frame, "test.scene.paint");
|
||||
@@ -189,6 +190,12 @@ TEST(task_graph_observer, business_dag_and_native_execution_share_node_identity)
|
||||
trace.markers,
|
||||
aethera::Frame_Trace_Marker::paint_frame_target_started,
|
||||
&aethera::Frame_Trace_Point::marker));
|
||||
const auto plot_update = std::ranges::find(
|
||||
trace.measurements,
|
||||
aethera::Frame_Trace_Measurement::plot_update_ns,
|
||||
&aethera::Frame_Trace_Value::measurement);
|
||||
ASSERT_NE(plot_update, trace.measurements.end());
|
||||
EXPECT_EQ(plot_update->value_ns, 125'000u);
|
||||
EXPECT_EQ(trace.graphs.front().stage, "test.scene.paint");
|
||||
EXPECT_TRUE(trace.graphs.front().completed);
|
||||
EXPECT_EQ(std::ranges::count_if(trace.graphs.front().nodes, [](const auto& node) {
|
||||
|
||||
Reference in New Issue
Block a user