[DVQA] Migrate prev_frame_rendered_time to absl::optoinal<Timestamp>

Bug: webrtc:14995, b/271542055
Change-Id: I7ca676c8c5d4aa86d1328b7d9f14730be163b73d
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/300844
Commit-Queue: Artem Titov <titovartem@webrtc.org>
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#39836}
This commit is contained in:
Artem Titov 2023-04-12 17:27:32 +02:00 committed by WebRTC LUCI CQ
parent 921448fbc6
commit 0ae4d249c7
4 changed files with 10 additions and 8 deletions

View File

@ -34,10 +34,9 @@ struct ReceiverFrameStats {
Timestamp decode_start_time = Timestamp::MinusInfinity(); Timestamp decode_start_time = Timestamp::MinusInfinity();
Timestamp decode_end_time = Timestamp::MinusInfinity(); Timestamp decode_end_time = Timestamp::MinusInfinity();
Timestamp rendered_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. // Will be set if there is frame rendered before this one.
absl::optional<Timestamp> prev_frame_rendered_time = absl::nullopt;
absl::optional<TimeDelta> time_between_rendered_frames = absl::nullopt; absl::optional<TimeDelta> time_between_rendered_frames = absl::nullopt;
// Type and encoded size of received frame. // Type and encoded size of received frame.

View File

@ -554,7 +554,7 @@ void DefaultVideoQualityAnalyzerFramesComparator::ProcessComparison(
frame_stats.decode_end_time, metadata)); 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()) { frame_stats.rendered_time.IsFinite()) {
RTC_DCHECK(frame_stats.time_between_rendered_frames.has_value()); RTC_DCHECK(frame_stats.time_between_rendered_frames.has_value());
stats->time_between_rendered_frames_ms.AddSample( 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()); RTC_DCHECK(freeze_end_it != stream_last_freeze_end_time_.end());
// TODO(bugs.webrtc.org/14995): rethink this metric for paused stream. // TODO(bugs.webrtc.org/14995): rethink this metric for paused stream.
stats->time_between_freezes_ms.AddSample(StatsSample( 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)); frame_stats.rendered_time, metadata));
freeze_end_it->second = frame_stats.rendered_time; freeze_end_it->second = frame_stats.rendered_time;
} }

View File

@ -1604,13 +1604,16 @@ TEST(DefaultVideoQualityAnalyzerFramesComparatorTest,
// Add 5 frames which were rendered with 30 fps (~30ms between frames) // 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. // Frame ids are in [1..5] and last frame is with 120ms offset from first.
Timestamp prev_frame_rendered_time = Timestamp::MinusInfinity(); absl::optional<Timestamp> prev_frame_rendered_time = absl::nullopt;
for (int i = 0; i < 5; ++i) { for (int i = 0; i < 5; ++i) {
FrameStats frame_stats = FrameStatsWith10msDeltaBetweenPhasesAnd10x10Frame( FrameStats frame_stats = FrameStatsWith10msDeltaBetweenPhasesAnd10x10Frame(
/*frame_id=*/i + 1, stream_start_time + TimeDelta::Millis(30 * i)); /*frame_id=*/i + 1, stream_start_time + TimeDelta::Millis(30 * i));
frame_stats.prev_frame_rendered_time = prev_frame_rendered_time; frame_stats.prev_frame_rendered_time = prev_frame_rendered_time;
frame_stats.time_between_rendered_frames = frame_stats.time_between_rendered_frames =
frame_stats.rendered_time - prev_frame_rendered_time; prev_frame_rendered_time.has_value()
? absl::optional<TimeDelta>(frame_stats.rendered_time -
*prev_frame_rendered_time)
: absl::nullopt;
prev_frame_rendered_time = frame_stats.rendered_time; prev_frame_rendered_time = frame_stats.rendered_time;
comparator.AddComparison(stats_key, comparator.AddComparison(stats_key,
@ -1626,7 +1629,7 @@ TEST(DefaultVideoQualityAnalyzerFramesComparatorTest,
/*frame_id=*/10, stream_start_time + TimeDelta::Millis(120 + 300)); /*frame_id=*/10, stream_start_time + TimeDelta::Millis(120 + 300));
freeze_frame_stats.prev_frame_rendered_time = prev_frame_rendered_time; freeze_frame_stats.prev_frame_rendered_time = prev_frame_rendered_time;
freeze_frame_stats.time_between_rendered_frames = 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, comparator.AddComparison(stats_key,
/*skipped_between_rendered=*/4, /*skipped_between_rendered=*/4,

View File

@ -57,9 +57,9 @@ struct FrameStats {
Timestamp decode_start_time = Timestamp::MinusInfinity(); Timestamp decode_start_time = Timestamp::MinusInfinity();
Timestamp decode_end_time = Timestamp::MinusInfinity(); Timestamp decode_end_time = Timestamp::MinusInfinity();
Timestamp rendered_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. // Next timings are set if and only if previous frame exist.
absl::optional<Timestamp> prev_frame_rendered_time = absl::nullopt;
absl::optional<TimeDelta> time_between_captured_frames = absl::nullopt; absl::optional<TimeDelta> time_between_captured_frames = absl::nullopt;
absl::optional<TimeDelta> time_between_encoded_frames = absl::nullopt; absl::optional<TimeDelta> time_between_encoded_frames = absl::nullopt;
absl::optional<TimeDelta> time_between_rendered_frames = absl::nullopt; absl::optional<TimeDelta> time_between_rendered_frames = absl::nullopt;