@@ -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