I have another question. Back in college when I wrote little games (nothing at all like this obvsiously) what I did to track perf was basically log timings of various subcomponents, so far perfectly understandable.
Now how do you accuratly time highly threaded code inside a jobmanager, given that any thread can the paused/interrupted by a higher priority one in the middle of it, thus you can't just take endticks-startticks.
I guess you use a completely custom threadpool implementation, as I don't see how else you could get callbacks on job interrupts. I'm bad at explaining this.
job a is running at priority normal
half way through, you queue another job b, also at priority normal, and another job c, at priority high
do you have to wait for job a to finish, then process c, followed by b,
or (hopefully at least) job a will be halted, c processed immediatly, then a continued and then b.
or is a round-robin kinda thing, where each job gets x-amount of processor time relative to their priority, before being halted
I guess wether option 2 or 3 are preferable depends on what you define as a job, weather those are one off jobs, like load model x, download weather updates, or if jobs are continues loops, like processes phyiscs.
I'm rambling, sorry.