hydro_lang/runtime_support/
resource_measurement.rs
1#[cfg(feature = "runtime_measure")]
2use std::panic::AssertUnwindSafe;
3
4#[cfg(feature = "runtime_measure")]
5use dfir_rs::futures::FutureExt;
6use dfir_rs::scheduled::graph::Dfir;
7#[cfg(feature = "runtime_measure")]
8#[cfg(target_os = "linux")]
9use procfs::WithCurrentSystemInfo;
10
11#[cfg(not(feature = "runtime_measure"))]
12pub async fn run(flow: Dfir<'_>) {
13 dfir_rs::util::deploy::launch_flow(flow).await;
14}
15
16#[cfg(feature = "runtime_measure")]
17pub async fn run(flow: Dfir<'_>) {
18 let res = AssertUnwindSafe(dfir_rs::util::deploy::launch_flow(flow))
20 .catch_unwind()
21 .await;
22
23 #[cfg(target_os = "linux")]
24 {
25 let me = procfs::process::Process::myself().unwrap();
26 let stat = me.stat().unwrap();
27 let sysinfo = procfs::current_system_info();
28
29 let start_time = stat.starttime().get().unwrap();
30 let curr_time = chrono::Local::now();
31 let elapsed_time = curr_time - start_time;
32
33 let seconds_spent = (stat.utime + stat.stime) as f32 / sysinfo.ticks_per_second() as f32;
34 let run_time = chrono::Duration::milliseconds((seconds_spent * 1000.0) as i64);
35
36 let percent_cpu_use =
37 run_time.num_milliseconds() as f32 / elapsed_time.num_milliseconds() as f32;
38 let user_time = chrono::Duration::milliseconds(
39 (stat.utime as f32 / sysinfo.ticks_per_second() as f32 * 1000.0) as i64,
40 );
41 let user_cpu_use =
42 user_time.num_milliseconds() as f32 / elapsed_time.num_milliseconds() as f32;
43 let system_time = chrono::Duration::milliseconds(
44 (stat.stime as f32 / sysinfo.ticks_per_second() as f32 * 1000.0) as i64,
45 );
46 let system_cpu_use =
47 system_time.num_milliseconds() as f32 / elapsed_time.num_milliseconds() as f32;
48 println!(
49 "{} Total {:.4}%, User {:.4}%, System {:.4}%",
50 crate::internal_constants::CPU_USAGE_PREFIX,
51 percent_cpu_use,
52 user_cpu_use,
53 system_cpu_use
54 );
55 }
56
57 #[cfg(not(target_os = "linux"))]
58 {
59 let user_cpu_use = 100.0;
67
68 println!(
69 "{} Total {:.4}%, User {:.4}%, System {:.4}%",
70 crate::internal_constants::CPU_USAGE_PREFIX,
71 user_cpu_use,
72 user_cpu_use,
73 0.0
74 );
75 }
76
77 res.unwrap();
78}