From 8ea977d2fd665d6e19c5d5dc53d10a3e1eafe5cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Doray?= Date: Fri, 22 Mar 2019 13:01:54 -0400 Subject: [PATCH] Add ScopedAllowBaseSyncPrimitivesForTesting to Webrtc. Chromium requires that all code that waits on a sync primitive be annotated with ScopedAllowBaseSyncPrimitives(ForTesting). Webrtc already imports ScopedAllowBaseSyncPrimitives. ScopedAllowBaseSyncPrimitivesForTesting is equivalent but can only be used in tests and doesn't required adding a friend declaration to thread_restrictions.h. Previously, the code that is annotated with ScopedAllowBaseSyncPrimitivesForTesting in this CL didn't fail because it ran on a TaskRunner annotated with the deprecated WithBaseSyncPrimitives() trait (cf. https://cs.chromium.org/chromium/src/content/renderer/media/webrtc/task_queue_factory_unittest.cc?l=23&rcl=362f3723ac358d932ea2e3af65512a1243697a31). Change-Id: Id7cfa2ea108870de86dc887458ae783c807791cc Bug: chromium:889029 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/128823 Commit-Queue: Francois Pierre Doray Reviewed-by: Tommi Cr-Commit-Position: refs/heads/master@{#27339} --- api/task_queue/task_queue_test.cc | 6 ++++-- rtc_base/event.h | 12 +++++++++--- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/api/task_queue/task_queue_test.cc b/api/task_queue/task_queue_test.cc index e78dbd232a..8d02ed6c9e 100644 --- a/api/task_queue/task_queue_test.cc +++ b/api/task_queue/task_queue_test.cc @@ -204,8 +204,10 @@ TEST_P(TaskQueueTest, PostALot) { // So here we post a total of 0xffff+1 messages, which triggers a failure // case inside of the libevent queue implementation. - queue->PostTask( - ToQueuedTask([&event] { event.Wait(rtc::Event::kForever); })); + queue->PostTask(ToQueuedTask([&event] { + rtc::ScopedAllowBaseSyncPrimitivesForTesting allow_base_sync_primitives; + event.Wait(rtc::Event::kForever); + })); for (int i = 0; i < kTaskCount; ++i) queue->PostTask( ToQueuedTask([&tasks_executed] { ++tasks_executed; }, diff --git a/rtc_base/event.h b/rtc_base/event.h index 2e11002066..3f5f8b317c 100644 --- a/rtc_base/event.h +++ b/rtc_base/event.h @@ -49,20 +49,26 @@ class Event { #endif }; -// This class is provided for compatibility with Chromium. +// These classes are provided for compatibility with Chromium. // The rtc::Event implementation is overriden inside of Chromium for the // purposes of detecting when threads are blocked that shouldn't be as well as // to use the more accurate event implementation that's there than is provided // by default on some platforms (e.g. Windows). // When building with standalone WebRTC, this class is a noop. -// For further information, please see the ScopedAllowBaseSyncPrimitives class -// in Chromium. +// For further information, please see the +// ScopedAllowBaseSyncPrimitives(ForTesting) classes in Chromium. class ScopedAllowBaseSyncPrimitives { public: ScopedAllowBaseSyncPrimitives() {} ~ScopedAllowBaseSyncPrimitives() {} }; +class ScopedAllowBaseSyncPrimitivesForTesting { + public: + ScopedAllowBaseSyncPrimitivesForTesting() {} + ~ScopedAllowBaseSyncPrimitivesForTesting() {} +}; + } // namespace rtc #endif // RTC_BASE_EVENT_H_