Change the type of RTCVideoSourceStats.framesPerSecond
Spec: https://w3c.github.io/webrtc-stats/#dom-rtcvideosourcestats-framespersecond
Bug: webrtc:12905
Change-Id: If53e2e480e2d6f687c3f8bb95a9e1d1e386fe9c2
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/237420
Reviewed-by: Ilya Nikolaevskiy <ilnik@webrtc.org>
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Reviewed-by: Henrik Boström <hbos@webrtc.org>
Commit-Queue: Byoungchan Lee <daniel.l@hpcnt.com>
Cr-Commit-Position: refs/heads/main@{#35352}
diff --git a/api/stats/rtcstats_objects.h b/api/stats/rtcstats_objects.h
index 3795d79..dec3094 100644
--- a/api/stats/rtcstats_objects.h
+++ b/api/stats/rtcstats_objects.h
@@ -648,7 +648,7 @@
RTCStatsMember<uint32_t> width;
RTCStatsMember<uint32_t> height;
RTCStatsMember<uint32_t> frames;
- RTCStatsMember<uint32_t> frames_per_second;
+ RTCStatsMember<double> frames_per_second;
};
// https://w3c.github.io/webrtc-stats/#transportstats-dict*
diff --git a/call/BUILD.gn b/call/BUILD.gn
index 87c0ec0..b5002e4 100644
--- a/call/BUILD.gn
+++ b/call/BUILD.gn
@@ -362,6 +362,7 @@
"../modules/rtp_rtcp:rtp_rtcp_format",
"../rtc_base:checks",
"../rtc_base:rtc_base_approved",
+ "../rtc_base:stringutils",
]
absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
}
diff --git a/call/video_send_stream.cc b/call/video_send_stream.cc
index 25513e4..241d44a 100644
--- a/call/video_send_stream.cc
+++ b/call/video_send_stream.cc
@@ -14,6 +14,7 @@
#include "api/crypto/frame_encryptor_interface.h"
#include "rtc_base/strings/string_builder.h"
+#include "rtc_base/strings/string_format.h"
namespace webrtc {
@@ -71,7 +72,7 @@
char buf[2048];
rtc::SimpleStringBuilder ss(buf);
ss << "VideoSendStream stats: " << time_ms << ", {";
- ss << "input_fps: " << input_frame_rate << ", ";
+ ss << "input_fps: " << rtc::StringFormat("%.1f", input_frame_rate) << ", ";
ss << "encode_fps: " << encode_frame_rate << ", ";
ss << "encode_ms: " << avg_encode_time_ms << ", ";
ss << "encode_usage_perc: " << encode_usage_percent << ", ";
diff --git a/call/video_send_stream.h b/call/video_send_stream.h
index 487f304..f899a73 100644
--- a/call/video_send_stream.h
+++ b/call/video_send_stream.h
@@ -98,7 +98,7 @@
~Stats();
std::string ToString(int64_t time_ms) const;
std::string encoder_implementation_name = "unknown";
- int input_frame_rate = 0;
+ double input_frame_rate = 0;
int encode_frame_rate = 0;
int avg_encode_time_ms = 0;
int encode_usage_percent = 0;
diff --git a/media/base/media_channel.h b/media/base/media_channel.h
index 519ca5d..b3ceb39 100644
--- a/media/base/media_channel.h
+++ b/media/base/media_channel.h
@@ -549,7 +549,7 @@
int send_frame_width = 0;
int send_frame_height = 0;
int frames = 0;
- int framerate_input = 0;
+ double framerate_input = 0;
int framerate_sent = 0;
int aggregated_framerate_sent = 0;
int nominal_bitrate = 0;
diff --git a/media/engine/webrtc_video_engine_unittest.cc b/media/engine/webrtc_video_engine_unittest.cc
index a02c14e..2265dd9 100644
--- a/media/engine/webrtc_video_engine_unittest.cc
+++ b/media/engine/webrtc_video_engine_unittest.cc
@@ -5479,7 +5479,7 @@
webrtc::VideoSendStream::Stats GetInitialisedStats() {
webrtc::VideoSendStream::Stats stats;
stats.encoder_implementation_name = "vp";
- stats.input_frame_rate = 1;
+ stats.input_frame_rate = 1.0;
stats.encode_frame_rate = 2;
stats.avg_encode_time_ms = 3;
stats.encode_usage_percent = 4;
diff --git a/pc/rtc_stats_collector_unittest.cc b/pc/rtc_stats_collector_unittest.cc
index 4ee5dc8..87a1bc0 100644
--- a/pc/rtc_stats_collector_unittest.cc
+++ b/pc/rtc_stats_collector_unittest.cc
@@ -2701,11 +2701,11 @@
video_media_info.senders.push_back(cricket::VideoSenderInfo());
video_media_info.senders[0].local_stats.push_back(cricket::SsrcSenderInfo());
video_media_info.senders[0].local_stats[0].ssrc = kSsrc;
- video_media_info.senders[0].framerate_input = 29;
+ video_media_info.senders[0].framerate_input = 29.0;
video_media_info.aggregated_senders[0].local_stats.push_back(
cricket::SsrcSenderInfo());
video_media_info.aggregated_senders[0].local_stats[0].ssrc = kSsrc;
- video_media_info.aggregated_senders[0].framerate_input = 29;
+ video_media_info.aggregated_senders[0].framerate_input = 29.0;
video_media_info.aggregated_senders[0].frames = 10001;
auto* video_media_channel = pc_->AddVideoChannel("VideoMid", "TransportName");
video_media_channel->SetStats(video_media_info);
@@ -2726,7 +2726,7 @@
expected_video.kind = "video";
expected_video.width = kVideoSourceWidth;
expected_video.height = kVideoSourceHeight;
- expected_video.frames_per_second = 29;
+ expected_video.frames_per_second = 29.0;
expected_video.frames = 10001;
ASSERT_TRUE(report->Get(expected_video.id()));
@@ -2750,7 +2750,7 @@
cricket::VideoMediaInfo video_media_info;
video_media_info.senders.push_back(cricket::VideoSenderInfo());
video_media_info.senders[0].local_stats.push_back(cricket::SsrcSenderInfo());
- video_media_info.senders[0].framerate_input = 29;
+ video_media_info.senders[0].framerate_input = 29.0;
auto* video_media_channel = pc_->AddVideoChannel("VideoMid", "TransportName");
video_media_channel->SetStats(video_media_info);
@@ -2781,7 +2781,7 @@
video_media_info.senders.push_back(cricket::VideoSenderInfo());
video_media_info.senders[0].local_stats.push_back(cricket::SsrcSenderInfo());
video_media_info.senders[0].local_stats[0].ssrc = kSsrc;
- video_media_info.senders[0].framerate_input = 29;
+ video_media_info.senders[0].framerate_input = 29.0;
auto* video_media_channel = pc_->AddVideoChannel("VideoMid", "TransportName");
video_media_channel->SetStats(video_media_info);
@@ -3133,7 +3133,7 @@
video_media_info.senders.push_back(cricket::VideoSenderInfo());
video_media_info.senders[0].local_stats.push_back(cricket::SsrcSenderInfo());
video_media_info.senders[0].local_stats[0].ssrc = kSsrc;
- video_media_info.senders[0].framerate_input = 29;
+ video_media_info.senders[0].framerate_input = 29.0;
auto* video_media_channel = pc_->AddVideoChannel("VideoMid", "TransportName");
video_media_channel->SetStats(video_media_info);
diff --git a/pc/rtc_stats_integrationtest.cc b/pc/rtc_stats_integrationtest.cc
index 32c567e..ca0df26 100644
--- a/pc/rtc_stats_integrationtest.cc
+++ b/pc/rtc_stats_integrationtest.cc
@@ -1112,7 +1112,7 @@
verifier.TestMemberIsUndefined(video_source.width);
verifier.TestMemberIsUndefined(video_source.height);
verifier.TestMemberIsNonNegative<uint32_t>(video_source.frames);
- verifier.TestMemberIsNonNegative<uint32_t>(video_source.frames_per_second);
+ verifier.TestMemberIsNonNegative<double>(video_source.frames_per_second);
return verifier.ExpectAllMembersSuccessfullyTested();
}
diff --git a/pc/stats_collector.cc b/pc/stats_collector.cc
index 01c519f..f4b48f7 100644
--- a/pc/stats_collector.cc
+++ b/pc/stats_collector.cc
@@ -13,6 +13,7 @@
#include <stddef.h>
#include <stdint.h>
+#include <cmath>
#include <memory>
#include <set>
#include <utility>
@@ -385,7 +386,7 @@
info.encode_usage_percent},
{StatsReport::kStatsValueNameFirsReceived, info.firs_rcvd},
{StatsReport::kStatsValueNameFrameHeightSent, info.send_frame_height},
- {StatsReport::kStatsValueNameFrameRateInput, info.framerate_input},
+ {StatsReport::kStatsValueNameFrameRateInput, round(info.framerate_input)},
{StatsReport::kStatsValueNameFrameRateSent, info.framerate_sent},
{StatsReport::kStatsValueNameFrameWidthSent, info.send_frame_width},
{StatsReport::kStatsValueNameNacksReceived, info.nacks_rcvd},
diff --git a/video/send_statistics_proxy.cc b/video/send_statistics_proxy.cc
index eeb379f..2eafa30 100644
--- a/video/send_statistics_proxy.cc
+++ b/video/send_statistics_proxy.cc
@@ -737,7 +737,7 @@
MutexLock lock(&mutex_);
PurgeOldStats();
stats_.input_frame_rate =
- round(uma_container_->input_frame_rate_tracker_.ComputeRate());
+ uma_container_->input_frame_rate_tracker_.ComputeRate();
stats_.frames =
uma_container_->input_frame_rate_tracker_.TotalSampleCount();
stats_.content_type =