Skip to content

Commit 52e5404

Browse files
committed
fix: correct duration calculation and improve display format
- Fix timing override bug: use parser timing (all frames) not sample timing (subset) - Add enhanced duration display: XXXXms (XXmXX.Xs) format - Add debug output gated by --debug flag
1 parent 233c2fd commit 52e5404

1 file changed

Lines changed: 48 additions & 7 deletions

File tree

src/main.rs

Lines changed: 48 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -554,13 +554,40 @@ fn parse_single_log(
554554

555555
// Parse binary frame data
556556
let binary_data = &log_data[header_end..];
557-
let (mut stats, frames, debug_frames, gps_coords, home_coords, events) =
557+
let (stats, frames, debug_frames, gps_coords, home_coords, events) =
558558
parse_frames(binary_data, &header, debug, export_options)?;
559559

560-
// Update frame stats timing from actual frame data
561-
if !frames.is_empty() {
562-
stats.start_time_us = frames.first().unwrap().timestamp_us;
563-
stats.end_time_us = frames.last().unwrap().timestamp_us;
560+
// Keep the timing from parser which processes ALL frames
561+
// Don't override with sample frames timing as that only contains a subset
562+
// The parser already correctly sets stats.start_time_us and stats.end_time_us
563+
564+
if debug && !frames.is_empty() {
565+
// Store original timing from parser
566+
let parser_start = stats.start_time_us;
567+
let parser_end = stats.end_time_us;
568+
let parser_duration = parser_end.saturating_sub(parser_start);
569+
570+
let sample_start = frames.first().unwrap().timestamp_us;
571+
let sample_end = frames.last().unwrap().timestamp_us;
572+
let sample_duration = sample_end.saturating_sub(sample_start);
573+
574+
println!(
575+
"DEBUG: Parser timing (ALL frames) - start: {} us, end: {} us, duration: {} ms",
576+
parser_start,
577+
parser_end,
578+
parser_duration / 1000
579+
);
580+
println!(
581+
"DEBUG: Sample timing (subset) - start: {} us, end: {} us, duration: {} ms",
582+
sample_start,
583+
sample_end,
584+
sample_duration / 1000
585+
);
586+
println!(
587+
"DEBUG: Total frames: {}, Sample frames: {}",
588+
stats.total_frames,
589+
frames.len()
590+
);
564591
}
565592

566593
let log = BBLLog {
@@ -974,8 +1001,22 @@ fn display_log_info(log: &BBLLog) {
9741001

9751002
// Display timing if available
9761003
if stats.start_time_us > 0 && stats.end_time_us > stats.start_time_us {
977-
let duration_ms = (stats.end_time_us.saturating_sub(stats.start_time_us)) / 1000;
978-
println!("Duration {duration_ms:6} ms");
1004+
let duration_us = stats.end_time_us.saturating_sub(stats.start_time_us);
1005+
let duration_ms = duration_us / 1000;
1006+
1007+
// Format as mm:ss.mmm for better readability
1008+
let total_seconds = duration_us as f64 / 1_000_000.0;
1009+
let minutes = (total_seconds / 60.0) as u32;
1010+
let seconds = total_seconds % 60.0;
1011+
1012+
if minutes > 0 {
1013+
println!(
1014+
"Duration {:5}ms ({:02}m{:04.1}s)",
1015+
duration_ms, minutes, seconds
1016+
);
1017+
} else {
1018+
println!("Duration {:5}ms ({:04.1}s)", duration_ms, seconds);
1019+
}
9791020
}
9801021

9811022
// Display data version and missing iterations

0 commit comments

Comments
 (0)