Total duration Timing
This commit is contained in:
parent
6da6f6312d
commit
2b407a4a83
@ -11,7 +11,7 @@ maplit = "*"
|
|||||||
lazy_static = "0.2.8"
|
lazy_static = "0.2.8"
|
||||||
failure = "0.1.2"
|
failure = "0.1.2"
|
||||||
ena = "0.11.0"
|
ena = "0.11.0"
|
||||||
|
stopwatch = "0.0.7"
|
||||||
|
|
||||||
schala-lang-codegen = { path = "../codegen" }
|
schala-lang-codegen = { path = "../codegen" }
|
||||||
schala-repl = { path = "../../schala-repl" }
|
schala-repl = { path = "../../schala-repl" }
|
||||||
|
@ -17,6 +17,8 @@ extern crate schala_repl;
|
|||||||
extern crate schala_lang_codegen;
|
extern crate schala_lang_codegen;
|
||||||
extern crate ena;
|
extern crate ena;
|
||||||
|
|
||||||
|
use stopwatch::Stopwatch;
|
||||||
|
|
||||||
use std::cell::RefCell;
|
use std::cell::RefCell;
|
||||||
use std::rc::Rc;
|
use std::rc::Rc;
|
||||||
|
|
||||||
@ -256,6 +258,8 @@ impl ProgrammingLanguageInterface for Schala {
|
|||||||
let eval_debug_artifact = None;
|
let eval_debug_artifact = None;
|
||||||
|
|
||||||
self.source_reference.load_new_source(source);
|
self.source_reference.load_new_source(source);
|
||||||
|
let sw = Stopwatch::start_new();
|
||||||
|
|
||||||
let main_output: Result<String, String> = tokenizing(source, self, token_debug_artifact)
|
let main_output: Result<String, String> = tokenizing(source, self, token_debug_artifact)
|
||||||
.and_then(|tokens| parsing(tokens, self, parsing_debug_artifact))
|
.and_then(|tokens| parsing(tokens, self, parsing_debug_artifact))
|
||||||
.and_then(|ast| symbol_table(ast, self, symbol_debug_artifact))
|
.and_then(|ast| symbol_table(ast, self, symbol_debug_artifact))
|
||||||
@ -263,9 +267,15 @@ impl ProgrammingLanguageInterface for Schala {
|
|||||||
.and_then(|ast| ast_reducing(ast, self, reducing_debug_artifact))
|
.and_then(|ast| ast_reducing(ast, self, reducing_debug_artifact))
|
||||||
.and_then(|reduced_ast| eval(reduced_ast, self, eval_debug_artifact));
|
.and_then(|reduced_ast| eval(reduced_ast, self, eval_debug_artifact));
|
||||||
|
|
||||||
|
let total_duration = Some(sw.elapsed());
|
||||||
|
|
||||||
|
let global_output_stats = GlobalOutputStats {
|
||||||
|
total_duration, stage_durations: None,
|
||||||
|
};
|
||||||
|
|
||||||
ComputationResponse {
|
ComputationResponse {
|
||||||
main_output,
|
main_output,
|
||||||
global_output_stats: GlobalOutputStats::default(),
|
global_output_stats,
|
||||||
debug_responses: vec![],
|
debug_responses: vec![],
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -28,6 +28,12 @@ pub struct ComputationResponse {
|
|||||||
pub debug_responses: Vec<DebugResponse>,
|
pub debug_responses: Vec<DebugResponse>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Default, Debug)]
|
||||||
|
pub struct GlobalOutputStats {
|
||||||
|
pub total_duration: Option<time::Duration>,
|
||||||
|
pub stage_durations: Option<Vec<(String, time::Duration)>>
|
||||||
|
}
|
||||||
|
|
||||||
pub struct DebugRequest {
|
pub struct DebugRequest {
|
||||||
pub ask: DebugAsk,
|
pub ask: DebugAsk,
|
||||||
}
|
}
|
||||||
@ -66,28 +72,3 @@ pub enum LangMetaResponse {
|
|||||||
},
|
},
|
||||||
ImmediateDebug(DebugResponse),
|
ImmediateDebug(DebugResponse),
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Default, Debug)]
|
|
||||||
pub struct GlobalOutputStats {
|
|
||||||
total_duration: Option<time::Duration>,
|
|
||||||
stage_durations: Option<Vec<(String, time::Duration)>>
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
impl GlobalOutputStats {
|
|
||||||
fn get_timing(&self) -> Option<String> {
|
|
||||||
if self.durations.len() != 0 {
|
|
||||||
let mut buf = String::new();
|
|
||||||
write!(&mut buf, "Timing: ").unwrap();
|
|
||||||
for duration in self.durations.iter() {
|
|
||||||
let timing = (duration.as_secs() as f64) + (duration.subsec_nanos() as f64 * 1e-9);
|
|
||||||
write!(&mut buf, "{}s, ", timing).unwrap()
|
|
||||||
}
|
|
||||||
write!(&mut buf, "\n").unwrap();
|
|
||||||
Some(buf)
|
|
||||||
} else {
|
|
||||||
None
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
@ -197,6 +197,10 @@ impl Repl {
|
|||||||
fn handle_computation_response(&mut self, response: ComputationResponse) -> String {
|
fn handle_computation_response(&mut self, response: ComputationResponse) -> String {
|
||||||
let mut buf = String::new();
|
let mut buf = String::new();
|
||||||
|
|
||||||
|
if let Some(total_duration) = response.global_output_stats.total_duration {
|
||||||
|
buf.push_str(&format!("Total duration: {:?}\n", total_duration));
|
||||||
|
}
|
||||||
|
|
||||||
buf.push_str(&match response.main_output {
|
buf.push_str(&match response.main_output {
|
||||||
Ok(s) => s,
|
Ok(s) => s,
|
||||||
Err(e) => format!("{} {}", "Error".red(), e)
|
Err(e) => format!("{} {}", "Error".red(), e)
|
||||||
|
Loading…
Reference in New Issue
Block a user