From cc4743795be6259f5a517f6df62681489184ec92 Mon Sep 17 00:00:00 2001 From: Etienne Pierre-Doray Date: Wed, 10 Feb 2021 15:51:36 -0500 Subject: [PATCH] [Battery]: Delay start of CallStats. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit To avoid unnecessary repeating tasks, CallStats' timer is started only upon Call::EnsureStarted(). Bug: chromium:1152887 Change-Id: I1015315f42127bf510affc3d22c930b20eac8bba Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/206880 Commit-Queue: Tommi Reviewed-by: Tommi Reviewed-by: Henrik Boström Cr-Commit-Position: refs/heads/master@{#33232} --- call/call.cc | 2 ++ video/call_stats2.cc | 14 +++++++++----- video/call_stats2.h | 3 +++ video/call_stats2_unittest.cc | 5 ++++- 4 files changed, 18 insertions(+), 6 deletions(-) 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(); }