Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Framework Time Measurement #710

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 9 additions & 2 deletions crates/code_generation/src/cyclers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ pub fn generate_cyclers(cyclers: &Cyclers) -> TokenStream {
fn generate_module(cycler: &Cycler, cyclers: &Cyclers) -> TokenStream {
let module_name = format_ident!("{}", cycler.name.to_case(Case::Snake));
let cycler_instance = generate_cycler_instance(cycler);
let database_struct = generate_database_struct();
let database_struct = generate_database_struct(cycler);
let cycler_struct = generate_struct(cycler, cyclers);
let cycler_implementation = generate_implementation(cycler, cyclers);

Expand Down Expand Up @@ -70,12 +70,15 @@ fn generate_cycler_instance(cycler: &Cycler) -> TokenStream {
}
}

fn generate_database_struct() -> TokenStream {
fn generate_database_struct(cycler: &Cycler) -> TokenStream {
let cycler_name = format_ident!("{}", cycler.name.to_case(Case::Snake));

quote! {
#[derive(Default, serde::Deserialize, serde::Serialize, serialize_hierarchy::SerializeHierarchy)]
pub(crate) struct Database {
pub main_outputs: MainOutputs,
pub additional_outputs: AdditionalOutputs,
pub cycle_timings: crate::structs::#cycler_name::CycleTimings,
}
}
}
Expand Down Expand Up @@ -656,6 +659,7 @@ fn generate_node_execution(
}
#[allow(clippy::needless_else)]
if #are_required_inputs_some {
let cycle_start = std::time::SystemTime::now();
let main_outputs = {
let _task = ittapi::Task::begin(&itt_domain, #node_name);
self.#node_member.cycle(
Expand All @@ -665,6 +669,9 @@ fn generate_node_execution(
)
.wrap_err(#cycle_error_message)?
};
let cycle_duration = cycle_start.elapsed().expect("time ran backwards");
own_database_reference.cycle_timings.#node_member = cycle_duration;

#database_updates
}
else {
Expand Down
6 changes: 6 additions & 0 deletions crates/code_generation/src/structs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -36,12 +36,18 @@ pub fn generate_structs(structs: &Structs) -> TokenStream {
format_ident!("CyclerState"),
&derives,
);
let cycle_times = hierarchy_to_token_stream(
&cycler_structs.cycle_times,
format_ident!("CycleTimings"),
&derives,
);

quote! {
pub mod #cycler_module_identifier {
#main_outputs
#additional_outputs
#cycler_state
#cycle_times
}
}
});
Expand Down
13 changes: 12 additions & 1 deletion crates/source_analyzer/src/structs.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
use std::{collections::BTreeMap, iter::once};

use quote::format_ident;
use convert_case::{Case, Casing};
use quote::{format_ident, quote};
use syn::{
punctuated::Punctuated, AngleBracketedGenericArguments, GenericArgument, PathArguments, Type,
TypePath,
Expand Down Expand Up @@ -36,6 +37,15 @@ impl Structs {
let cycler_structs = structs.cyclers.entry(cycler.name.clone()).or_default();

for node in cycler.iter_nodes() {
cycler_structs.cycle_times.insert([
InsertionRule::InsertField {
name: node.name.to_case(Case::Snake),
},
InsertionRule::AppendDataType {
data_type: Type::Verbatim(quote! { std::time::Duration }),
},
])?;

for field in node.contexts.main_outputs.iter() {
add_main_outputs(field, cycler_structs);
}
Expand Down Expand Up @@ -133,6 +143,7 @@ pub struct CyclerStructs {
pub main_outputs: StructHierarchy,
pub additional_outputs: StructHierarchy,
pub cycler_state: StructHierarchy,
pub cycle_times: StructHierarchy,
}

fn path_to_insertion_rules<'path>(
Expand Down
Loading