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 cbe1a709f7..e216c70c6f 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 @@ -30,7 +30,7 @@ namespace webrtc { namespace { -constexpr int kFreezeThresholdMs = 150; +constexpr TimeDelta kFreezeThreshold = TimeDelta::Millis(150); constexpr int kMaxActiveComparisons = 10; SamplesStatsCounter::StatsSample StatsSample(double value, @@ -38,6 +38,11 @@ SamplesStatsCounter::StatsSample StatsSample(double value, return SamplesStatsCounter::StatsSample{value, sampling_time}; } +SamplesStatsCounter::StatsSample StatsSample(TimeDelta duration, + Timestamp sampling_time) { + return SamplesStatsCounter::StatsSample{duration.ms(), sampling_time}; +} + FrameComparison ValidateFrameComparison(FrameComparison comparison) { RTC_DCHECK(comparison.frame_stats.captured_time.IsFinite()) << "Any comparison has to have finite captured_time"; @@ -212,10 +217,9 @@ void DefaultVideoQualityAnalyzerFramesComparator::Stop( // `last_rendered_frame_time` for this stream will be stream start time. // If there is freeze, then we need add time from last rendered frame // to last freeze end as time between freezes. - stream_stats_.at(stats_key).time_between_freezes_ms.AddSample( - StatsSample(last_rendered_frame_time.ms() - - stream_last_freeze_end_time_.at(stats_key).ms(), - Now())); + stream_stats_.at(stats_key).time_between_freezes_ms.AddSample(StatsSample( + last_rendered_frame_time - stream_last_freeze_end_time_.at(stats_key), + Now())); } } } @@ -422,9 +426,9 @@ void DefaultVideoQualityAnalyzerFramesComparator::ProcessComparison( } if (frame_stats.encoded_time.IsFinite()) { - stats->encode_time_ms.AddSample(StatsSample( - (frame_stats.encoded_time - frame_stats.pre_encode_time).ms(), - frame_stats.encoded_time)); + stats->encode_time_ms.AddSample( + StatsSample(frame_stats.encoded_time - frame_stats.pre_encode_time, + frame_stats.encoded_time)); stats->encode_frame_rate.AddEvent(frame_stats.encoded_time); stats->total_encoded_images_payload += frame_stats.encoded_image_size.bytes(); @@ -443,17 +447,17 @@ void DefaultVideoQualityAnalyzerFramesComparator::ProcessComparison( StatsSample(*comparison.frame_stats.rendered_frame_width * *comparison.frame_stats.rendered_frame_height, frame_stats.rendered_time)); - stats->total_delay_incl_transport_ms.AddSample(StatsSample( - (frame_stats.rendered_time - frame_stats.captured_time).ms(), - frame_stats.received_time)); - stats->receive_to_render_time_ms.AddSample(StatsSample( - (frame_stats.rendered_time - frame_stats.received_time).ms(), - frame_stats.rendered_time)); + stats->total_delay_incl_transport_ms.AddSample( + StatsSample(frame_stats.rendered_time - frame_stats.captured_time, + frame_stats.received_time)); + stats->receive_to_render_time_ms.AddSample( + StatsSample(frame_stats.rendered_time - frame_stats.received_time, + frame_stats.rendered_time)); } if (frame_stats.decode_start_time.IsFinite()) { - stats->transport_time_ms.AddSample(StatsSample( - (frame_stats.decode_start_time - frame_stats.encoded_time).ms(), - frame_stats.decode_start_time)); + stats->transport_time_ms.AddSample( + StatsSample(frame_stats.decode_start_time - frame_stats.encoded_time, + frame_stats.decode_start_time)); // Stats sliced on decoded frame type. if (frame_stats.pre_decoded_frame_type == @@ -471,7 +475,7 @@ void DefaultVideoQualityAnalyzerFramesComparator::ProcessComparison( } if (frame_stats.decode_end_time.IsFinite()) { stats->decode_time_ms.AddSample(StatsSample( - (frame_stats.decode_end_time - frame_stats.decode_start_time).ms(), + frame_stats.decode_end_time - frame_stats.decode_start_time, frame_stats.decode_end_time)); } @@ -479,20 +483,20 @@ void DefaultVideoQualityAnalyzerFramesComparator::ProcessComparison( frame_stats.rendered_time.IsFinite()) { TimeDelta time_between_rendered_frames = frame_stats.rendered_time - frame_stats.prev_frame_rendered_time; - stats->time_between_rendered_frames_ms.AddSample(StatsSample( - time_between_rendered_frames.ms(), frame_stats.rendered_time)); - double average_time_between_rendered_frames_ms = - stats->time_between_rendered_frames_ms.GetAverage(); - if (time_between_rendered_frames.ms() > - std::max(kFreezeThresholdMs + average_time_between_rendered_frames_ms, - 3 * average_time_between_rendered_frames_ms)) { + stats->time_between_rendered_frames_ms.AddSample( + StatsSample(time_between_rendered_frames, frame_stats.rendered_time)); + TimeDelta average_time_between_rendered_frames = TimeDelta::Millis( + stats->time_between_rendered_frames_ms.GetAverage()); + if (time_between_rendered_frames > + std::max(kFreezeThreshold + average_time_between_rendered_frames, + 3 * average_time_between_rendered_frames)) { stats->freeze_time_ms.AddSample(StatsSample( - time_between_rendered_frames.ms(), frame_stats.rendered_time)); + time_between_rendered_frames, frame_stats.rendered_time)); auto freeze_end_it = stream_last_freeze_end_time_.find(comparison.stats_key); RTC_DCHECK(freeze_end_it != stream_last_freeze_end_time_.end()); stats->time_between_freezes_ms.AddSample(StatsSample( - (frame_stats.prev_frame_rendered_time - freeze_end_it->second).ms(), + frame_stats.prev_frame_rendered_time - freeze_end_it->second, frame_stats.rendered_time)); 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 56ac7894bc..b9b822072f 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 @@ -13,11 +13,9 @@ #include #include -#include "api/test/create_frame_generator.h" #include "api/units/timestamp.h" #include "rtc_base/strings/string_builder.h" #include "system_wrappers/include/clock.h" -#include "system_wrappers/include/sleep.h" #include "test/gtest.h" #include "test/pc/e2e/analyzer/video/default_video_quality_analyzer_cpu_measurer.h" #include "test/pc/e2e/analyzer/video/default_video_quality_analyzer_shared_objects.h" @@ -55,7 +53,8 @@ FrameStats FrameStatsWith10msDeltaBetweenPhasesAnd10x10Frame( frame_stats.encoded_time = captured_time + TimeDelta::Millis(20); frame_stats.received_time = captured_time + TimeDelta::Millis(30); frame_stats.decode_start_time = captured_time + TimeDelta::Millis(40); - frame_stats.decode_end_time = captured_time + TimeDelta::Millis(50); + // Decode time is in microseconds. + frame_stats.decode_end_time = captured_time + TimeDelta::Micros(40010); frame_stats.rendered_time = captured_time + TimeDelta::Millis(60); frame_stats.used_encoder = Vp8CodecForOneFrame(1, frame_stats.encoded_time); frame_stats.used_decoder = @@ -125,7 +124,7 @@ TEST(DefaultVideoQualityAnalyzerFramesComparatorTest, EXPECT_DOUBLE_EQ( GetFirstOrDie(stats.at(stats_key).total_delay_incl_transport_ms), 60.0); EXPECT_DOUBLE_EQ(GetFirstOrDie(stats.at(stats_key).encode_time_ms), 10.0); - EXPECT_DOUBLE_EQ(GetFirstOrDie(stats.at(stats_key).decode_time_ms), 10.0); + EXPECT_DOUBLE_EQ(GetFirstOrDie(stats.at(stats_key).decode_time_ms), 0.01); EXPECT_DOUBLE_EQ(GetFirstOrDie(stats.at(stats_key).receive_to_render_time_ms), 30.0); EXPECT_DOUBLE_EQ(