优化
This commit is contained in:
+24
-9
@@ -205,6 +205,10 @@ nlohmann::json taskflow_trace_json(
|
||||
for (const auto& marker : trace.markers)
|
||||
markers[magic_enum::enum_name(marker.marker)] =
|
||||
static_cast<double>(marker.elapsed_ns) / 1'000'000.0;
|
||||
nlohmann::json measurements = nlohmann::json::object();
|
||||
for (const auto& measurement : trace.measurements)
|
||||
measurements[magic_enum::enum_name(measurement.measurement)] =
|
||||
static_cast<double>(measurement.value_ns) / 1'000'000.0;
|
||||
nlohmann::json graphs = nlohmann::json::array();
|
||||
std::unordered_map<std::uint64_t, std::string> node_ids;
|
||||
for (const auto& graph : trace.graphs) {
|
||||
@@ -274,6 +278,7 @@ nlohmann::json taskflow_trace_json(
|
||||
{"created_time_unix_ns", trace.created_time_unix_ns},
|
||||
{"worker_count", trace.worker_count},
|
||||
{"markers", std::move(markers)},
|
||||
{"measurements", std::move(measurements)},
|
||||
{"graphs", std::move(graphs)},
|
||||
{"executions", std::move(executions)}};
|
||||
}
|
||||
@@ -761,14 +766,32 @@ void Plot::Private::render_frame(Plot_Render_Tick tick) {
|
||||
try {
|
||||
tick.width = streams.width;
|
||||
tick.height = streams.height;
|
||||
const std::uint64_t sequence = next_frame_sequence++;
|
||||
const Frame_Identity identity{
|
||||
sequence, tick.sequence == 0 ? sequence : tick.sequence};
|
||||
Render_Frame* logical_frame{};
|
||||
if (auto* frame_2d = std::get_if<std::unique_ptr<Frame_2D>>(&managed->frame)) {
|
||||
(*frame_2d)->begin(identity, Frame_2D::native_pixel_format);
|
||||
logical_frame = frame_2d->get();
|
||||
} else {
|
||||
auto& frame_3d = std::get<std::unique_ptr<Frame_3D>>(managed->frame);
|
||||
frame_3d->begin(identity,
|
||||
pacing.video_enabled ? Frame_3D_Output::pixels
|
||||
: Frame_3D_Output::diagnostics,
|
||||
Frame_3D::native_pixel_format);
|
||||
logical_frame = frame_3d.get();
|
||||
}
|
||||
taskflow_trace_claimed = mark_taskflow_trace(*logical_frame);
|
||||
/*
|
||||
* 各图的采样、网格构造和属性快照都在 Plot 自己的准备域完成。
|
||||
* 各图的采样、网格构造和属性读取都在 Plot 自己的准备域完成。
|
||||
* 进入 Scene::render 后只剩已经准备好的 Visual 批次与轻量提交;
|
||||
* 共享 Render Domain 不承担业务数据生成。
|
||||
*/
|
||||
logical_frame->mark(Frame_Trace_Marker::plot_update_started);
|
||||
const auto update_started = std::chrono::steady_clock::now();
|
||||
view->update(tick);
|
||||
const auto update_elapsed = std::chrono::steady_clock::now() - update_started;
|
||||
logical_frame->mark(Frame_Trace_Marker::plot_update_finished);
|
||||
const auto tick_queue_elapsed = tick.issued_at.time_since_epoch().count() == 0
|
||||
? std::chrono::steady_clock::duration::zero()
|
||||
: update_started - tick.issued_at;
|
||||
@@ -783,12 +806,8 @@ void Plot::Private::render_frame(Plot_Render_Tick tick) {
|
||||
nanoseconds(update_elapsed));
|
||||
};
|
||||
|
||||
const std::uint64_t sequence = next_frame_sequence++;
|
||||
const Frame_Identity identity{sequence, tick.sequence == 0 ? sequence : tick.sequence};
|
||||
if (auto* scene_2d = std::get_if<std::unique_ptr<Scene_2D>>(&scene)) {
|
||||
auto& output = *std::get<std::unique_ptr<Frame_2D>>(managed->frame);
|
||||
output.begin(identity, Frame_2D::native_pixel_format);
|
||||
taskflow_trace_claimed = mark_taskflow_trace(output);
|
||||
record_plot_measurements(output);
|
||||
(*scene_2d)->set<&Render_Scene_2D::Prop::viewport>(
|
||||
Size{static_cast<int>(tick.width), static_cast<int>(tick.height)});
|
||||
@@ -807,10 +826,6 @@ void Plot::Private::render_frame(Plot_Render_Tick tick) {
|
||||
return;
|
||||
}
|
||||
auto& output = *std::get<std::unique_ptr<Frame_3D>>(managed->frame);
|
||||
output.begin(identity, pacing.video_enabled ? Frame_3D_Output::pixels
|
||||
: Frame_3D_Output::diagnostics,
|
||||
Frame_3D::native_pixel_format);
|
||||
taskflow_trace_claimed = mark_taskflow_trace(output);
|
||||
record_plot_measurements(output);
|
||||
auto& scene_3d = std::get<std::unique_ptr<Scene_3D>>(scene);
|
||||
scene_3d->set<&Render_Scene_3D::Prop::viewport>(Extent{tick.width, tick.height});
|
||||
|
||||
Reference in New Issue
Block a user