mirror of
https://github.com/tangerineturtle1/NX2navi.git
synced 2026-11-15 19:19:58 -04:00
Make the version 0.9.0, and leave the long-wait watch off by default.
The watch's thread takes the kernel lock every two seconds to look at every guest thread; a release does not need it running, and wait_watch_s = 10 turns it on again for a hang report. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -764,8 +764,8 @@
|
||||
# trace = perf
|
||||
# A game thread that waits this many seconds for a lock, or for another thread to end, is logged once with the thread
|
||||
# it waits for and what that one is doing (at most 24 lines a run): a game that stops then leaves the chain in its log.
|
||||
# 0: off. Default: 10.
|
||||
# wait_watch_s = 10
|
||||
# Off by default: its thread takes the game's thread lock every 2 seconds. 10 is a good value for a hang report.
|
||||
# wait_watch_s = 0
|
||||
# 1: with trace = perf, walks of the process's address space count its private and write-combined memory every 600
|
||||
# frames (the "mem: process" line) and where its committed memory lies every 3600 frames (the "commit census" lines).
|
||||
# Each walk holds the address-space lock for 100-240 ms and delays the next frame by as much, so they are off unless
|
||||
|
||||
@@ -315,7 +315,7 @@ static const CfgMeta metas[] = {
|
||||
{"WB_FENCE_LIMIT", "65536", "0..1073741824", RESTART}, {"WB_MERGE", "1", "0|1", RESTART}, {"WB_EXACT", "1", "0|1", RESTART}, {"MEM_CENSUS", "0", "0|1", RESTART}, {"WB_NO_REUP", "1", "0|1", RESTART}, {"WB_PROBE", "0", "0|1", RESTART}, {"WB_SPLIT", "1", "0|1|2|3", RESTART}, {"WB_LAZY", WB_LAZY_DEFAULT, "0|1", RESTART}, {"HEAP_LAZY", "0", "0|1", RESTART}, {"WB_LAZY_TOUCH", "0", "0..16", RESTART}, {"WB_LAZY_CHUNK", "0", "0|1", RESTART}, {"FLUSH_UPLOAD", "0", "0|1", RESTART}, {"GPA_TWIN_MAX_KB", "0", "0..1048576", RESTART},
|
||||
{"MIRROR_CAPTURE_KB", "0", "0..1048576", RESTART}, {"WB_SKIP_MB", "0", "0..4096", RESTART}, // vk_memory.c capture_cap, wb_skip
|
||||
{"WB_MERGE_MAX", "32", "1..256", RESTART}, {"TEXUP_LOG_MS", "0", "0..60000", RESTART}, // vk_texture.c vk_texstat_frame
|
||||
{"WAIT_WATCH_S", "10", "0..3600", RESTART}, // kernel.c wait_watch: a lock or thread-end wait this long is logged
|
||||
{"WAIT_WATCH_S", "0", "0..3600", RESTART}, // kernel.c wait_watch: a lock or thread-end wait this long is logged; 0 off
|
||||
{"VMA_BLOCK_MB", "64", "16..256", RESTART}, // vk_headroom.c vk_vma_block_size
|
||||
{"ASTC_BC1", "1", "0|1", RESTART}, // vk_astc.c bc1_on
|
||||
{"PASS_CRUMBS", "", "0|1", RESTART}, // vk_crumbs.c pass marks; unset: VK_AMD_buffer_marker only
|
||||
|
||||
@@ -949,10 +949,10 @@ static uint32_t block(RtThread *t, int kind, int64_t ns) {
|
||||
}
|
||||
|
||||
// ---- long waits (a freeze's first clue)
|
||||
// A guest thread that waits NX2NAVI_WAIT_WATCH_S seconds (10; 0 off) for a lock, or for another thread to end, is
|
||||
// logged once per wait with the thread it waits for and what that one is doing: a game that stops with nothing in its
|
||||
// log then names the chain. Waits on condition variables, events and addresses are left out: idle worker threads wait
|
||||
// on them for good.
|
||||
// A guest thread that waits NX2NAVI_WAIT_WATCH_S seconds for a lock, or for another thread to end, is logged once per
|
||||
// wait with the thread it waits for and what that one is doing: a game that stops with nothing in its log then names
|
||||
// the chain. Waits on condition variables, events and addresses are left out: idle worker threads wait on them for
|
||||
// good. Off by default (0), as its thread takes the kernel lock every 2 s; 10 is a good value for a hang report.
|
||||
#define WAIT_WATCH_LINES 24
|
||||
|
||||
static void wait_watch_holder(char *out, size_t cap, const RtThread *h) {
|
||||
|
||||
Reference in New Issue
Block a user