xref: /aosp_15_r20/external/webrtc/modules/video_coding/event_wrapper.h (revision d9f758449e529ab9291ac668be2861e7a55c2422)
1*d9f75844SAndroid Build Coastguard Worker /*
2*d9f75844SAndroid Build Coastguard Worker  *  Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
3*d9f75844SAndroid Build Coastguard Worker  *
4*d9f75844SAndroid Build Coastguard Worker  *  Use of this source code is governed by a BSD-style license
5*d9f75844SAndroid Build Coastguard Worker  *  that can be found in the LICENSE file in the root of the source
6*d9f75844SAndroid Build Coastguard Worker  *  tree. An additional intellectual property rights grant can be found
7*d9f75844SAndroid Build Coastguard Worker  *  in the file PATENTS.  All contributing project authors may
8*d9f75844SAndroid Build Coastguard Worker  *  be found in the AUTHORS file in the root of the source tree.
9*d9f75844SAndroid Build Coastguard Worker  */
10*d9f75844SAndroid Build Coastguard Worker 
11*d9f75844SAndroid Build Coastguard Worker #ifndef MODULES_VIDEO_CODING_EVENT_WRAPPER_H_
12*d9f75844SAndroid Build Coastguard Worker #define MODULES_VIDEO_CODING_EVENT_WRAPPER_H_
13*d9f75844SAndroid Build Coastguard Worker 
14*d9f75844SAndroid Build Coastguard Worker namespace webrtc {
15*d9f75844SAndroid Build Coastguard Worker enum EventTypeWrapper { kEventSignaled = 1, kEventTimeout = 2 };
16*d9f75844SAndroid Build Coastguard Worker 
17*d9f75844SAndroid Build Coastguard Worker class EventWrapper {
18*d9f75844SAndroid Build Coastguard Worker  public:
19*d9f75844SAndroid Build Coastguard Worker   // Factory method. Constructor disabled.
20*d9f75844SAndroid Build Coastguard Worker   static EventWrapper* Create();
21*d9f75844SAndroid Build Coastguard Worker 
~EventWrapper()22*d9f75844SAndroid Build Coastguard Worker   virtual ~EventWrapper() {}
23*d9f75844SAndroid Build Coastguard Worker 
24*d9f75844SAndroid Build Coastguard Worker   // Releases threads who are calling Wait() and has started waiting. Please
25*d9f75844SAndroid Build Coastguard Worker   // note that a thread calling Wait() will not start waiting immediately.
26*d9f75844SAndroid Build Coastguard Worker   // assumptions to the contrary is a very common source of issues in
27*d9f75844SAndroid Build Coastguard Worker   // multithreaded programming.
28*d9f75844SAndroid Build Coastguard Worker   // Set is sticky in the sense that it will release at least one thread
29*d9f75844SAndroid Build Coastguard Worker   // either immediately or some time in the future.
30*d9f75844SAndroid Build Coastguard Worker   virtual bool Set() = 0;
31*d9f75844SAndroid Build Coastguard Worker 
32*d9f75844SAndroid Build Coastguard Worker   // Puts the calling thread into a wait state. The thread may be released
33*d9f75844SAndroid Build Coastguard Worker   // by a Set() call depending on if other threads are waiting and if so on
34*d9f75844SAndroid Build Coastguard Worker   // timing. The thread that was released will reset the event before leaving
35*d9f75844SAndroid Build Coastguard Worker   // preventing more threads from being released. If multiple threads
36*d9f75844SAndroid Build Coastguard Worker   // are waiting for the same Set(), only one (random) thread is guaranteed to
37*d9f75844SAndroid Build Coastguard Worker   // be released. It is possible that multiple (random) threads are released
38*d9f75844SAndroid Build Coastguard Worker   // Depending on timing.
39*d9f75844SAndroid Build Coastguard Worker   //
40*d9f75844SAndroid Build Coastguard Worker   // `max_time_ms` is the maximum time to wait in milliseconds.
41*d9f75844SAndroid Build Coastguard Worker   // TODO(bugs.webrtc.org/14366): Migrate to TimeDelta.
42*d9f75844SAndroid Build Coastguard Worker   virtual EventTypeWrapper Wait(int max_time_ms) = 0;
43*d9f75844SAndroid Build Coastguard Worker };
44*d9f75844SAndroid Build Coastguard Worker 
45*d9f75844SAndroid Build Coastguard Worker }  // namespace webrtc
46*d9f75844SAndroid Build Coastguard Worker 
47*d9f75844SAndroid Build Coastguard Worker #endif  // MODULES_VIDEO_CODING_EVENT_WRAPPER_H_
48