From c1c6bef99aa49a0bb3f8e99378438e72ffa02fdb Mon Sep 17 00:00:00 2001 From: Markus Handell Date: Fri, 23 Jul 2021 11:11:32 +0200 Subject: [PATCH] RepeatingTask: equip with DTrace probes. This change permits dtrace wakeup profiling of Chromium production builds. Bug: webrtc:13013 Change-Id: Iff936f7ff03ba7ef349f2bc7d3826a7c8b1bb1b8 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/226461 Commit-Queue: Markus Handell Reviewed-by: Mirko Bonadei Cr-Commit-Position: refs/heads/master@{#34541} --- rtc_base/task_utils/repeating_task.cc | 7 +++++++ rtc_base/task_utils/repeating_task.h | 14 +++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/rtc_base/task_utils/repeating_task.cc b/rtc_base/task_utils/repeating_task.cc index 9636680cb4..1f3eb1d064 100644 --- a/rtc_base/task_utils/repeating_task.cc +++ b/rtc_base/task_utils/repeating_task.cc @@ -70,4 +70,11 @@ bool RepeatingTaskHandle::Running() const { return repeating_task_ != nullptr; } +namespace webrtc_repeating_task_impl { +// These methods are empty, but can be externally equipped with actions using +// dtrace. +void RepeatingTaskHandleDTraceProbeStart() {} +void RepeatingTaskHandleDTraceProbeDelayedStart() {} +void RepeatingTaskImplDTraceProbeRun() {} +} // namespace webrtc_repeating_task_impl } // namespace webrtc diff --git a/rtc_base/task_utils/repeating_task.h b/rtc_base/task_utils/repeating_task.h index d5066fdb5c..91a40e0714 100644 --- a/rtc_base/task_utils/repeating_task.h +++ b/rtc_base/task_utils/repeating_task.h @@ -23,7 +23,14 @@ #include "system_wrappers/include/clock.h" namespace webrtc { + namespace webrtc_repeating_task_impl { + +// Methods simplifying external tracing of RepeatingTaskHandle operations. +void RepeatingTaskHandleDTraceProbeStart(); +void RepeatingTaskHandleDTraceProbeDelayedStart(); +void RepeatingTaskImplDTraceProbeRun(); + class RepeatingTaskBase : public QueuedTask { public: RepeatingTaskBase(TaskQueueBase* task_queue, @@ -67,7 +74,10 @@ class RepeatingTaskImpl final : public RepeatingTaskBase { } private: - TimeDelta RunClosure() override { return closure_(); } + TimeDelta RunClosure() override { + RepeatingTaskImplDTraceProbeRun(); + return closure_(); + } typename std::remove_const< typename std::remove_reference::type>::type closure_; @@ -98,6 +108,7 @@ class RepeatingTaskHandle { Closure&& closure, Clock* clock = Clock::GetRealTimeClock()) { auto alive_flag = PendingTaskSafetyFlag::CreateDetached(); + webrtc_repeating_task_impl::RepeatingTaskHandleDTraceProbeStart(); task_queue->PostTask( std::make_unique< webrtc_repeating_task_impl::RepeatingTaskImpl>( @@ -115,6 +126,7 @@ class RepeatingTaskHandle { Closure&& closure, Clock* clock = Clock::GetRealTimeClock()) { auto alive_flag = PendingTaskSafetyFlag::CreateDetached(); + webrtc_repeating_task_impl::RepeatingTaskHandleDTraceProbeDelayedStart(); task_queue->PostDelayedTask( std::make_unique< webrtc_repeating_task_impl::RepeatingTaskImpl>(