1 /* 2 * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. 3 * 4 * Use of this source code is governed by a BSD-style license 5 * that can be found in the LICENSE file in the root of the source 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11 #ifndef MODULES_UTILITY_INCLUDE_PROCESS_THREAD_H_ 12 #define MODULES_UTILITY_INCLUDE_PROCESS_THREAD_H_ 13 14 #include <memory> 15 16 #include "api/task_queue/queued_task.h" 17 #include "api/task_queue/task_queue_base.h" 18 19 namespace rtc { 20 class Location; 21 } 22 23 namespace webrtc { 24 class Module; 25 26 // TODO(tommi): ProcessThread probably doesn't need to be a virtual 27 // interface. There exists one override besides ProcessThreadImpl, 28 // MockProcessThread, but when looking at how it is used, it seems 29 // a nullptr might suffice (or simply an actual ProcessThread instance). 30 class ProcessThread : public TaskQueueBase { 31 public: 32 ~ProcessThread() override; 33 34 static std::unique_ptr<ProcessThread> Create(const char* thread_name); 35 36 // Starts the worker thread. Must be called from the construction thread. 37 virtual void Start() = 0; 38 39 // Stops the worker thread. Must be called from the construction thread. 40 virtual void Stop() = 0; 41 42 // Wakes the thread up to give a module a chance to do processing right 43 // away. This causes the worker thread to wake up and requery the specified 44 // module for when it should be called back. (Typically the module should 45 // return 0 from TimeUntilNextProcess on the worker thread at that point). 46 // Can be called on any thread. 47 virtual void WakeUp(Module* module) = 0; 48 49 // Adds a module that will start to receive callbacks on the worker thread. 50 // Can be called from any thread. 51 virtual void RegisterModule(Module* module, const rtc::Location& from) = 0; 52 53 // Removes a previously registered module. 54 // Can be called from any thread. 55 virtual void DeRegisterModule(Module* module) = 0; 56 }; 57 58 } // namespace webrtc 59 60 #endif // MODULES_UTILITY_INCLUDE_PROCESS_THREAD_H_ 61