From 9159f49230ce923228e422665aa1049f780ed9b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Bostr=C3=B6m?= Date: Wed, 27 Apr 2022 12:46:57 +0000 Subject: [PATCH] [Merge-102] Make metro TQ use the same base::TaskTraits as non-metro TQ. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit I didn't think the task traits made much of a difference and forgot to have them align, but when seeing an increase of existing crashes in https://crbug.com/1319036, I'm wondering if the traits could affect which thread is chosen during block-invokes. Whether or not it makes a difference, having the traits match makes sense since there was no intent to change the behavior of the original TQ with regards to traits. (cherry picked from commit 4c01b57bb9b994933c77308a1fe07a0cb4683da4) Bug: 1319786, 1319036 Change-Id: Iaef1ad9860dc89cd2fe59f67448f7f11eaa15934 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3607671 Reviewed-by: Markus Handell Commit-Queue: Henrik Boström Auto-Submit: Henrik Boström Reviewed-by: Mirko Bonadei Commit-Queue: Mirko Bonadei Cr-Original-Commit-Position: refs/heads/main@{#996080} Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3610089 Cr-Commit-Position: refs/branch-heads/5005@{#193} Cr-Branched-From: 5b4d9450fee01f821b6400e947b3839727643a71-refs/heads/main@{#992738} --- .../webrtc_overrides/metronome_task_queue_factory.cc | 10 ++++++---- third_party/webrtc_overrides/task_queue_factory.cc | 4 ++-- third_party/webrtc_overrides/task_queue_factory.h | 7 +++++++ 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/third_party/webrtc_overrides/metronome_task_queue_factory.cc b/third_party/webrtc_overrides/metronome_task_queue_factory.cc index cfc0ebd08165e8..b0322bcafe7f16 100644 --- a/third_party/webrtc_overrides/metronome_task_queue_factory.cc +++ b/third_party/webrtc_overrides/metronome_task_queue_factory.cc @@ -17,6 +17,7 @@ #include "third_party/webrtc/api/task_queue/task_queue_factory.h" #include "third_party/webrtc_overrides/coalesced_tasks.h" #include "third_party/webrtc_overrides/metronome_source.h" +#include "third_party/webrtc_overrides/task_queue_factory.h" namespace blink { @@ -25,7 +26,7 @@ const base::Feature kWebRtcMetronomeTaskQueue{ class WebRtcMetronomeTaskQueue : public webrtc::TaskQueueBase { public: - WebRtcMetronomeTaskQueue(); + explicit WebRtcMetronomeTaskQueue(base::TaskTraits traits); // webrtc::TaskQueueBase implementation. void Delete() override; @@ -56,8 +57,9 @@ class WebRtcMetronomeTaskQueue : public webrtc::TaskQueueBase { CoalescedTasks coalesced_tasks_; }; -WebRtcMetronomeTaskQueue::WebRtcMetronomeTaskQueue() - : task_runner_(base::ThreadPool::CreateSequencedTaskRunner({})), +WebRtcMetronomeTaskQueue::WebRtcMetronomeTaskQueue(base::TaskTraits traits) + : task_runner_( + base::ThreadPool::CreateSequencedTaskRunner(std::move(traits))), is_active_(new base::RefCountedData(true)) {} void Deactivate(scoped_refptr> is_active, @@ -157,7 +159,7 @@ class WebrtcMetronomeTaskQueueFactory final : public webrtc::TaskQueueFactory { std::unique_ptr CreateTaskQueue(absl::string_view name, Priority priority) const override { return std::unique_ptr( - new WebRtcMetronomeTaskQueue()); + new WebRtcMetronomeTaskQueue(TaskQueuePriority2Traits(priority))); } }; diff --git a/third_party/webrtc_overrides/task_queue_factory.cc b/third_party/webrtc_overrides/task_queue_factory.cc index 79a14fd6f8ec45..34907682f77aea 100644 --- a/third_party/webrtc_overrides/task_queue_factory.cc +++ b/third_party/webrtc_overrides/task_queue_factory.cc @@ -92,8 +92,6 @@ void WebrtcTaskQueue::PostDelayedTask(std::unique_ptr task, base::subtle::DelayPolicy::kPrecise); } -namespace { - base::TaskTraits TaskQueuePriority2Traits( webrtc::TaskQueueFactory::Priority priority) { // The content/renderer/media/webrtc/rtc_video_encoder.* code @@ -119,6 +117,8 @@ base::TaskTraits TaskQueuePriority2Traits( } } +namespace { + class WebrtcTaskQueueFactory final : public webrtc::TaskQueueFactory { public: WebrtcTaskQueueFactory() = default; diff --git a/third_party/webrtc_overrides/task_queue_factory.h b/third_party/webrtc_overrides/task_queue_factory.h index 957cf75e4e92d2..27dcd07d416a23 100644 --- a/third_party/webrtc_overrides/task_queue_factory.h +++ b/third_party/webrtc_overrides/task_queue_factory.h @@ -12,6 +12,13 @@ #include "third_party/webrtc/api/task_queue/task_queue_factory.h" #include "third_party/webrtc/rtc_base/system/rtc_export.h" +namespace blink { + +RTC_EXPORT base::TaskTraits TaskQueuePriority2Traits( + webrtc::TaskQueueFactory::Priority priority); + +} // namespace blink + // Creates factory for webrtc::TaskQueueBase backed by base::SequencedTaskRunner // Tested by // /third_party/blink/renderer/platform/peerconnection/task_queue_factory_test.cc