feat(render): journal du rendu lance par Studio et images lentes signalees
Studio host passe --render-log (run\render-<port>.log) au Core ; sequa-render journalise toute image de plus de 250 ms avec la repartition du temps, pour diagnostiquer les fenetres Godot qui ne repondent plus.
This commit is contained in:
1 parent
815192918d
commit
f039fabdd0
2 files changed
+22
No files matched your search
@@ -168,7 +168,16 @@ int run(const Options& options)
|
||||
: std::chrono::microseconds(0);
|
||||
auto next_frame = Clock::now();
|
||||
|
||||
// Diagnostic : une image de plus de 250 ms est journalisée avec la répartition du temps
|
||||
// (une fenêtre bloquée plus de 5 s est marquée « ne répond pas » par Windows).
|
||||
constexpr auto slow_frame = std::chrono::milliseconds(250);
|
||||
const auto ms_between = [](Clock::time_point from, Clock::time_point to) {
|
||||
return static_cast<long long>(std::chrono::duration_cast<std::chrono::milliseconds>(to - from).count());
|
||||
};
|
||||
|
||||
for (std::uint64_t frame = 0;; ++frame) {
|
||||
const auto t_begin = Clock::now();
|
||||
std::size_t deltas = 0;
|
||||
for (render::CoreEvent& event : link.poll()) {
|
||||
if (auto* received = std::get_if<render::ReceivedDelta>(&event)) {
|
||||
three_d::wire::SceneDeltaMessage* message = &received->message;
|
||||
@@ -182,6 +191,7 @@ int run(const Options& options)
|
||||
report_failure(link, "invalid-delta", error->message);
|
||||
return exit_startup;
|
||||
}
|
||||
++deltas;
|
||||
const std::uint64_t sent = message->sent_at_us;
|
||||
const std::uint64_t now = render::monotonic_us();
|
||||
latency_us.push_back(received->received_at_us > sent ? received->received_at_us - sent : 0);
|
||||
@@ -202,6 +212,7 @@ int run(const Options& options)
|
||||
return exit_lease;
|
||||
}
|
||||
|
||||
const auto t_polled = Clock::now();
|
||||
three_d::FrameRequest request;
|
||||
request.frame_index = frame;
|
||||
request.world_version = mirror.world_version();
|
||||
@@ -216,6 +227,15 @@ int run(const Options& options)
|
||||
report_failure(link, "render-frame", error->message);
|
||||
return exit_startup;
|
||||
}
|
||||
const auto t_rendered = Clock::now();
|
||||
if (t_rendered - t_begin > slow_frame) {
|
||||
std::fprintf(stderr,
|
||||
"sequa-render : image %llu lente, %lld ms (deltas recus et appliques : %zu en %lld ms, "
|
||||
"image du moteur : %lld ms)\n",
|
||||
static_cast<unsigned long long>(frame), ms_between(t_begin, t_rendered), deltas,
|
||||
ms_between(t_begin, t_polled), ms_between(t_polled, t_rendered));
|
||||
std::fflush(stderr);
|
||||
}
|
||||
cpu_ms.push_back(std::get<three_d::FrameResult>(outcome).measurements.cpu_ms);
|
||||
++frames_since_report;
|
||||
|
||||
|
||||
@@ -142,6 +142,8 @@ std::string StudioHost::launch_core()
|
||||
for (const std::string& origin : config_.allowed_origins) {
|
||||
args.insert(args.end(), {"--allowed-origin", origin});
|
||||
}
|
||||
// Journal du processus de rendu (Godot compris), à côté de celui du Core.
|
||||
args.insert(args.end(), {"--render-log", sequa::platform::path_to_utf8(config_.run_dir / ("render-" + std::to_string(config_.core_port) + ".log"))});
|
||||
LaunchOptions launch;
|
||||
launch.own_console = config_.core_console;
|
||||
launch.log_path = log_file_path(config_.run_dir, config_.core_port);
|
||||
|
||||
Reference in new issue
Block a user