diff --git a/test/pc/e2e/analyzer/video/default_video_quality_analyzer_frame_in_flight.h b/test/pc/e2e/analyzer/video/default_video_quality_analyzer_frame_in_flight.h index 4093558e00..d73de29afb 100644 --- a/test/pc/e2e/analyzer/video/default_video_quality_analyzer_frame_in_flight.h +++ b/test/pc/e2e/analyzer/video/default_video_quality_analyzer_frame_in_flight.h @@ -34,10 +34,9 @@ struct ReceiverFrameStats { Timestamp decode_start_time = Timestamp::MinusInfinity(); Timestamp decode_end_time = Timestamp::MinusInfinity(); Timestamp rendered_time = Timestamp::MinusInfinity(); - // Will be finite if there is frame rendered before this one. - Timestamp prev_frame_rendered_time = Timestamp::MinusInfinity(); // Will be set if there is frame rendered before this one. + absl::optional prev_frame_rendered_time = absl::nullopt; absl::optional time_between_rendered_frames = absl::nullopt; // Type and encoded size of received frame. diff --git a/test/pc/e2e/analyzer/video/default_video_quality_analyzer_frames_comparator.cc b/test/pc/e2e/analyzer/video/default_video_quality_analyzer_frames_comparator.cc index 65b6fcc52b..eb10aef34c 100644 --- a/test/pc/e2e/analyzer/video/default_video_quality_analyzer_frames_comparator.cc +++ b/test/pc/e2e/analyzer/video/default_video_quality_analyzer_frames_comparator.cc @@ -554,7 +554,7 @@ void DefaultVideoQualityAnalyzerFramesComparator::ProcessComparison( frame_stats.decode_end_time, metadata)); } - if (frame_stats.prev_frame_rendered_time.IsFinite() && + if (frame_stats.prev_frame_rendered_time.has_value() && frame_stats.rendered_time.IsFinite()) { RTC_DCHECK(frame_stats.time_between_rendered_frames.has_value()); stats->time_between_rendered_frames_ms.AddSample( @@ -573,7 +573,7 @@ void DefaultVideoQualityAnalyzerFramesComparator::ProcessComparison( RTC_DCHECK(freeze_end_it != stream_last_freeze_end_time_.end()); // TODO(bugs.webrtc.org/14995): rethink this metric for paused stream. stats->time_between_freezes_ms.AddSample(StatsSample( - frame_stats.prev_frame_rendered_time - freeze_end_it->second, + *frame_stats.prev_frame_rendered_time - freeze_end_it->second, frame_stats.rendered_time, metadata)); freeze_end_it->second = frame_stats.rendered_time; } diff --git a/test/pc/e2e/analyzer/video/default_video_quality_analyzer_frames_comparator_test.cc b/test/pc/e2e/analyzer/video/default_video_quality_analyzer_frames_comparator_test.cc index 0024e794a5..2656bf5d44 100644 --- a/test/pc/e2e/analyzer/video/default_video_quality_analyzer_frames_comparator_test.cc +++ b/test/pc/e2e/analyzer/video/default_video_quality_analyzer_frames_comparator_test.cc @@ -1604,13 +1604,16 @@ TEST(DefaultVideoQualityAnalyzerFramesComparatorTest, // Add 5 frames which were rendered with 30 fps (~30ms between frames) // Frame ids are in [1..5] and last frame is with 120ms offset from first. - Timestamp prev_frame_rendered_time = Timestamp::MinusInfinity(); + absl::optional prev_frame_rendered_time = absl::nullopt; for (int i = 0; i < 5; ++i) { FrameStats frame_stats = FrameStatsWith10msDeltaBetweenPhasesAnd10x10Frame( /*frame_id=*/i + 1, stream_start_time + TimeDelta::Millis(30 * i)); frame_stats.prev_frame_rendered_time = prev_frame_rendered_time; frame_stats.time_between_rendered_frames = - frame_stats.rendered_time - prev_frame_rendered_time; + prev_frame_rendered_time.has_value() + ? absl::optional(frame_stats.rendered_time - + *prev_frame_rendered_time) + : absl::nullopt; prev_frame_rendered_time = frame_stats.rendered_time; comparator.AddComparison(stats_key, @@ -1626,7 +1629,7 @@ TEST(DefaultVideoQualityAnalyzerFramesComparatorTest, /*frame_id=*/10, stream_start_time + TimeDelta::Millis(120 + 300)); freeze_frame_stats.prev_frame_rendered_time = prev_frame_rendered_time; freeze_frame_stats.time_between_rendered_frames = - freeze_frame_stats.rendered_time - prev_frame_rendered_time; + freeze_frame_stats.rendered_time - *prev_frame_rendered_time; comparator.AddComparison(stats_key, /*skipped_between_rendered=*/4, diff --git a/test/pc/e2e/analyzer/video/default_video_quality_analyzer_internal_shared_objects.h b/test/pc/e2e/analyzer/video/default_video_quality_analyzer_internal_shared_objects.h index e2e55eb8a7..88c0335b5a 100644 --- a/test/pc/e2e/analyzer/video/default_video_quality_analyzer_internal_shared_objects.h +++ b/test/pc/e2e/analyzer/video/default_video_quality_analyzer_internal_shared_objects.h @@ -57,9 +57,9 @@ struct FrameStats { Timestamp decode_start_time = Timestamp::MinusInfinity(); Timestamp decode_end_time = Timestamp::MinusInfinity(); Timestamp rendered_time = Timestamp::MinusInfinity(); - Timestamp prev_frame_rendered_time = Timestamp::MinusInfinity(); // Next timings are set if and only if previous frame exist. + absl::optional prev_frame_rendered_time = absl::nullopt; absl::optional time_between_captured_frames = absl::nullopt; absl::optional time_between_encoded_frames = absl::nullopt; absl::optional time_between_rendered_frames = absl::nullopt;