diff --git a/video/adaptation/BUILD.gn b/video/adaptation/BUILD.gn index d206909853..75bd0d2ec4 100644 --- a/video/adaptation/BUILD.gn +++ b/video/adaptation/BUILD.gn @@ -38,6 +38,7 @@ rtc_library("video_adaptation") { "../../api:scoped_refptr", "../../api:sequence_checker", "../../api/adaptation:resource_adaptation_api", + "../../api/environment", "../../api/task_queue:task_queue", "../../api/units:data_rate", "../../api/units:time_delta", @@ -65,7 +66,6 @@ rtc_library("video_adaptation") { "../../rtc_base/synchronization:mutex", "../../rtc_base/system:no_unique_address", "../../rtc_base/task_utils:repeating_task", - "../../system_wrappers:field_trial", "../../system_wrappers:system_wrappers", "../../video:video_stream_encoder_interface", "../../video/config:encoder_config", @@ -92,6 +92,8 @@ if (rtc_include_tests) { ":video_adaptation", "../../api:field_trials_view", "../../api:scoped_refptr", + "../../api/environment", + "../../api/environment:environment_factory", "../../api/task_queue:task_queue", "../../api/units:time_delta", "../../api/units:timestamp", @@ -111,9 +113,7 @@ if (rtc_include_tests) { "../../rtc_base:rtc_numerics", "../../rtc_base:task_queue_for_test", "../../rtc_base:threading", - "../../test:field_trial", "../../test:rtc_expect_death", - "../../test:scoped_key_value_config", "../../test:test_support", "../../test/time_controller:time_controller", ] diff --git a/video/adaptation/overuse_frame_detector.cc b/video/adaptation/overuse_frame_detector.cc index 2edbbe2340..2397b55b7b 100644 --- a/video/adaptation/overuse_frame_detector.cc +++ b/video/adaptation/overuse_frame_detector.cc @@ -20,13 +20,14 @@ #include #include +#include "api/environment/environment.h" +#include "api/field_trials_view.h" #include "api/video/video_frame.h" #include "rtc_base/checks.h" #include "rtc_base/logging.h" #include "rtc_base/numerics/exp_filter.h" #include "rtc_base/time_utils.h" #include "rtc_base/trace_event.h" -#include "system_wrappers/include/field_trial.h" #if defined(WEBRTC_MAC) && !defined(WEBRTC_IOS) #include @@ -431,7 +432,8 @@ class OverdoseInjector : public OveruseFrameDetector::ProcessingUsage { } // namespace std::unique_ptr -OveruseFrameDetector::CreateProcessingUsage(const CpuOveruseOptions& options) { +OveruseFrameDetector::CreateProcessingUsage(const FieldTrialsView& field_trials, + const CpuOveruseOptions& options) { std::unique_ptr instance; if (options.filter_time_ms > 0) { instance = std::make_unique(options); @@ -439,7 +441,7 @@ OveruseFrameDetector::CreateProcessingUsage(const CpuOveruseOptions& options) { instance = std::make_unique(options); } std::string toggling_interval = - field_trial::FindFullName("WebRTC-ForceSimulatedOveruseIntervalMs"); + field_trials.Lookup("WebRTC-ForceSimulatedOveruseIntervalMs"); if (!toggling_interval.empty()) { int normal_period_ms = 0; int overuse_period_ms = 0; @@ -466,8 +468,10 @@ OveruseFrameDetector::CreateProcessingUsage(const CpuOveruseOptions& options) { } OveruseFrameDetector::OveruseFrameDetector( + const Environment& env, CpuOveruseMetricsObserver* metrics_observer) - : metrics_observer_(metrics_observer), + : env_(env), + metrics_observer_(metrics_observer), num_process_times_(0), // TODO(bugs.webrtc.org/9078): Use absl::optional last_capture_time_us_(-1), @@ -481,7 +485,7 @@ OveruseFrameDetector::OveruseFrameDetector( current_rampup_delay_ms_(kStandardRampUpDelayMs) { task_checker_.Detach(); ParseFieldTrial({&filter_time_constant_}, - field_trial::FindFullName("WebRTC-CpuLoadEstimator")); + env_.field_trials().Lookup("WebRTC-CpuLoadEstimator")); } OveruseFrameDetector::~OveruseFrameDetector() {} @@ -644,7 +648,7 @@ void OveruseFrameDetector::SetOptions(const CpuOveruseOptions& options) { } // Force reset with next frame. num_pixels_ = 0; - usage_ = CreateProcessingUsage(options); + usage_ = CreateProcessingUsage(env_.field_trials(), options); } bool OveruseFrameDetector::IsOverusing(int usage_percent) { diff --git a/video/adaptation/overuse_frame_detector.h b/video/adaptation/overuse_frame_detector.h index f39cee043e..e1729a0c2f 100644 --- a/video/adaptation/overuse_frame_detector.h +++ b/video/adaptation/overuse_frame_detector.h @@ -15,6 +15,7 @@ #include #include "absl/types/optional.h" +#include "api/environment/environment.h" #include "api/field_trials_view.h" #include "api/sequence_checker.h" #include "api/task_queue/task_queue_base.h" @@ -73,7 +74,8 @@ class OveruseFrameDetectorObserverInterface { // check for overuse. class OveruseFrameDetector { public: - explicit OveruseFrameDetector(CpuOveruseMetricsObserver* metrics_observer); + OveruseFrameDetector(const Environment& env, + CpuOveruseMetricsObserver* metrics_observer); virtual ~OveruseFrameDetector(); OveruseFrameDetector(const OveruseFrameDetector&) = delete; @@ -144,8 +146,10 @@ class OveruseFrameDetector { void ResetAll(int num_pixels); static std::unique_ptr CreateProcessingUsage( + const FieldTrialsView& field_trials, const CpuOveruseOptions& options); + const Environment env_; RTC_NO_UNIQUE_ADDRESS SequenceChecker task_checker_; // Owned by the task queue from where StartCheckForOveruse is called. RepeatingTaskHandle check_overuse_task_ RTC_GUARDED_BY(task_checker_); diff --git a/video/adaptation/overuse_frame_detector_unittest.cc b/video/adaptation/overuse_frame_detector_unittest.cc index 7ae9735b3f..3c6ce57a91 100644 --- a/video/adaptation/overuse_frame_detector_unittest.cc +++ b/video/adaptation/overuse_frame_detector_unittest.cc @@ -12,6 +12,8 @@ #include +#include "api/environment/environment.h" +#include "api/environment/environment_factory.h" #include "api/video/encoded_image.h" #include "api/video/i420_buffer.h" #include "api/video/video_adaptation_reason.h" @@ -22,7 +24,6 @@ #include "rtc_base/task_queue_for_test.h" #include "test/gmock.h" #include "test/gtest.h" -#include "test/scoped_key_value_config.h" namespace webrtc { @@ -61,8 +62,9 @@ class CpuOveruseObserverImpl : public OveruseFrameDetectorObserverInterface { class OveruseFrameDetectorUnderTest : public OveruseFrameDetector { public: explicit OveruseFrameDetectorUnderTest( + const Environment& env, CpuOveruseMetricsObserver* metrics_observer) - : OveruseFrameDetector(metrics_observer) {} + : OveruseFrameDetector(env, metrics_observer) {} ~OveruseFrameDetectorUnderTest() {} using OveruseFrameDetector::CheckForOveruse; @@ -75,7 +77,8 @@ class OveruseFrameDetectorTest : public ::testing::Test, void SetUp() override { observer_ = &mock_observer_; options_.min_process_count = 0; - overuse_detector_ = std::make_unique(this); + overuse_detector_ = std::make_unique( + CreateEnvironment(), this); // Unfortunately, we can't call SetOptions here, since that would break // single-threading requirements in the RunOnTqNormalUsage test. } diff --git a/video/video_send_stream_impl.cc b/video/video_send_stream_impl.cc index 6f146e3a9d..52e437ac49 100644 --- a/video/video_send_stream_impl.cc +++ b/video/video_send_stream_impl.cc @@ -355,7 +355,7 @@ std::unique_ptr CreateVideoStreamEncoder( TaskQueueBase* encoder_queue_ptr = encoder_queue.get(); return std::make_unique( env, num_cpu_cores, stats_proxy, encoder_settings, - std::make_unique(stats_proxy), + std::make_unique(env, stats_proxy), FrameCadenceAdapterInterface::Create( &env.clock(), encoder_queue_ptr, metronome, /*worker_queue=*/TaskQueueBase::Current(), env.field_trials()), diff --git a/video/video_stream_encoder_unittest.cc b/video/video_stream_encoder_unittest.cc index 6769a2806e..31c6ca5494 100644 --- a/video/video_stream_encoder_unittest.cc +++ b/video/video_stream_encoder_unittest.cc @@ -227,8 +227,9 @@ class FakeNV12NativeBuffer : public webrtc::VideoFrameBuffer { class CpuOveruseDetectorProxy : public OveruseFrameDetector { public: - explicit CpuOveruseDetectorProxy(CpuOveruseMetricsObserver* metrics_observer) - : OveruseFrameDetector(metrics_observer), + CpuOveruseDetectorProxy(const Environment& env, + CpuOveruseMetricsObserver* metrics_observer) + : OveruseFrameDetector(env, metrics_observer), last_target_framerate_fps_(-1), framerate_updated_event_(true /* manual_reset */, false /* initially_signaled */) {} @@ -389,6 +390,7 @@ auto FpsEqResolutionGt(const rtc::VideoSinkWants& other_wants) { class VideoStreamEncoderUnderTest : public VideoStreamEncoder { public: VideoStreamEncoderUnderTest( + const Environment& env, TimeController* time_controller, std::unique_ptr cadence_adapter, std::unique_ptr @@ -397,16 +399,15 @@ class VideoStreamEncoderUnderTest : public VideoStreamEncoder { const VideoStreamEncoderSettings& settings, VideoStreamEncoder::BitrateAllocationCallbackType allocation_callback_type, - const FieldTrialsView& field_trials, int num_cores) : VideoStreamEncoder( - CreateEnvironment(&field_trials, time_controller->GetClock()), + env, num_cores, stats_proxy, settings, std::unique_ptr( overuse_detector_proxy_ = - new CpuOveruseDetectorProxy(stats_proxy)), + new CpuOveruseDetectorProxy(env, stats_proxy)), std::move(cadence_adapter), std::move(encoder_queue), allocation_callback_type), @@ -710,13 +711,14 @@ class SimpleVideoStreamEncoderFactory { std::unique_ptr zero_hertz_adapter, std::unique_ptr encoder_queue, const FieldTrialsView* field_trials = nullptr) { + Environment env = CreateEnvironment(&field_trials_, field_trials, + time_controller_.GetClock()); auto result = std::make_unique( - CreateEnvironment(&field_trials_, field_trials, - time_controller_.GetClock()), + env, /*number_of_cores=*/1, /*stats_proxy=*/stats_proxy_.get(), encoder_settings_, - std::make_unique( - /*stats_proxy=*/nullptr), + std::make_unique(env, + /*stats_proxy=*/nullptr), std::move(zero_hertz_adapter), std::move(encoder_queue), VideoStreamEncoder::BitrateAllocationCallbackType:: kVideoBitrateAllocation); @@ -886,7 +888,7 @@ class VideoStreamEncoderTest : public ::testing::Test { if (video_stream_encoder_) video_stream_encoder_->Stop(); - auto encoder_queue = GetTaskQueueFactory()->CreateTaskQueue( + auto encoder_queue = env_.task_queue_factory().CreateTaskQueue( "EncoderQueue", TaskQueueFactory::Priority::NORMAL); TaskQueueBase* encoder_queue_ptr = encoder_queue.get(); std::unique_ptr cadence_adapter = @@ -894,9 +896,10 @@ class VideoStreamEncoderTest : public ::testing::Test { time_controller_.GetClock(), encoder_queue_ptr, /*metronome=*/nullptr, /*worker_queue=*/nullptr, field_trials_); video_stream_encoder_ = std::make_unique( - &time_controller_, std::move(cadence_adapter), std::move(encoder_queue), - stats_proxy_.get(), video_send_config_.encoder_settings, - allocation_callback_type, field_trials_, num_cores); + env_, &time_controller_, std::move(cadence_adapter), + std::move(encoder_queue), stats_proxy_.get(), + video_send_config_.encoder_settings, allocation_callback_type, + num_cores); video_stream_encoder_->SetSink(&sink_, /*rotation_applied=*/false); video_stream_encoder_->SetSource( &video_source_, webrtc::DegradationPreference::MAINTAIN_FRAMERATE); @@ -1627,12 +1630,12 @@ class VideoStreamEncoderTest : public ::testing::Test { int64_t CurrentTimeMs() { return clock()->CurrentTime().ms(); } protected: - virtual TaskQueueFactory* GetTaskQueueFactory() { - return time_controller_.GetTaskQueueFactory(); - } - test::ScopedKeyValueConfig field_trials_; GlobalSimulatedTimeController time_controller_{Timestamp::Micros(1234)}; + const Environment env_ = + CreateEnvironment(&field_trials_, + time_controller_.GetClock(), + time_controller_.GetTaskQueueFactory()); VideoSendStream::Config video_send_config_; VideoEncoderConfig video_encoder_config_; int codec_width_; @@ -9428,7 +9431,7 @@ TEST(VideoStreamEncoderSimpleTest, CreateDestroy) { // simply be deleted. VideoStreamEncoder encoder( env, 1, &stats_proxy, encoder_settings, - std::make_unique(&stats_proxy), + std::make_unique(env, &stats_proxy), std::move(adapter), std::move(encoder_queue), VideoStreamEncoder::BitrateAllocationCallbackType:: kVideoBitrateAllocation);