Bug 1766646 - Vendor libwebrtc from 9d04a78f73

Upstream commit: https://webrtc.googlesource.com/src/+/9d04a78f731b88887c3816d7dc00bb11356fc587
    ZeroHertz: expose time to first frame statistic.

    Bug: chromium:1324120
    Change-Id: Ie609da309427ca5d2ff8585a8dc730586553c725
    Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/262247
    Auto-Submit: Markus Handell <handellm@webrtc.org>
    Commit-Queue: Markus Handell <handellm@webrtc.org>
    Reviewed-by: Ilya Nikolaevskiy <ilnik@webrtc.org>
    Commit-Queue: Ilya Nikolaevskiy <ilnik@webrtc.org>
    Cr-Commit-Position: refs/heads/main@{#36867}
This commit is contained in:
Michael Froman 2022-07-15 01:15:31 -05:00 коммит произвёл Connor Sheehan
Родитель 4826b16c24
Коммит 4d4b00f5a1
5 изменённых файлов: 38 добавлений и 0 удалений

3
third_party/libwebrtc/README.moz-ff-commit поставляемый
Просмотреть файл

@ -14139,3 +14139,6 @@ b5671da00d
# MOZ_LIBWEBRTC_SRC=/home/mfroman/git-checkouts/trial-webrtc-builds/moz-libwebrtc-checkout/src MOZ_LIBWEBRTC_COMMIT=mjfdev bash dom/media/webrtc/third_party_build/fast-forward-libwebrtc.sh
# base of lastest vendoring
1cb0b90df4
# MOZ_LIBWEBRTC_SRC=/home/mfroman/git-checkouts/trial-webrtc-builds/moz-libwebrtc-checkout/src MOZ_LIBWEBRTC_COMMIT=mjfdev bash dom/media/webrtc/third_party_build/fast-forward-libwebrtc.sh
# base of lastest vendoring
9d04a78f73

2
third_party/libwebrtc/README.mozilla поставляемый
Просмотреть файл

@ -9438,3 +9438,5 @@ libwebrtc updated from /home/mfroman/git-checkouts/trial-webrtc-builds/moz-libwe
libwebrtc updated from /home/mfroman/git-checkouts/trial-webrtc-builds/moz-libwebrtc-checkout/src commit mjfdev on 2022-07-15T06:14:05.857610.
# python3 vendor-libwebrtc.py --from-local /home/mfroman/git-checkouts/trial-webrtc-builds/moz-libwebrtc-checkout/src --commit mjfdev libwebrtc
libwebrtc updated from /home/mfroman/git-checkouts/trial-webrtc-builds/moz-libwebrtc-checkout/src commit mjfdev on 2022-07-15T06:14:45.244933.
# python3 vendor-libwebrtc.py --from-local /home/mfroman/git-checkouts/trial-webrtc-builds/moz-libwebrtc-checkout/src --commit mjfdev libwebrtc
libwebrtc updated from /home/mfroman/git-checkouts/trial-webrtc-builds/moz-libwebrtc-checkout/src commit mjfdev on 2022-07-15T06:15:26.128562.

1
third_party/libwebrtc/video/BUILD.gn поставляемый
Просмотреть файл

@ -305,6 +305,7 @@ rtc_library("frame_cadence_adapter") {
"../api:sequence_checker",
"../api/task_queue",
"../api/units:time_delta",
"../api/units:timestamp",
"../api/video:video_frame",
"../rtc_base:checks",
"../rtc_base:logging",

Просмотреть файл

@ -21,6 +21,7 @@
#include "api/sequence_checker.h"
#include "api/task_queue/task_queue_base.h"
#include "api/units/time_delta.h"
#include "api/units/timestamp.h"
#include "api/video/video_frame.h"
#include "rtc_base/checks.h"
#include "rtc_base/logging.h"
@ -184,6 +185,7 @@ class ZeroHertzAdapterMode : public AdapterMode {
TaskQueueBase* const queue_;
Clock* const clock_;
FrameCadenceAdapterInterface::Callback* const callback_;
// The configured max_fps.
// TODO(crbug.com/1255737): support max_fps updates.
const double max_fps_;
@ -264,6 +266,10 @@ class FrameCadenceAdapterImpl : public FrameCadenceAdapterInterface {
// Cache for the current adapter mode.
AdapterMode* current_adapter_mode_ = nullptr;
// Timestamp for statistics reporting.
absl::optional<Timestamp> zero_hertz_adapter_created_timestamp_
RTC_GUARDED_BY(queue_);
// Set up during Initialize.
Callback* callback_ = nullptr;
@ -619,6 +625,15 @@ void FrameCadenceAdapterImpl::OnFrame(const VideoFrame& frame) {
frames_scheduled_for_processing_.fetch_add(1, std::memory_order_relaxed);
queue_->PostTask(ToQueuedTask(safety_.flag(), [this, post_time, frame] {
RTC_DCHECK_RUN_ON(queue_);
if (zero_hertz_adapter_created_timestamp_.has_value()) {
TimeDelta time_until_first_frame =
clock_->CurrentTime() - *zero_hertz_adapter_created_timestamp_;
zero_hertz_adapter_created_timestamp_ = absl::nullopt;
RTC_HISTOGRAM_COUNTS_10000(
"WebRTC.Screenshare.ZeroHz.TimeUntilFirstFrameMs",
time_until_first_frame.ms());
}
const int frames_scheduled_for_processing =
frames_scheduled_for_processing_.fetch_sub(1,
std::memory_order_relaxed);
@ -673,6 +688,7 @@ void FrameCadenceAdapterImpl::MaybeReconfigureAdapters(
should_request_refresh_frame_ = false;
callback_->RequestRefreshFrame();
}
zero_hertz_adapter_created_timestamp_ = clock_->CurrentTime();
}
zero_hertz_adapter_->ReconfigureParameters(zero_hertz_params_.value());
current_adapter_mode_ = &zero_hertz_adapter_.value();

Просмотреть файл

@ -902,6 +902,22 @@ TEST_F(FrameCadenceAdapterMetricsTest, RecordsMinLtMaxConstraintIfSetOnFrame) {
ElementsAre(Pair(60 * 4.0 + 5.0 - 1, 1)));
}
TEST_F(FrameCadenceAdapterMetricsTest, RecordsTimeUntilFirstFrame) {
MockCallback callback;
test::ScopedKeyValueConfig no_field_trials;
auto adapter = CreateAdapter(no_field_trials, time_controller_.GetClock());
adapter->Initialize(&callback);
adapter->SetZeroHertzModeEnabled(
FrameCadenceAdapterInterface::ZeroHertzModeParams{});
adapter->OnConstraintsChanged(VideoTrackSourceConstraints{0, 5.0});
time_controller_.AdvanceTime(TimeDelta::Millis(666));
adapter->OnFrame(CreateFrame());
DepleteTaskQueues();
EXPECT_THAT(
metrics::Samples("WebRTC.Screenshare.ZeroHz.TimeUntilFirstFrameMs"),
ElementsAre(Pair(666, 1)));
}
TEST(FrameCadenceAdapterRealTimeTest, TimestampsDoNotDrift) {
// This regression test must be performed in realtime because of limitations
// in GlobalSimulatedTimeController.