diff --git a/api/metronome/BUILD.gn b/api/metronome/BUILD.gn index 269b847384..3d3d876df0 100644 --- a/api/metronome/BUILD.gn +++ b/api/metronome/BUILD.gn @@ -10,10 +10,7 @@ import("../../webrtc.gni") rtc_source_set("metronome") { visibility = [ "*" ] - sources = [ - "metronome.cc", - "metronome.h", - ] + sources = [ "metronome.h" ] deps = [ "../../rtc_base/system:rtc_export", "../task_queue", diff --git a/api/metronome/metronome.h b/api/metronome/metronome.h index 477afc2c92..a312b1c862 100644 --- a/api/metronome/metronome.h +++ b/api/metronome/metronome.h @@ -30,22 +30,8 @@ namespace webrtc { // Metronome implementations must be thread-compatible. class RTC_EXPORT Metronome { public: - // TODO(crbug.com/1381982): remove stale classes and methods once downstream - // dependencies adapts. - class RTC_EXPORT TickListener { - public: - virtual ~TickListener() = default; - virtual void OnTick() = 0; - virtual TaskQueueBase* OnTickTaskQueue() = 0; - }; - virtual ~Metronome() = default; - // TODO(crbug.com/1381982): remove stale classes and methods once downstream - // dependencies adapts. - virtual void AddListener(TickListener* listener); - virtual void RemoveListener(TickListener* listener); - // Requests a call to `callback` on the next tick. Scheduled callbacks are // executed on the same sequence as they were requested on. There are no // features for cancellation. When that's needed, use e.g. ScopedTaskSafety diff --git a/call/call.cc b/call/call.cc index 9f8c6e0907..fc9777c2f1 100644 --- a/call/call.cc +++ b/call/call.cc @@ -1043,7 +1043,7 @@ webrtc::VideoReceiveStreamInterface* Call::CreateVideoReceiveStream( task_queue_factory_, this, num_cpu_cores_, transport_send_->packet_router(), std::move(configuration), call_stats_.get(), clock_, std::make_unique(clock_, trials()), - &nack_periodic_processor_, /*decode_sync=*/nullptr, event_log_); + &nack_periodic_processor_, decode_sync_.get(), event_log_); // TODO(bugs.webrtc.org/11993): Set this up asynchronously on the network // thread. receive_stream->RegisterWithTransport(&video_receiver_controller_); diff --git a/pc/peer_connection_factory.cc b/pc/peer_connection_factory.cc index 5495535167..1e1c8185e0 100644 --- a/pc/peer_connection_factory.cc +++ b/pc/peer_connection_factory.cc @@ -110,8 +110,10 @@ PeerConnectionFactory::PeerConnectionFactory( PeerConnectionFactory::~PeerConnectionFactory() { RTC_DCHECK_RUN_ON(signaling_thread()); - // Ensures the metronome is destroyed on the worker thread. - worker_thread()->BlockingCall([metronome = std::move(metronome_)] {}); + worker_thread()->BlockingCall([this] { + RTC_DCHECK_RUN_ON(worker_thread()); + metronome_ = nullptr; + }); } void PeerConnectionFactory::SetOptions(const Options& options) { diff --git a/pc/test/integration_test_helpers.cc b/pc/test/integration_test_helpers.cc index 0ad6cbcfcf..a014d02d75 100644 --- a/pc/test/integration_test_helpers.cc +++ b/pc/test/integration_test_helpers.cc @@ -57,27 +57,36 @@ int FindFirstMediaStatsIndexByKind( } TaskQueueMetronome::TaskQueueMetronome(TimeDelta tick_period) - : tick_period_(tick_period) {} + : tick_period_(tick_period) { + sequence_checker_.Detach(); +} +TaskQueueMetronome::~TaskQueueMetronome() { + RTC_DCHECK_RUN_ON(&sequence_checker_); +} void TaskQueueMetronome::RequestCallOnNextTick( absl::AnyInvocable callback) { + RTC_DCHECK_RUN_ON(&sequence_checker_); callbacks_.push_back(std::move(callback)); // Only schedule a tick callback for the first `callback` addition. // Schedule on the current task queue to comply with RequestCallOnNextTick // requirements. if (callbacks_.size() == 1) { TaskQueueBase::Current()->PostDelayedTask( - [this] { - std::vector> callbacks; - callbacks_.swap(callbacks); - for (auto& callback : callbacks) - std::move(callback)(); - }, + SafeTask(safety_.flag(), + [this] { + RTC_DCHECK_RUN_ON(&sequence_checker_); + std::vector> callbacks; + callbacks_.swap(callbacks); + for (auto& callback : callbacks) + std::move(callback)(); + }), tick_period_); } } TimeDelta TaskQueueMetronome::TickPeriod() const { + RTC_DCHECK_RUN_ON(&sequence_checker_); return tick_period_; } diff --git a/pc/test/integration_test_helpers.h b/pc/test/integration_test_helpers.h index 21ddacb7e3..64a06ebb7d 100644 --- a/pc/test/integration_test_helpers.h +++ b/pc/test/integration_test_helpers.h @@ -181,6 +181,7 @@ int FindFirstMediaStatsIndexByKind( class TaskQueueMetronome : public webrtc::Metronome { public: explicit TaskQueueMetronome(TimeDelta tick_period); + ~TaskQueueMetronome() override; // webrtc::Metronome implementation. void RequestCallOnNextTick(absl::AnyInvocable callback) override; @@ -188,7 +189,9 @@ class TaskQueueMetronome : public webrtc::Metronome { private: const TimeDelta tick_period_; + SequenceChecker sequence_checker_; std::vector> callbacks_; + ScopedTaskSafetyDetached safety_; }; class SignalingMessageReceiver {