Keep track of durations of each pipeline stage
This commit is contained in:
parent
0c0690e86e
commit
6a548c9086
@ -1,6 +1,7 @@
|
|||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use colored::*;
|
use colored::*;
|
||||||
use std::fmt::Write;
|
use std::fmt::Write;
|
||||||
|
use std::time;
|
||||||
|
|
||||||
pub struct LLVMCodeString(pub String);
|
pub struct LLVMCodeString(pub String);
|
||||||
|
|
||||||
@ -35,12 +36,14 @@ impl Default for ExecutionMethod {
|
|||||||
#[derive(Debug, Default)]
|
#[derive(Debug, Default)]
|
||||||
pub struct UnfinishedComputation {
|
pub struct UnfinishedComputation {
|
||||||
artifacts: Vec<(String, TraceArtifact)>,
|
artifacts: Vec<(String, TraceArtifact)>,
|
||||||
|
pub durations: Vec<time::Duration>,
|
||||||
pub cur_debug_options: Vec<String>,
|
pub cur_debug_options: Vec<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct FinishedComputation {
|
pub struct FinishedComputation {
|
||||||
artifacts: Vec<(String, TraceArtifact)>,
|
artifacts: Vec<(String, TraceArtifact)>,
|
||||||
|
durations: Vec<time::Duration>,
|
||||||
text_output: Result<String, String>,
|
text_output: Result<String, String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -51,13 +54,15 @@ impl UnfinishedComputation {
|
|||||||
pub fn finish(self, text_output: Result<String, String>) -> FinishedComputation {
|
pub fn finish(self, text_output: Result<String, String>) -> FinishedComputation {
|
||||||
FinishedComputation {
|
FinishedComputation {
|
||||||
artifacts: self.artifacts,
|
artifacts: self.artifacts,
|
||||||
text_output
|
text_output,
|
||||||
|
durations: self.durations
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pub fn output(self, output: Result<String, String>) -> FinishedComputation {
|
pub fn output(self, output: Result<String, String>) -> FinishedComputation {
|
||||||
FinishedComputation {
|
FinishedComputation {
|
||||||
artifacts: self.artifacts,
|
artifacts: self.artifacts,
|
||||||
text_output: output
|
text_output: output,
|
||||||
|
durations: self.durations,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -128,7 +133,7 @@ impl TraceArtifact {
|
|||||||
|
|
||||||
pub trait ProgrammingLanguageInterface {
|
pub trait ProgrammingLanguageInterface {
|
||||||
fn execute_pipeline(&mut self, _input: &str, _eval_options: &EvalOptions) -> FinishedComputation {
|
fn execute_pipeline(&mut self, _input: &str, _eval_options: &EvalOptions) -> FinishedComputation {
|
||||||
FinishedComputation { artifacts: vec![], text_output: Err(format!("Execution pipeline not done")) }
|
FinishedComputation { artifacts: vec![], text_output: Err(format!("Execution pipeline not done")), durations: vec![] }
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_language_name(&self) -> String;
|
fn get_language_name(&self) -> String;
|
||||||
@ -164,9 +169,10 @@ macro_rules! pass_chain {
|
|||||||
macro_rules! pass_chain_helper {
|
macro_rules! pass_chain_helper {
|
||||||
(($state:expr, $comp:expr, $options:expr); $input:expr, $pass:path $(, $rest:path)*) => {
|
(($state:expr, $comp:expr, $options:expr); $input:expr, $pass:path $(, $rest:path)*) => {
|
||||||
{
|
{
|
||||||
|
use std::time;
|
||||||
use schala_repl::PassDebugOptionsDescriptor;
|
use schala_repl::PassDebugOptionsDescriptor;
|
||||||
let pass_name = stringify!($pass);
|
let pass_name = stringify!($pass);
|
||||||
let output = {
|
let (output, duration) = {
|
||||||
let ref debug_map = $options.debug_passes;
|
let ref debug_map = $options.debug_passes;
|
||||||
let debug_handle = match debug_map.get(pass_name) {
|
let debug_handle = match debug_map.get(pass_name) {
|
||||||
Some(PassDebugOptionsDescriptor { opts }) => {
|
Some(PassDebugOptionsDescriptor { opts }) => {
|
||||||
@ -176,8 +182,12 @@ macro_rules! pass_chain_helper {
|
|||||||
}
|
}
|
||||||
_ => None
|
_ => None
|
||||||
};
|
};
|
||||||
$pass($state, $input, debug_handle)
|
let start = time::Instant::now();
|
||||||
|
let pass_output = $pass($state, $input, debug_handle);
|
||||||
|
let elapsed = start.elapsed();
|
||||||
|
(pass_output, elapsed)
|
||||||
};
|
};
|
||||||
|
$comp.durations.push(duration);
|
||||||
match output {
|
match output {
|
||||||
Ok(result) => pass_chain_helper! { ($state, $comp, $options); result $(, $rest)* },
|
Ok(result) => pass_chain_helper! { ($state, $comp, $options); result $(, $rest)* },
|
||||||
Err(err) => {
|
Err(err) => {
|
||||||
|
Loading…
Reference in New Issue
Block a user