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 <fdoray@chromium.org>
Reviewed-by: Tommi <tommi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#27339}
This commit is contained in:
François Doray 2019-03-22 13:01:54 -04:00 committed by Commit Bot
parent 20393ee9b7
commit 8ea977d2fd
2 changed files with 13 additions and 5 deletions

View File

@ -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; },

View File

@ -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_