diff --git a/call/call.cc b/call/call.cc index 6bffbd8bcb..daeead1c72 100644 --- a/call/call.cc +++ b/call/call.cc @@ -686,6 +686,8 @@ void Call::EnsureStarted() { } is_started_ = true; + call_stats_->EnsureStarted(); + // This call seems to kick off a number of things, so probably better left // off being kicked off on request rather than in the ctor. transport_send_ptr_->RegisterTargetTransferRateObserver(this); diff --git a/video/call_stats2.cc b/video/call_stats2.cc index fbbe2de4f9..2b7c61e0f8 100644 --- a/video/call_stats2.cc +++ b/video/call_stats2.cc @@ -77,11 +77,6 @@ CallStats::CallStats(Clock* clock, TaskQueueBase* task_queue) task_queue_(task_queue) { RTC_DCHECK(task_queue_); RTC_DCHECK_RUN_ON(task_queue_); - repeating_task_ = - RepeatingTaskHandle::DelayedStart(task_queue_, kUpdateInterval, [this]() { - UpdateAndReport(); - return kUpdateInterval; - }); } CallStats::~CallStats() { @@ -93,6 +88,15 @@ CallStats::~CallStats() { UpdateHistograms(); } +void CallStats::EnsureStarted() { + RTC_DCHECK_RUN_ON(task_queue_); + repeating_task_ = + RepeatingTaskHandle::DelayedStart(task_queue_, kUpdateInterval, [this]() { + UpdateAndReport(); + return kUpdateInterval; + }); +} + void CallStats::UpdateAndReport() { RTC_DCHECK_RUN_ON(task_queue_); diff --git a/video/call_stats2.h b/video/call_stats2.h index 5932fad9fb..35a7935581 100644 --- a/video/call_stats2.h +++ b/video/call_stats2.h @@ -35,6 +35,9 @@ class CallStats { CallStats(Clock* clock, TaskQueueBase* task_queue); ~CallStats(); + // Ensure that necessary repeating tasks are started. + void EnsureStarted(); + // Expose an RtcpRttStats implementation without inheriting from RtcpRttStats. // That allows us to separate the threading model of how RtcpRttStats is // used (mostly on a process thread) and how CallStats is used (mostly on diff --git a/video/call_stats2_unittest.cc b/video/call_stats2_unittest.cc index b3d43cb92a..33235faeaa 100644 --- a/video/call_stats2_unittest.cc +++ b/video/call_stats2_unittest.cc @@ -38,7 +38,10 @@ class MockStatsObserver : public CallStatsObserver { class CallStats2Test : public ::testing::Test { public: - CallStats2Test() { process_thread_->Start(); } + CallStats2Test() { + call_stats_.EnsureStarted(); + process_thread_->Start(); + } ~CallStats2Test() override { process_thread_->Stop(); }