Skip to content

Commit

Permalink
First pass at json output
Browse files Browse the repository at this point in the history
  • Loading branch information
wesleywiser committed Aug 2, 2018
1 parent e50dfe6 commit 51cc594
Show file tree
Hide file tree
Showing 4 changed files with 56 additions and 0 deletions.
2 changes: 2 additions & 0 deletions src/librustc/session/config.rs
Expand Up @@ -1369,6 +1369,8 @@ options! {DebuggingOptions, DebuggingSetter, basic_debugging_options,
"inject the given attribute in the crate"),
self_profile: bool = (false, parse_bool, [UNTRACKED],
"run the self profiler"),
profile_json: bool = (false, parse_bool, [UNTRACKED],
"output a json file with profiler results"),
}

pub fn default_lib_output() -> CrateType {
Expand Down
5 changes: 5 additions & 0 deletions src/librustc/session/mod.rs
Expand Up @@ -839,6 +839,11 @@ impl Session {
profiler.print_results(&self.opts);
}

pub fn save_json_results(&self) {
let profiler = self.self_profiling.borrow();
profiler.save_results();
}

pub fn print_perf_stats(&self) {
println!(
"Total time spent computing symbol hashes: {}",
Expand Down
45 changes: 45 additions & 0 deletions src/librustc/util/profiling.rs
Expand Up @@ -10,6 +10,7 @@

use session::config::Options;

use std::fs;
use std::io::{self, StdoutLock, Write};
use std::time::Instant;

Expand Down Expand Up @@ -119,6 +120,46 @@ impl CategoryData {
p!("Linking", linking);
p!("Other", other);
}

fn json(&self) -> String {
format!("[
{{
\"category\": \"Parsing\",
\"time_ms\": {}
}},
{{
\"category\": \"Expansion\",
\"time_ms\": {}
}},
{{
\"category\": \"TypeChecking\",
\"time_ms\": {}
}},
{{
\"category\": \"BorrowChecking\",
\"time_ms\": {}
}},
{{
\"category\": \"Codegen\",
\"time_ms\": {}
}},
{{
\"category\": \"Linking\",
\"time_ms\": {}
}},
{{
\"category\": \"Other\",
\"time_ms\": {}
}}
]",
self.times.parsing / 1_000_000,
self.times.expansion / 1_000_000,
self.times.type_checking / 1_000_000,
self.times.borrow_checking / 1_000_000,
self.times.codegen / 1_000_000,
self.times.linking / 1_000_000,
self.times.other / 1_000_000)
}
}

pub struct SelfProfiler {
Expand Down Expand Up @@ -235,6 +276,10 @@ impl SelfProfiler {
writeln!(lock, "Incremental: {}", incremental).unwrap();
}

pub fn save_results(&self) {
fs::write("self_profiler_results.json", self.data.json()).unwrap();
}

pub fn record_activity<'a>(&'a mut self, category: ProfileCategory) -> ProfilerActivity<'a> {
self.start_activity(category);

Expand Down
4 changes: 4 additions & 0 deletions src/librustc_driver/driver.rs
Expand Up @@ -355,6 +355,10 @@ pub fn compile_input(

if sess.opts.debugging_opts.self_profile {
sess.print_profiler_results();

if sess.opts.debugging_opts.profile_json {
sess.save_json_results();
}
}

controller_entry_point!(
Expand Down

0 comments on commit 51cc594

Please sign in to comment.