Fix for encoded framerate stats per layer.
Update framerate for top spatial layer instead of per timestamp (to ensure all simulcast layers are updated). Bug: webrtc:13037 Change-Id: I4fa423dee40d74aee22a87855207b885f0536e25 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/227344 Commit-Queue: Åsa Persson <asapersson@webrtc.org> Reviewed-by: Erik Språng <sprang@webrtc.org> Cr-Commit-Position: refs/heads/master@{#34634}
This commit is contained in:
parent
df7156965b
commit
8d564722d7
@ -1019,9 +1019,13 @@ void SendStatisticsProxy::OnSendEncodedImage(
|
||||
media_byte_rate_tracker_.AddSamples(encoded_image.size());
|
||||
|
||||
if (uma_container_->InsertEncodedFrame(encoded_image, simulcast_idx)) {
|
||||
encoded_frame_rate_trackers_[simulcast_idx]->AddSamples(1);
|
||||
// First frame seen with this timestamp, track overall fps.
|
||||
encoded_frame_rate_tracker_.AddSamples(1);
|
||||
}
|
||||
// is_top_spatial_layer pertains only to SVC, will always be true for
|
||||
// simulcast.
|
||||
if (is_top_spatial_layer)
|
||||
encoded_frame_rate_trackers_[simulcast_idx]->AddSamples(1);
|
||||
|
||||
absl::optional<int> downscales =
|
||||
adaptation_limitations_.MaskedQualityCounts().resolution_adaptations;
|
||||
|
||||
@ -477,6 +477,57 @@ TEST_F(SendStatisticsProxyTest, EncodeFrameRateInSubStream) {
|
||||
EXPECT_EQ(stats.substreams[ssrc].encode_frame_rate, 10);
|
||||
}
|
||||
|
||||
TEST_F(SendStatisticsProxyTest, EncodeFrameRateInSubStreamsVp8Simulcast) {
|
||||
const int kInterframeDelayMs = 100;
|
||||
rtc::ScopedFakeClock fake_global_clock;
|
||||
EncodedImage encoded_image;
|
||||
CodecSpecificInfo codec_info;
|
||||
codec_info.codecType = kVideoCodecVP8;
|
||||
|
||||
for (int i = 0; i < 10; ++i) {
|
||||
fake_clock_.AdvanceTimeMilliseconds(kInterframeDelayMs);
|
||||
fake_global_clock.SetTime(
|
||||
Timestamp::Millis(fake_clock_.TimeInMilliseconds()));
|
||||
encoded_image.SetTimestamp(encoded_image.Timestamp() +
|
||||
90 * kInterframeDelayMs);
|
||||
encoded_image.SetSpatialIndex(0);
|
||||
statistics_proxy_->OnSendEncodedImage(encoded_image, &codec_info);
|
||||
encoded_image.SetSpatialIndex(1);
|
||||
statistics_proxy_->OnSendEncodedImage(encoded_image, &codec_info);
|
||||
}
|
||||
|
||||
VideoSendStream::Stats stats = statistics_proxy_->GetStats();
|
||||
EXPECT_EQ(2u, stats.substreams.size());
|
||||
EXPECT_EQ(stats.substreams[config_.rtp.ssrcs[0]].encode_frame_rate, 10);
|
||||
EXPECT_EQ(stats.substreams[config_.rtp.ssrcs[1]].encode_frame_rate, 10);
|
||||
}
|
||||
|
||||
TEST_F(SendStatisticsProxyTest, EncodeFrameRateInSubStreamsVp9Svc) {
|
||||
const int kInterframeDelayMs = 100;
|
||||
rtc::ScopedFakeClock fake_global_clock;
|
||||
EncodedImage encoded_image;
|
||||
CodecSpecificInfo codec_info;
|
||||
codec_info.codecType = kVideoCodecVP9;
|
||||
|
||||
for (int i = 0; i < 10; ++i) {
|
||||
fake_clock_.AdvanceTimeMilliseconds(kInterframeDelayMs);
|
||||
fake_global_clock.SetTime(
|
||||
Timestamp::Millis(fake_clock_.TimeInMilliseconds()));
|
||||
encoded_image.SetTimestamp(encoded_image.Timestamp() +
|
||||
90 * kInterframeDelayMs);
|
||||
encoded_image.SetSpatialIndex(0);
|
||||
codec_info.end_of_picture = false;
|
||||
statistics_proxy_->OnSendEncodedImage(encoded_image, &codec_info);
|
||||
encoded_image.SetSpatialIndex(1);
|
||||
codec_info.end_of_picture = true;
|
||||
statistics_proxy_->OnSendEncodedImage(encoded_image, &codec_info);
|
||||
}
|
||||
|
||||
VideoSendStream::Stats stats = statistics_proxy_->GetStats();
|
||||
EXPECT_EQ(1u, stats.substreams.size());
|
||||
EXPECT_EQ(stats.substreams[config_.rtp.ssrcs[0]].encode_frame_rate, 10);
|
||||
}
|
||||
|
||||
TEST_F(SendStatisticsProxyTest, GetCpuAdaptationStats) {
|
||||
VideoAdaptationCounters cpu_counts;
|
||||
VideoAdaptationCounters quality_counts;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user