flowey_lib_hvlite/_jobs/
local_build_and_run_vmm_perf.rs1use crate::common::CommonProfile;
7use crate::common::CommonTriple;
8use crate::run_vmm_perf::VmmPerfProfile;
9use flowey::node::prelude::*;
10
11flowey_request! {
12 pub struct Params {
13 pub target: CommonTriple,
14 pub profile: CommonProfile,
15 pub root_dir: PathBuf,
16 pub profiles: Vec<VmmPerfProfile>,
17 pub vm_sizes_json: Option<String>,
18 pub parameters_json: Option<String>,
19 pub runtime_archive: Option<PathBuf>,
20 pub build_only: bool,
21 pub done: WriteVar<SideEffect>,
22 }
23}
24
25new_simple_flow_node!(struct Node);
26
27impl SimpleFlowNode for Node {
28 type Request = Params;
29
30 fn imports(ctx: &mut ImportCtx<'_>) {
31 ctx.import::<crate::build_openvmm::Node>();
32 ctx.import::<crate::build_vmm_perf::Node>();
33 ctx.import::<crate::_jobs::setup_and_run_vmm_perf::Node>();
34 }
35
36 fn process_request(request: Self::Request, ctx: &mut NodeCtx<'_>) -> anyhow::Result<()> {
37 let Params {
38 target,
39 profile,
40 root_dir,
41 profiles,
42 vm_sizes_json,
43 parameters_json,
44 runtime_archive,
45 build_only,
46 done,
47 } = request;
48
49 let openvmm = ctx.reqv(|v| crate::build_openvmm::Request {
50 params: crate::build_openvmm::OpenvmmBuildParams {
51 target: target.clone(),
52 profile,
53 features: [crate::build_openvmm::OpenvmmFeature::Tpm].into(),
54 },
55 openvmm: v,
56 });
57 let runner = ctx.reqv(|v| crate::build_vmm_perf::Request {
58 target,
59 profile,
60 vmm_perf: v,
61 });
62
63 if build_only {
64 ctx.emit_side_effect_step(
65 [openvmm.into_side_effect(), runner.into_side_effect()],
66 [done],
67 );
68 } else {
69 ctx.req(crate::_jobs::setup_and_run_vmm_perf::Params {
70 label: "vmm-perf".into(),
71 runner,
72 openvmm,
73 profiles,
74 vm_sizes_json,
75 parameters_json,
76 runtime_archive: runtime_archive.map(ReadVar::from_static),
77 root_dir: Some(ReadVar::from_static(root_dir)),
78 hugetlb_2mb_overcommit_pages: None,
79 done,
80 });
81 }
82
83 Ok(())
84 }
85}