Add harmonic frame rate metric to the PC level test framework
Bug: webrtc:11348 Change-Id: I4dd0cabbaee2d4b5e2dd4fa4398b3d7c0beaa3eb Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/168401 Reviewed-by: Christoffer Rodbro <crodbro@webrtc.org> Commit-Queue: Artem Titov <titovartem@webrtc.org> Cr-Commit-Position: refs/heads/master@{#30492}
This commit is contained in:
@ -635,6 +635,23 @@ void DefaultVideoQualityAnalyzer::ReportResults(
|
|||||||
const FrameCounters& frame_counters) {
|
const FrameCounters& frame_counters) {
|
||||||
using ::webrtc::test::ImproveDirection;
|
using ::webrtc::test::ImproveDirection;
|
||||||
|
|
||||||
|
double sum_squared_interframe_delays_secs = 0;
|
||||||
|
for (const double interframe_delay_ms :
|
||||||
|
stats.time_between_rendered_frames_ms.GetSamples()) {
|
||||||
|
const double interframe_delays_secs = interframe_delay_ms / 1000.0;
|
||||||
|
// Sum of squared inter frame intervals is used to calculate the harmonic
|
||||||
|
// frame rate metric. The metric aims to reflect overall experience related
|
||||||
|
// to smoothness of video playback and includes both freezes and pauses.
|
||||||
|
sum_squared_interframe_delays_secs +=
|
||||||
|
interframe_delays_secs * interframe_delays_secs;
|
||||||
|
}
|
||||||
|
double harmonic_framerate_fps = 0;
|
||||||
|
if (sum_squared_interframe_delays_secs > 0.0) {
|
||||||
|
TimeDelta video_duration = Now() - start_time_;
|
||||||
|
harmonic_framerate_fps =
|
||||||
|
video_duration.seconds() / sum_squared_interframe_delays_secs;
|
||||||
|
}
|
||||||
|
|
||||||
ReportResult("psnr", test_case_name, stats.psnr, "dB",
|
ReportResult("psnr", test_case_name, stats.psnr, "dB",
|
||||||
ImproveDirection::kBiggerIsBetter);
|
ImproveDirection::kBiggerIsBetter);
|
||||||
ReportResult("ssim", test_case_name, stats.ssim, "unitless",
|
ReportResult("ssim", test_case_name, stats.ssim, "unitless",
|
||||||
@ -647,11 +664,14 @@ void DefaultVideoQualityAnalyzer::ReportResults(
|
|||||||
ReportResult("time_between_rendered_frames", test_case_name,
|
ReportResult("time_between_rendered_frames", test_case_name,
|
||||||
stats.time_between_rendered_frames_ms, "ms",
|
stats.time_between_rendered_frames_ms, "ms",
|
||||||
ImproveDirection::kSmallerIsBetter);
|
ImproveDirection::kSmallerIsBetter);
|
||||||
|
test::PrintResult("harmonic_framerate", "", test_case_name,
|
||||||
|
harmonic_framerate_fps, "Hz", /*important=*/false,
|
||||||
|
ImproveDirection::kBiggerIsBetter);
|
||||||
test::PrintResult("encode_frame_rate", "", test_case_name,
|
test::PrintResult("encode_frame_rate", "", test_case_name,
|
||||||
stats.encode_frame_rate.IsEmpty()
|
stats.encode_frame_rate.IsEmpty()
|
||||||
? 0
|
? 0
|
||||||
: stats.encode_frame_rate.GetEventsPerSecond(),
|
: stats.encode_frame_rate.GetEventsPerSecond(),
|
||||||
"fps", /*important=*/false,
|
"Hz", /*important=*/false,
|
||||||
ImproveDirection::kBiggerIsBetter);
|
ImproveDirection::kBiggerIsBetter);
|
||||||
ReportResult("encode_time", test_case_name, stats.encode_time_ms, "ms",
|
ReportResult("encode_time", test_case_name, stats.encode_time_ms, "ms",
|
||||||
ImproveDirection::kSmallerIsBetter);
|
ImproveDirection::kSmallerIsBetter);
|
||||||
|
@ -242,9 +242,10 @@ class DefaultVideoQualityAnalyzer : public VideoQualityAnalyzerInterface {
|
|||||||
void ReportResults();
|
void ReportResults();
|
||||||
static void ReportVideoBweResults(const std::string& test_case_name,
|
static void ReportVideoBweResults(const std::string& test_case_name,
|
||||||
const VideoBweStats& video_bwe_stats);
|
const VideoBweStats& video_bwe_stats);
|
||||||
static void ReportResults(const std::string& test_case_name,
|
void ReportResults(const std::string& test_case_name,
|
||||||
const StreamStats& stats,
|
const StreamStats& stats,
|
||||||
const FrameCounters& frame_counters);
|
const FrameCounters& frame_counters)
|
||||||
|
RTC_EXCLUSIVE_LOCKS_REQUIRED(lock_);
|
||||||
// Report result for single metric for specified stream.
|
// Report result for single metric for specified stream.
|
||||||
static void ReportResult(const std::string& metric_name,
|
static void ReportResult(const std::string& metric_name,
|
||||||
const std::string& test_case_name,
|
const std::string& test_case_name,
|
||||||
|
Reference in New Issue
Block a user