Add to your cargo.toml:

[features]
default = ["profile"]
profile = ["screeps-timing"]

[dependencies]
screeps-timing = { git = "https://github.com/Azaril/screeps-timing", optional = true }
serde = "1.0"
serde_json = "1.0"`

Minimum setup for timing a main loop tick and dumping it to console.

fn main_loop() {
    #[cfg(feature = "profile")]
    {
        screeps_timing::start_trace(Box::new(|| (screeps::game::cpu::get_used() * 1000.0) as u64));
    }
    
    game_loop::tick();

    #[cfg(feature = "profile")]
    {
        let trace = screeps_timing::stop_trace();

        if let Some(trace_output) = serde_json::to_string(&trace).ok() {
            info!("{}", trace_output);
        }
    }   
}
  • Copy the output from the the console in to a .json file.
  • In Chrome navigate to chrome://tracing
  • Click the 'load' option and select your .json file.