lobe_core/engine/
timing.rs1use crate::models::TimingReport;
2
3#[derive(Debug, Clone, Copy, Default)]
4pub struct TimingPhases {
5 pub dns_ms: u64,
6 pub tcp_ms: u64,
7 pub tls_ms: u64,
8 pub ttfb_ms: u64,
9 pub download_ms: u64,
10}
11
12pub fn build_report(
13 dns_ms: u64,
14 tcp_ms: u64,
15 tls_ms: u64,
16 ttfb_ms: u64,
17 download_ms: u64,
18) -> TimingReport {
19 let total_ms = calculate_total_ms(dns_ms, tcp_ms, tls_ms, ttfb_ms, download_ms);
20
21 TimingReport {
22 dns_ms,
23 tcp_ms,
24 tls_ms,
25 ttfb_ms,
26 download_ms,
27 total_ms,
28 }
29}
30
31pub fn build_report_from_phases(phases: TimingPhases) -> TimingReport {
32 build_report(
33 phases.dns_ms,
34 phases.tcp_ms,
35 phases.tls_ms,
36 phases.ttfb_ms,
37 phases.download_ms,
38 )
39}
40
41pub fn calculate_total_ms(
42 dns_ms: u64,
43 tcp_ms: u64,
44 tls_ms: u64,
45 ttfb_ms: u64,
46 download_ms: u64,
47) -> u64 {
48 dns_ms + tcp_ms + tls_ms + ttfb_ms + download_ms
49}
50
51#[cfg(test)]
52mod tests {
53 use super::{build_report, build_report_from_phases, calculate_total_ms, TimingPhases};
54
55 #[test]
56 fn calculate_total_ms_sums_all_phases() {
57 let total_ms = calculate_total_ms(10, 20, 30, 40, 50);
58
59 assert_eq!(total_ms, 150);
60 }
61
62 #[test]
63 fn calculate_total_ms_handles_zero_values() {
64 let total_ms = calculate_total_ms(0, 0, 0, 0, 0);
65
66 assert_eq!(total_ms, 0);
67 }
68
69 #[test]
70 fn build_report_populates_each_field() {
71 let report = build_report(15, 25, 35, 45, 55);
72
73 assert_eq!(report.dns_ms, 15);
74 assert_eq!(report.tcp_ms, 25);
75 assert_eq!(report.tls_ms, 35);
76 assert_eq!(report.ttfb_ms, 45);
77 assert_eq!(report.download_ms, 55);
78 assert_eq!(report.total_ms, 175);
79 }
80
81 #[test]
82 fn build_report_from_phases_uses_phase_values() {
83 let phases = TimingPhases {
84 dns_ms: 5,
85 tcp_ms: 10,
86 tls_ms: 15,
87 ttfb_ms: 20,
88 download_ms: 25,
89 };
90
91 let report = build_report_from_phases(phases);
92
93 assert_eq!(report.dns_ms, 5);
94 assert_eq!(report.tcp_ms, 10);
95 assert_eq!(report.tls_ms, 15);
96 assert_eq!(report.ttfb_ms, 20);
97 assert_eq!(report.download_ms, 25);
98 assert_eq!(report.total_ms, 75);
99 }
100}