From 90a1cb463092c5189b1a69837731a3395d79f61c Mon Sep 17 00:00:00 2001 From: "tommi@webrtc.org" Date: Sun, 22 Mar 2015 14:33:54 +0000 Subject: [PATCH] Revert 8810 "- Add a SetPriority method to ThreadWrapper" Seeing if this is causing roll issues. > - Add a SetPriority method to ThreadWrapper > - Remove 'priority' from CreateThread and related member variables from implementations > - Make supplying a name for threads, non-optional > > BUG= > R=magjed@webrtc.org > > Review URL: https://webrtc-codereview.appspot.com/44729004 TBR=tommi@webrtc.org Review URL: https://webrtc-codereview.appspot.com/48609004 Cr-Commit-Position: refs/heads/master@{#8818} git-svn-id: http://webrtc.googlecode.com/svn/trunk@8818 4adac7df-926f-26a2-2b94-8c16560cd09d --- .../main/acm2/audio_coding_module_unittest.cc | 20 ++++--- .../audio_coding_module_unittest_oldapi.cc | 20 ++++--- .../modules/audio_coding/main/test/APITest.cc | 20 ++++--- .../android/low_latency_event_unittest.cc | 7 ++- .../audio_device/android/opensles_input.cc | 3 +- .../audio_device/android/opensles_output.cc | 3 +- .../audio_device/dummy/file_audio_device.cc | 17 ++++-- .../audio_device/ios/audio_device_ios.mm | 6 +- .../linux/audio_device_alsa_linux.cc | 12 ++-- .../linux/audio_device_pulse_linux.cc | 7 +-- .../audio_device/mac/audio_device_mac.cc | 8 +-- .../audio_device/win/audio_device_wave_win.cc | 6 +- .../test/BWEStandAlone/TestLoadGenerator.cc | 3 +- .../test/BWEStandAlone/TestSenderReceiver.cc | 3 +- .../utility/source/process_thread_impl.cc | 2 +- .../linux/video_capture_linux.cc | 3 +- .../android/video_render_android_impl.cc | 2 +- .../video_render/incoming_video_stream.cc | 4 +- .../ios/video_render_ios_gles20.mm | 3 +- .../video_render/mac/video_render_agl.cc | 12 +--- .../video_render/mac/video_render_nsopengl.mm | 6 +- .../windows/video_render_direct3d9.cc | 5 +- .../interface/thread_wrapper.h | 21 ++----- .../source/condition_variable_unittest.cc | 2 +- .../source/critical_section_unittest.cc | 4 +- webrtc/system_wrappers/source/data_log.cc | 6 +- webrtc/system_wrappers/source/event_posix.cc | 4 +- webrtc/system_wrappers/source/thread.cc | 5 +- webrtc/system_wrappers/source/thread_posix.cc | 56 ++++++++----------- webrtc/system_wrappers/source/thread_posix.h | 6 +- .../system_wrappers/source/thread_unittest.cc | 4 +- webrtc/system_wrappers/source/thread_win.cc | 30 ++++++++-- webrtc/system_wrappers/source/thread_win.h | 7 ++- .../udp_socket2_manager_win.cc | 9 +-- .../udp_socket_manager_posix.cc | 6 +- webrtc/test/direct_transport.cc | 6 +- webrtc/test/fake_audio_device.cc | 5 +- webrtc/test/frame_generator_capturer.cc | 5 +- webrtc/video/full_stack.cc | 2 +- .../test/auto_test/source/vie_autotest_win.cc | 3 +- .../libvietest/helpers/vie_fake_camera.cc | 3 +- .../helpers/vie_to_file_renderer.cc | 3 +- .../testbed/tb_external_transport.cc | 4 +- webrtc/video_engine/vie_capturer.cc | 7 ++- webrtc/video_engine/vie_channel.cc | 4 +- .../android/android_test/jni/android_test.cc | 3 +- .../fakes/fake_external_transport.cc | 4 +- .../fixtures/after_initialization_fixture.h | 3 +- .../test/auto_test/voe_stress_test.cc | 3 +- 49 files changed, 192 insertions(+), 195 deletions(-) diff --git a/webrtc/modules/audio_coding/main/acm2/audio_coding_module_unittest.cc b/webrtc/modules/audio_coding/main/acm2/audio_coding_module_unittest.cc index a600129db3..17be285d7b 100644 --- a/webrtc/modules/audio_coding/main/acm2/audio_coding_module_unittest.cc +++ b/webrtc/modules/audio_coding/main/acm2/audio_coding_module_unittest.cc @@ -285,11 +285,18 @@ class AudioCodingModuleMtTest : public AudioCodingModuleTest { AudioCodingModuleMtTest() : AudioCodingModuleTest(), - send_thread_(ThreadWrapper::CreateThread(CbSendThread, this, "send")), - insert_packet_thread_(ThreadWrapper::CreateThread( - CbInsertPacketThread, this, "insert_packet")), - pull_audio_thread_(ThreadWrapper::CreateThread( - CbPullAudioThread, this, "pull_audio")), + send_thread_(ThreadWrapper::CreateThread(CbSendThread, + this, + kRealtimePriority, + "send")), + insert_packet_thread_(ThreadWrapper::CreateThread(CbInsertPacketThread, + this, + kRealtimePriority, + "insert_packet")), + pull_audio_thread_(ThreadWrapper::CreateThread(CbPullAudioThread, + this, + kRealtimePriority, + "pull_audio")), test_complete_(EventWrapper::Create()), send_count_(0), insert_packet_count_(0), @@ -308,11 +315,8 @@ class AudioCodingModuleMtTest : public AudioCodingModuleTest { void StartThreads() { ASSERT_TRUE(send_thread_->Start()); - send_thread_->SetPriority(kRealtimePriority); ASSERT_TRUE(insert_packet_thread_->Start()); - insert_packet_thread_->SetPriority(kRealtimePriority); ASSERT_TRUE(pull_audio_thread_->Start()); - pull_audio_thread_->SetPriority(kRealtimePriority); } void TearDown() override { diff --git a/webrtc/modules/audio_coding/main/acm2/audio_coding_module_unittest_oldapi.cc b/webrtc/modules/audio_coding/main/acm2/audio_coding_module_unittest_oldapi.cc index c083f28570..829db2d5e7 100644 --- a/webrtc/modules/audio_coding/main/acm2/audio_coding_module_unittest_oldapi.cc +++ b/webrtc/modules/audio_coding/main/acm2/audio_coding_module_unittest_oldapi.cc @@ -462,11 +462,18 @@ class AudioCodingModuleMtTestOldApi : public AudioCodingModuleTestOldApi { AudioCodingModuleMtTestOldApi() : AudioCodingModuleTestOldApi(), - send_thread_(ThreadWrapper::CreateThread(CbSendThread, this, "send")), - insert_packet_thread_(ThreadWrapper::CreateThread( - CbInsertPacketThread, this, "insert_packet")), - pull_audio_thread_(ThreadWrapper::CreateThread( - CbPullAudioThread, this, "pull_audio")), + send_thread_(ThreadWrapper::CreateThread(CbSendThread, + this, + kRealtimePriority, + "send")), + insert_packet_thread_(ThreadWrapper::CreateThread(CbInsertPacketThread, + this, + kRealtimePriority, + "insert_packet")), + pull_audio_thread_(ThreadWrapper::CreateThread(CbPullAudioThread, + this, + kRealtimePriority, + "pull_audio")), test_complete_(EventWrapper::Create()), send_count_(0), insert_packet_count_(0), @@ -485,11 +492,8 @@ class AudioCodingModuleMtTestOldApi : public AudioCodingModuleTestOldApi { void StartThreads() { ASSERT_TRUE(send_thread_->Start()); - send_thread_->SetPriority(kRealtimePriority); ASSERT_TRUE(insert_packet_thread_->Start()); - insert_packet_thread_->SetPriority(kRealtimePriority); ASSERT_TRUE(pull_audio_thread_->Start()); - pull_audio_thread_->SetPriority(kRealtimePriority); } void TearDown() { diff --git a/webrtc/modules/audio_coding/main/test/APITest.cc b/webrtc/modules/audio_coding/main/test/APITest.cc index 8cfe0e3486..83b24a87d5 100644 --- a/webrtc/modules/audio_coding/main/test/APITest.cc +++ b/webrtc/modules/audio_coding/main/test/APITest.cc @@ -532,36 +532,40 @@ void APITest::Perform() { // A // PUSH rtc::scoped_ptr myPushAudioThreadA = - ThreadWrapper::CreateThread(PushAudioThreadA, this, "PushAudioThreadA"); + ThreadWrapper::CreateThread(PushAudioThreadA, this, kNormalPriority, + "PushAudioThreadA"); CHECK_THREAD_NULLITY(myPushAudioThreadA, "Unable to start A::PUSH thread"); // PULL rtc::scoped_ptr myPullAudioThreadA = - ThreadWrapper::CreateThread(PullAudioThreadA, this, "PullAudioThreadA"); + ThreadWrapper::CreateThread(PullAudioThreadA, this, kNormalPriority, + "PullAudioThreadA"); CHECK_THREAD_NULLITY(myPullAudioThreadA, "Unable to start A::PULL thread"); // Process rtc::scoped_ptr myProcessThreadA = ThreadWrapper::CreateThread( - ProcessThreadA, this, "ProcessThreadA"); + ProcessThreadA, this, kNormalPriority, "ProcessThreadA"); CHECK_THREAD_NULLITY(myProcessThreadA, "Unable to start A::Process thread"); // API rtc::scoped_ptr myAPIThreadA = ThreadWrapper::CreateThread( - APIThreadA, this, "APIThreadA"); + APIThreadA, this, kNormalPriority, "APIThreadA"); CHECK_THREAD_NULLITY(myAPIThreadA, "Unable to start A::API thread"); // B // PUSH rtc::scoped_ptr myPushAudioThreadB = - ThreadWrapper::CreateThread(PushAudioThreadB, this, "PushAudioThreadB"); + ThreadWrapper::CreateThread(PushAudioThreadB, this, kNormalPriority, + "PushAudioThreadB"); CHECK_THREAD_NULLITY(myPushAudioThreadB, "Unable to start B::PUSH thread"); // PULL rtc::scoped_ptr myPullAudioThreadB = - ThreadWrapper::CreateThread(PullAudioThreadB, this, "PullAudioThreadB"); + ThreadWrapper::CreateThread(PullAudioThreadB, this, kNormalPriority, + "PullAudioThreadB"); CHECK_THREAD_NULLITY(myPullAudioThreadB, "Unable to start B::PULL thread"); // Process rtc::scoped_ptr myProcessThreadB = ThreadWrapper::CreateThread( - ProcessThreadB, this, "ProcessThreadB"); + ProcessThreadB, this, kNormalPriority, "ProcessThreadB"); CHECK_THREAD_NULLITY(myProcessThreadB, "Unable to start B::Process thread"); // API rtc::scoped_ptr myAPIThreadB = ThreadWrapper::CreateThread( - APIThreadB, this, "APIThreadB"); + APIThreadB, this, kNormalPriority, "APIThreadB"); CHECK_THREAD_NULLITY(myAPIThreadB, "Unable to start B::API thread"); //_apiEventA->StartTimer(true, 5000); diff --git a/webrtc/modules/audio_device/android/low_latency_event_unittest.cc b/webrtc/modules/audio_device/android/low_latency_event_unittest.cc index 2138f1f860..359625b016 100644 --- a/webrtc/modules/audio_device/android/low_latency_event_unittest.cc +++ b/webrtc/modules/audio_device/android/low_latency_event_unittest.cc @@ -22,8 +22,10 @@ static const int kEventMsg = 1; class LowLatencyEventTest : public testing::Test { public: LowLatencyEventTest() - : process_thread_(ThreadWrapper::CreateThread( - CbThread, this, "test_thread")), + : process_thread_(ThreadWrapper::CreateThread(CbThread, + this, + kRealtimePriority, + "test_thread")), terminated_(false), iteration_count_(0), allowed_iterations_(0) { @@ -44,7 +46,6 @@ class LowLatencyEventTest : public testing::Test { private: void Start() { EXPECT_TRUE(process_thread_->Start()); - process_thread_->SetPriority(kRealtimePriority); } void Stop() { terminated_ = true; diff --git a/webrtc/modules/audio_device/android/opensles_input.cc b/webrtc/modules/audio_device/android/opensles_input.cc index 12640e7fd9..f0e5347590 100644 --- a/webrtc/modules/audio_device/android/opensles_input.cc +++ b/webrtc/modules/audio_device/android/opensles_input.cc @@ -470,14 +470,13 @@ void OpenSlesInput::RecorderSimpleBufferQueueCallbackHandler( } bool OpenSlesInput::StartCbThreads() { - rec_thread_ = ThreadWrapper::CreateThread(CbThread, this, + rec_thread_ = ThreadWrapper::CreateThread(CbThread, this, kRealtimePriority, "opensl_rec_thread"); assert(rec_thread_.get()); if (!rec_thread_->Start()) { assert(false); return false; } - rec_thread_->SetPriority(kRealtimePriority); OPENSL_RETURN_ON_FAILURE( (*sles_recorder_itf_)->SetRecordState(sles_recorder_itf_, SL_RECORDSTATE_RECORDING), diff --git a/webrtc/modules/audio_device/android/opensles_output.cc b/webrtc/modules/audio_device/android/opensles_output.cc index 578297390a..350b5de25d 100644 --- a/webrtc/modules/audio_device/android/opensles_output.cc +++ b/webrtc/modules/audio_device/android/opensles_output.cc @@ -510,7 +510,7 @@ void OpenSlesOutput::PlayerSimpleBufferQueueCallbackHandler( } bool OpenSlesOutput::StartCbThreads() { - play_thread_ = ThreadWrapper::CreateThread(CbThread, this, + play_thread_ = ThreadWrapper::CreateThread(CbThread, this, kRealtimePriority, "opensl_play_thread"); assert(play_thread_.get()); OPENSL_RETURN_ON_FAILURE( @@ -522,7 +522,6 @@ bool OpenSlesOutput::StartCbThreads() { assert(false); return false; } - play_thread_->SetPriority(kRealtimePriority); return true; } diff --git a/webrtc/modules/audio_device/dummy/file_audio_device.cc b/webrtc/modules/audio_device/dummy/file_audio_device.cc index 82569e8fcf..cce4f5c3da 100644 --- a/webrtc/modules/audio_device/dummy/file_audio_device.cc +++ b/webrtc/modules/audio_device/dummy/file_audio_device.cc @@ -205,6 +205,12 @@ int32_t FileAudioDevice::StartPlayout() { } // PLAYOUT + const char* threadName = "webrtc_audio_module_play_thread"; + _ptrThreadPlay = ThreadWrapper::CreateThread(PlayThreadFunc, + this, + kRealtimePriority, + threadName); + if (!_outputFilename.empty() && _outputFile.OpenFile( _outputFilename.c_str(), false, false, false) == -1) { printf("Failed to open playout file %s!\n", _outputFilename.c_str()); @@ -214,9 +220,6 @@ int32_t FileAudioDevice::StartPlayout() { return -1; } - const char* threadName = "webrtc_audio_module_play_thread"; - _ptrThreadPlay = ThreadWrapper::CreateThread(PlayThreadFunc, this, - threadName); if (!_ptrThreadPlay->Start()) { _ptrThreadPlay.reset(); _playing = false; @@ -224,7 +227,7 @@ int32_t FileAudioDevice::StartPlayout() { _playoutBuffer = NULL; return -1; } - _ptrThreadPlay->SetPriority(kRealtimePriority); + return 0; } @@ -278,7 +281,10 @@ int32_t FileAudioDevice::StartRecording() { } const char* threadName = "webrtc_audio_module_capture_thread"; - _ptrThreadRec = ThreadWrapper::CreateThread(RecThreadFunc, this, threadName); + _ptrThreadRec = ThreadWrapper::CreateThread(RecThreadFunc, + this, + kRealtimePriority, + threadName); if (!_ptrThreadRec->Start()) { _ptrThreadRec.reset(); @@ -287,7 +293,6 @@ int32_t FileAudioDevice::StartRecording() { _recordingBuffer = NULL; return -1; } - _ptrThreadRec->SetPriority(kRealtimePriority); return 0; } diff --git a/webrtc/modules/audio_device/ios/audio_device_ios.mm b/webrtc/modules/audio_device/ios/audio_device_ios.mm index 178ce3e0a9..6b973abb49 100644 --- a/webrtc/modules/audio_device/ios/audio_device_ios.mm +++ b/webrtc/modules/audio_device/ios/audio_device_ios.mm @@ -107,12 +107,12 @@ int32_t AudioDeviceIOS::Init() { // Create and start capture thread if (!_captureWorkerThread) { - _captureWorkerThread = ThreadWrapper::CreateThread( - RunCapture, this, "CaptureWorkerThread"); + _captureWorkerThread + = ThreadWrapper::CreateThread(RunCapture, this, kRealtimePriority, + "CaptureWorkerThread"); bool res = _captureWorkerThread->Start(); WEBRTC_TRACE(kTraceDebug, kTraceAudioDevice, _id, "CaptureWorkerThread started (res=%d)", res); - _captureWorkerThread->SetPriority(kRealtimePriority); } else { WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, "Thread already created"); diff --git a/webrtc/modules/audio_device/linux/audio_device_alsa_linux.cc b/webrtc/modules/audio_device/linux/audio_device_alsa_linux.cc index 3516d77eea..e590663bc0 100644 --- a/webrtc/modules/audio_device/linux/audio_device_alsa_linux.cc +++ b/webrtc/modules/audio_device/linux/audio_device_alsa_linux.cc @@ -1365,8 +1365,10 @@ int32_t AudioDeviceLinuxALSA::StartRecording() } // RECORDING const char* threadName = "webrtc_audio_module_capture_thread"; - _ptrThreadRec = ThreadWrapper::CreateThread( - RecThreadFunc, this, threadName); + _ptrThreadRec = ThreadWrapper::CreateThread(RecThreadFunc, + this, + kRealtimePriority, + threadName); if (!_ptrThreadRec->Start()) { @@ -1378,7 +1380,6 @@ int32_t AudioDeviceLinuxALSA::StartRecording() _recordingBuffer = NULL; return -1; } - _ptrThreadRec->SetPriority(kRealtimePriority); errVal = LATE(snd_pcm_prepare)(_handleRecord); if (errVal < 0) @@ -1519,7 +1520,9 @@ int32_t AudioDeviceLinuxALSA::StartPlayout() // PLAYOUT const char* threadName = "webrtc_audio_module_play_thread"; - _ptrThreadPlay = ThreadWrapper::CreateThread(PlayThreadFunc, this, + _ptrThreadPlay = ThreadWrapper::CreateThread(PlayThreadFunc, + this, + kRealtimePriority, threadName); if (!_ptrThreadPlay->Start()) { @@ -1531,7 +1534,6 @@ int32_t AudioDeviceLinuxALSA::StartPlayout() _playoutBuffer = NULL; return -1; } - _ptrThreadPlay->SetPriority(kRealtimePriority); int errVal = LATE(snd_pcm_prepare)(_handlePlayout); if (errVal < 0) diff --git a/webrtc/modules/audio_device/linux/audio_device_pulse_linux.cc b/webrtc/modules/audio_device/linux/audio_device_pulse_linux.cc index 9098211a31..fd16e9e96d 100644 --- a/webrtc/modules/audio_device/linux/audio_device_pulse_linux.cc +++ b/webrtc/modules/audio_device/linux/audio_device_pulse_linux.cc @@ -208,7 +208,7 @@ int32_t AudioDeviceLinuxPulse::Init() // RECORDING const char* threadName = "webrtc_audio_module_rec_thread"; _ptrThreadRec = ThreadWrapper::CreateThread(RecThreadFunc, this, - threadName); + kRealtimePriority, threadName); if (!_ptrThreadRec->Start()) { WEBRTC_TRACE(kTraceCritical, kTraceAudioDevice, _id, @@ -218,12 +218,10 @@ int32_t AudioDeviceLinuxPulse::Init() return -1; } - _ptrThreadRec->SetPriority(kRealtimePriority); - // PLAYOUT threadName = "webrtc_audio_module_play_thread"; _ptrThreadPlay = ThreadWrapper::CreateThread(PlayThreadFunc, this, - threadName); + kRealtimePriority, threadName); if (!_ptrThreadPlay->Start()) { WEBRTC_TRACE(kTraceCritical, kTraceAudioDevice, _id, @@ -232,7 +230,6 @@ int32_t AudioDeviceLinuxPulse::Init() _ptrThreadPlay.reset(); return -1; } - _ptrThreadPlay->SetPriority(kRealtimePriority); _initialized = true; diff --git a/webrtc/modules/audio_device/mac/audio_device_mac.cc b/webrtc/modules/audio_device/mac/audio_device_mac.cc index eb7962f57e..3e2a30711a 100644 --- a/webrtc/modules/audio_device/mac/audio_device_mac.cc +++ b/webrtc/modules/audio_device/mac/audio_device_mac.cc @@ -1667,10 +1667,10 @@ int32_t AudioDeviceMac::StartRecording() DCHECK(!capture_worker_thread_.get()); capture_worker_thread_ = - ThreadWrapper::CreateThread(RunCapture, this, "CaptureWorkerThread"); + ThreadWrapper::CreateThread(RunCapture, this, kRealtimePriority, + "CaptureWorkerThread"); DCHECK(capture_worker_thread_.get()); capture_worker_thread_->Start(); - capture_worker_thread_->SetPriority(kRealtimePriority); OSStatus err = noErr; if (_twoDevices) @@ -1822,9 +1822,9 @@ int32_t AudioDeviceMac::StartPlayout() DCHECK(!render_worker_thread_.get()); render_worker_thread_ = - ThreadWrapper::CreateThread(RunRender, this, "RenderWorkerThread"); + ThreadWrapper::CreateThread(RunRender, this, kRealtimePriority, + "RenderWorkerThread"); render_worker_thread_->Start(); - render_worker_thread_->SetPriority(kRealtimePriority); if (_twoDevices || !_recording) { diff --git a/webrtc/modules/audio_device/win/audio_device_wave_win.cc b/webrtc/modules/audio_device/win/audio_device_wave_win.cc index bcea3176e9..c5f0a1a82a 100644 --- a/webrtc/modules/audio_device/win/audio_device_wave_win.cc +++ b/webrtc/modules/audio_device/win/audio_device_wave_win.cc @@ -228,7 +228,10 @@ int32_t AudioDeviceWindowsWave::Init() } const char* threadName = "webrtc_audio_module_thread"; - _ptrThread = ThreadWrapper::CreateThread(ThreadFunc, this, threadName); + _ptrThread = ThreadWrapper::CreateThread(ThreadFunc, + this, + kRealtimePriority, + threadName); if (!_ptrThread->Start()) { WEBRTC_TRACE(kTraceCritical, kTraceAudioDevice, _id, @@ -236,7 +239,6 @@ int32_t AudioDeviceWindowsWave::Init() _ptrThread.reset(); return -1; } - _ptrThread->SetPriority(kRealtimePriority); const bool periodic(true); if (!_timeEvent.StartTimer(periodic, TIMER_PERIOD_MS)) diff --git a/webrtc/modules/rtp_rtcp/test/BWEStandAlone/TestLoadGenerator.cc b/webrtc/modules/rtp_rtcp/test/BWEStandAlone/TestLoadGenerator.cc index 0ed35728e4..a3f52f9d77 100644 --- a/webrtc/modules/rtp_rtcp/test/BWEStandAlone/TestLoadGenerator.cc +++ b/webrtc/modules/rtp_rtcp/test/BWEStandAlone/TestLoadGenerator.cc @@ -77,11 +77,10 @@ int32_t TestLoadGenerator::Start (const char *threadName) _eventPtr = EventWrapper::Create(); _genThread = ThreadWrapper::CreateThread(SenderThreadFunction, this, - threadName); + kRealtimePriority, threadName); _running = true; _genThread->Start(); - _genThread->SetPriority(kRealtimePriority); return 0; } diff --git a/webrtc/modules/rtp_rtcp/test/BWEStandAlone/TestSenderReceiver.cc b/webrtc/modules/rtp_rtcp/test/BWEStandAlone/TestSenderReceiver.cc index e55d363467..839f5792a7 100644 --- a/webrtc/modules/rtp_rtcp/test/BWEStandAlone/TestSenderReceiver.cc +++ b/webrtc/modules/rtp_rtcp/test/BWEStandAlone/TestSenderReceiver.cc @@ -164,7 +164,7 @@ int32_t TestSenderReceiver::Start() } _procThread = ThreadWrapper::CreateThread(ProcThreadFunction, this, - "TestSenderReceiver"); + kRealtimePriority, "TestSenderReceiver"); _running = true; @@ -178,7 +178,6 @@ int32_t TestSenderReceiver::Start() } _procThread->Start(); - _procThread->SetPriority(kRealtimePriority); return 0; diff --git a/webrtc/modules/utility/source/process_thread_impl.cc b/webrtc/modules/utility/source/process_thread_impl.cc index 5b505390da..33a1c4f2d2 100644 --- a/webrtc/modules/utility/source/process_thread_impl.cc +++ b/webrtc/modules/utility/source/process_thread_impl.cc @@ -70,7 +70,7 @@ void ProcessThreadImpl::Start() { m.module->ProcessThreadAttached(this); thread_ = ThreadWrapper::CreateThread( - &ProcessThreadImpl::Run, this, "ProcessThread"); + &ProcessThreadImpl::Run, this, kNormalPriority, "ProcessThread"); CHECK(thread_->Start()); } diff --git a/webrtc/modules/video_capture/linux/video_capture_linux.cc b/webrtc/modules/video_capture/linux/video_capture_linux.cc index 23703aa53d..41e0e84d28 100644 --- a/webrtc/modules/video_capture/linux/video_capture_linux.cc +++ b/webrtc/modules/video_capture/linux/video_capture_linux.cc @@ -281,9 +281,8 @@ int32_t VideoCaptureModuleV4L2::StartCapture( if (!_captureThread) { _captureThread = ThreadWrapper::CreateThread( - VideoCaptureModuleV4L2::CaptureThread, this, "CaptureThread"); + VideoCaptureModuleV4L2::CaptureThread, this, kHighPriority); _captureThread->Start(); - _captureThread->SetPriority(kHighPriority); } // Needed to start UVC camera - from the uvcview application diff --git a/webrtc/modules/video_render/android/video_render_android_impl.cc b/webrtc/modules/video_render/android/video_render_android_impl.cc index 15b52d7739..288d1fabcc 100644 --- a/webrtc/modules/video_render/android/video_render_android_impl.cc +++ b/webrtc/modules/video_render/android/video_render_android_impl.cc @@ -142,6 +142,7 @@ int32_t VideoRenderAndroid::StartRender() { } _javaRenderThread = ThreadWrapper::CreateThread(JavaRenderThreadFun, this, + kRealtimePriority, "AndroidRenderThread"); if (_javaRenderThread->Start()) @@ -152,7 +153,6 @@ int32_t VideoRenderAndroid::StartRender() { "%s: Could not start send thread", __FUNCTION__); return -1; } - _javaRenderThread->SetPriority(kRealtimePriority); return 0; } diff --git a/webrtc/modules/video_render/incoming_video_stream.cc b/webrtc/modules/video_render/incoming_video_stream.cc index 6e9e8a4d96..40966bd406 100644 --- a/webrtc/modules/video_render/incoming_video_stream.cc +++ b/webrtc/modules/video_render/incoming_video_stream.cc @@ -179,7 +179,8 @@ int32_t IncomingVideoStream::Start() { assert(incoming_render_thread_ == NULL); incoming_render_thread_ = ThreadWrapper::CreateThread( - IncomingVideoStreamThreadFun, this, "IncomingVideoStreamThread"); + IncomingVideoStreamThreadFun, this, kRealtimePriority, + "IncomingVideoStreamThread"); if (!incoming_render_thread_) { WEBRTC_TRACE(kTraceError, kTraceVideoRenderer, module_id_, "%s: No thread", __FUNCTION__); @@ -194,7 +195,6 @@ int32_t IncomingVideoStream::Start() { "%s: Could not start send thread", __FUNCTION__); return -1; } - incoming_render_thread_->SetPriority(kRealtimePriority); deliver_buffer_event_.StartTimer(false, KEventStartupTimeMS); running_ = true; diff --git a/webrtc/modules/video_render/ios/video_render_ios_gles20.mm b/webrtc/modules/video_render/ios/video_render_ios_gles20.mm index 35382ea814..1d61a095b2 100644 --- a/webrtc/modules/video_render/ios/video_render_ios_gles20.mm +++ b/webrtc/modules/video_render/ios/video_render_ios_gles20.mm @@ -33,7 +33,7 @@ VideoRenderIosGles20::VideoRenderIosGles20(VideoRenderIosView* view, gles_context_([view context]), is_rendering_(true) { screen_update_thread_ = ThreadWrapper::CreateThread( - ScreenUpdateThreadProc, this, "ScreenUpdateGles20"); + ScreenUpdateThreadProc, this, kRealtimePriority); screen_update_event_ = EventWrapper::Create(); GetWindowRect(window_rect_); } @@ -83,7 +83,6 @@ int VideoRenderIosGles20::Init() { } screen_update_thread_->Start(); - screen_update_thread_->SetPriority(kRealtimePriority); // Start the event triggering the render process unsigned int monitor_freq = 60; diff --git a/webrtc/modules/video_render/mac/video_render_agl.cc b/webrtc/modules/video_render/mac/video_render_agl.cc index 6cd4173d8a..ae8b7c3ffe 100644 --- a/webrtc/modules/video_render/mac/video_render_agl.cc +++ b/webrtc/modules/video_render/mac/video_render_agl.cc @@ -395,8 +395,7 @@ _renderingIsPaused( false), { //WEBRTC_TRACE(kTraceInfo, kTraceVideoRenderer, _id, "%s"); - _screenUpdateThread = ThreadWrapper::CreateThread( - ScreenUpdateThreadProc, this, "ScreenUpdate"); + _screenUpdateThread = ThreadWrapper::CreateThread(ScreenUpdateThreadProc, this, kRealtimePriority); _screenUpdateEvent = EventWrapper::Create(); if(!IsValidWindowPtr(_windowRef)) @@ -512,8 +511,7 @@ _renderingIsPaused( false), //WEBRTC_TRACE(kTraceDebug, "%s:%d Constructor", __FUNCTION__, __LINE__); // _renderCritSec = CriticalSectionWrapper::CreateCriticalSection(); - _screenUpdateThread = ThreadWrapper::CreateThread( - ScreenUpdateThreadProc, this, "ScreenUpdateThread"); + _screenUpdateThread = ThreadWrapper::CreateThread(ScreenUpdateThreadProc, this, kRealtimePriority); _screenUpdateEvent = EventWrapper::Create(); GetWindowRect(_windowRect); @@ -739,7 +737,6 @@ int VideoRenderAGL::Init() return -1; } _screenUpdateThread->Start(); - _screenUpdateThread->SetPriority(kRealtimePriority); // Start the event triggering the render process unsigned int monitorFreq = 60; @@ -1880,7 +1877,6 @@ int32_t VideoRenderAGL::StartRender() UnlockAGLCntx(); return -1; } - _screenUpdateThread->SetPriority(kRealtimePriority); if(FALSE == _screenUpdateEvent->StartTimer(true, 1000/MONITOR_FREQ)) { //WEBRTC_TRACE(kTraceError, kTraceVideoRenderer, _id, "%s:%d Failed to start screenUpdateEvent", __FUNCTION__, __LINE__); @@ -1891,8 +1887,7 @@ int32_t VideoRenderAGL::StartRender() return 0; } - _screenUpdateThread = ThreadWrapper::CreateThread(ScreenUpdateThreadProc, - this, "ScreenUpdate"); + _screenUpdateThread = ThreadWrapper::CreateThread(ScreenUpdateThreadProc, this, kRealtimePriority); _screenUpdateEvent = EventWrapper::Create(); if (!_screenUpdateThread) @@ -1903,7 +1898,6 @@ int32_t VideoRenderAGL::StartRender() } _screenUpdateThread->Start(); - _screenUpdateThread->SetPriority(kRealtimePriority); _screenUpdateEvent->StartTimer(true, 1000/MONITOR_FREQ); //WEBRTC_TRACE(kTraceInfo, kTraceVideoRenderer, _id, "%s:%d Started screenUpdateThread", __FUNCTION__, __LINE__); diff --git a/webrtc/modules/video_render/mac/video_render_nsopengl.mm b/webrtc/modules/video_render/mac/video_render_nsopengl.mm index 556eee0f99..569dd26cdd 100644 --- a/webrtc/modules/video_render/mac/video_render_nsopengl.mm +++ b/webrtc/modules/video_render/mac/video_render_nsopengl.mm @@ -380,8 +380,7 @@ _renderingIsPaused (FALSE), _windowRefSuperView(NULL), _windowRefSuperViewFrame(NSMakeRect(0,0,0,0)) { - _screenUpdateThread = ThreadWrapper::CreateThread(ScreenUpdateThreadProc, - this, "ScreenUpdateNSOpenGL"); + _screenUpdateThread = ThreadWrapper::CreateThread(ScreenUpdateThreadProc, this, kRealtimePriority); _screenUpdateEvent = EventWrapper::Create(); } @@ -438,8 +437,6 @@ int32_t VideoRenderNSOpenGL::StartRender() return -1; } - _screenUpdateThread->SetPriority(kRealtimePriority); - UnlockAGLCntx(); return 0; } @@ -719,7 +716,6 @@ int VideoRenderNSOpenGL::Init() } _screenUpdateThread->Start(); - _screenUpdateThread->SetPriority(kRealtimePriority); // Start the event triggering the render process unsigned int monitorFreq = 60; diff --git a/webrtc/modules/video_render/windows/video_render_direct3d9.cc b/webrtc/modules/video_render/windows/video_render_direct3d9.cc index e9c08df69b..99dd4948ee 100644 --- a/webrtc/modules/video_render/windows/video_render_direct3d9.cc +++ b/webrtc/modules/video_render/windows/video_render_direct3d9.cc @@ -295,8 +295,8 @@ VideoRenderDirect3D9::VideoRenderDirect3D9(Trace* trace, _totalMemory(0), _availableMemory(0) { - _screenUpdateThread = ThreadWrapper::CreateThread( - ScreenUpdateThreadProc, this, "ScreenUpdateThread"); + _screenUpdateThread = ThreadWrapper::CreateThread(ScreenUpdateThreadProc, + this, kRealtimePriority); _screenUpdateEvent = EventWrapper::Create(); SetRect(&_originalHwndRect, 0, 0, 0, 0); } @@ -547,7 +547,6 @@ int32_t VideoRenderDirect3D9::Init() return -1; } _screenUpdateThread->Start(); - _screenUpdateThread->SetPriority(kRealtimePriority); // Start the event triggering the render process unsigned int monitorFreq = 60; diff --git a/webrtc/system_wrappers/interface/thread_wrapper.h b/webrtc/system_wrappers/interface/thread_wrapper.h index 742056198a..67ce866d18 100644 --- a/webrtc/system_wrappers/interface/thread_wrapper.h +++ b/webrtc/system_wrappers/interface/thread_wrapper.h @@ -16,10 +16,6 @@ #ifndef WEBRTC_SYSTEM_WRAPPERS_INTERFACE_THREAD_WRAPPER_H_ #define WEBRTC_SYSTEM_WRAPPERS_INTERFACE_THREAD_WRAPPER_H_ -#if defined(WEBRTC_WIN) -#include -#endif - #include "webrtc/base/scoped_ptr.h" #include "webrtc/common_types.h" #include "webrtc/typedefs.h" @@ -32,19 +28,11 @@ namespace webrtc { typedef bool(*ThreadRunFunction)(void*); enum ThreadPriority { -#ifdef WEBRTC_WIN - kLowPriority = THREAD_PRIORITY_BELOW_NORMAL, - kNormalPriority = THREAD_PRIORITY_NORMAL, - kHighPriority = THREAD_PRIORITY_ABOVE_NORMAL, - kHighestPriority = THREAD_PRIORITY_HIGHEST, - kRealtimePriority = THREAD_PRIORITY_TIME_CRITICAL -#else kLowPriority = 1, kNormalPriority = 2, kHighPriority = 3, kHighestPriority = 4, kRealtimePriority = 5 -#endif }; // Represents a simple worker thread. The implementation must be assumed @@ -64,8 +52,11 @@ class ThreadWrapper { // prio Thread priority. May require root/admin rights. // thread_name NULL terminated thread name, will be visable in the Windows // debugger. + // TODO(tommi): Remove the priority argument and provide a setter instead. + // TODO(tommi): Make thread_name non-optional (i.e. no default value). static rtc::scoped_ptr CreateThread(ThreadRunFunction func, - void* obj, const char* thread_name); + void* obj, ThreadPriority prio = kNormalPriority, + const char* thread_name = 0); // Get the current thread's thread ID. // NOTE: This is a static method. It returns the id of the calling thread, @@ -84,10 +75,6 @@ class ThreadWrapper { // Multiple tries to Stop are allowed (e.g. to wait longer than 2 seconds). // It's ok to call Stop() even if the spawned thread has been reclaimed. virtual bool Stop() = 0; - - // Set the priority of the worker thread. Must be called when thread - // is running. - virtual bool SetPriority(ThreadPriority priority) = 0; }; } // namespace webrtc diff --git a/webrtc/system_wrappers/source/condition_variable_unittest.cc b/webrtc/system_wrappers/source/condition_variable_unittest.cc index c34c4ea0d8..d6907f6475 100644 --- a/webrtc/system_wrappers/source/condition_variable_unittest.cc +++ b/webrtc/system_wrappers/source/condition_variable_unittest.cc @@ -145,7 +145,7 @@ class CondVarTest : public ::testing::Test { virtual void SetUp() { thread_ = ThreadWrapper::CreateThread(&WaitingRunFunction, - &baton_, "CondVarTest"); + &baton_); ASSERT_TRUE(thread_->Start()); } diff --git a/webrtc/system_wrappers/source/critical_section_unittest.cc b/webrtc/system_wrappers/source/critical_section_unittest.cc index ec639eb673..9b497b426a 100644 --- a/webrtc/system_wrappers/source/critical_section_unittest.cc +++ b/webrtc/system_wrappers/source/critical_section_unittest.cc @@ -79,7 +79,7 @@ TEST_F(CritSectTest, ThreadWakesOnce) NO_THREAD_SAFETY_ANALYSIS { CriticalSectionWrapper::CreateCriticalSection(); ProtectedCount count(crit_sect); rtc::scoped_ptr thread = ThreadWrapper::CreateThread( - &LockUnlockThenStopRunFunction, &count, "ThreadWakesOnce"); + &LockUnlockThenStopRunFunction, &count); crit_sect->Enter(); ASSERT_TRUE(thread->Start()); SwitchProcess(); @@ -106,7 +106,7 @@ TEST_F(CritSectTest, ThreadWakesTwice) NO_THREAD_SAFETY_ANALYSIS { CriticalSectionWrapper::CreateCriticalSection(); ProtectedCount count(crit_sect); rtc::scoped_ptr thread = ThreadWrapper::CreateThread( - &LockUnlockRunFunction, &count, "ThreadWakesTwice"); + &LockUnlockRunFunction, &count); crit_sect->Enter(); // Make sure counter stays 0 until we wait for it. ASSERT_TRUE(thread->Start()); crit_sect->Leave(); diff --git a/webrtc/system_wrappers/source/data_log.cc b/webrtc/system_wrappers/source/data_log.cc index 653af657dd..7c2a91b558 100644 --- a/webrtc/system_wrappers/source/data_log.cc +++ b/webrtc/system_wrappers/source/data_log.cc @@ -349,11 +349,13 @@ int DataLogImpl::CreateLog() { int DataLogImpl::Init() { file_writer_thread_ = ThreadWrapper::CreateThread( - DataLogImpl::Run, instance_, "DataLog"); + DataLogImpl::Run, + instance_, + kHighestPriority, + "DataLog"); bool success = file_writer_thread_->Start(); if (!success) return -1; - file_writer_thread_->SetPriority(kHighestPriority); return 0; } diff --git a/webrtc/system_wrappers/source/event_posix.cc b/webrtc/system_wrappers/source/event_posix.cc index 6833e0e8af..bbfb0b03b1 100644 --- a/webrtc/system_wrappers/source/event_posix.cc +++ b/webrtc/system_wrappers/source/event_posix.cc @@ -154,11 +154,11 @@ bool EventPosix::StartTimer(bool periodic, unsigned long time) { // Start the timer thread timer_event_ = static_cast(EventWrapper::Create()); const char* thread_name = "WebRtc_event_timer_thread"; - timer_thread_ = ThreadWrapper::CreateThread(Run, this, thread_name); + timer_thread_ = ThreadWrapper::CreateThread(Run, this, kRealtimePriority, + thread_name); periodic_ = periodic; time_ = time; bool started = timer_thread_->Start(); - timer_thread_->SetPriority(kRealtimePriority); pthread_mutex_unlock(&mutex_); return started; diff --git a/webrtc/system_wrappers/source/thread.cc b/webrtc/system_wrappers/source/thread.cc index b469344bd1..957388b885 100644 --- a/webrtc/system_wrappers/source/thread.cc +++ b/webrtc/system_wrappers/source/thread.cc @@ -25,9 +25,10 @@ typedef ThreadPosix ThreadType; #endif rtc::scoped_ptr ThreadWrapper::CreateThread( - ThreadRunFunction func, void* obj, const char* thread_name) { + ThreadRunFunction func, void* obj, ThreadPriority prio, + const char* thread_name) { return rtc::scoped_ptr( - new ThreadType(func, obj, thread_name)).Pass(); + new ThreadType(func, obj, prio, thread_name)).Pass(); } } // namespace webrtc diff --git a/webrtc/system_wrappers/source/thread_posix.cc b/webrtc/system_wrappers/source/thread_posix.cc index dc95cbcd73..c60541175f 100644 --- a/webrtc/system_wrappers/source/thread_posix.cc +++ b/webrtc/system_wrappers/source/thread_posix.cc @@ -69,9 +69,10 @@ void* ThreadPosix::StartThread(void* param) { } ThreadPosix::ThreadPosix(ThreadRunFunction func, void* obj, - const char* thread_name) + ThreadPriority prio, const char* thread_name) : run_function_(func), obj_(obj), + prio_(prio), stop_event_(false, false), name_(thread_name ? thread_name : "webrtc"), thread_(0) { @@ -111,38 +112,6 @@ bool ThreadPosix::Stop() { return true; } -bool ThreadPosix::SetPriority(ThreadPriority priority) { - DCHECK(thread_checker_.CalledOnValidThread()); - if (!thread_) - return false; - -#ifdef WEBRTC_THREAD_RR - const int policy = SCHED_RR; -#else - const int policy = SCHED_FIFO; -#endif - const int min_prio = sched_get_priority_min(policy); - const int max_prio = sched_get_priority_max(policy); - if (min_prio == -1 || max_prio == -1) { - WEBRTC_TRACE(kTraceError, kTraceUtility, -1, - "unable to retreive min or max priority for threads"); - return false; - } - - if (max_prio - min_prio <= 2) - return false; - - sched_param param; - param.sched_priority = ConvertToSystemPriority(priority, min_prio, max_prio); - if (pthread_setschedparam(thread_, policy, ¶m) != 0) { - WEBRTC_TRACE( - kTraceError, kTraceUtility, -1, "unable to set thread priority"); - return false; - } - - return true; -} - void ThreadPosix::Run() { if (!name_.empty()) { // Setting the thread name may fail (harmlessly) if running inside a @@ -154,6 +123,27 @@ void ThreadPosix::Run() { #endif } +#ifdef WEBRTC_THREAD_RR + const int policy = SCHED_RR; +#else + const int policy = SCHED_FIFO; +#endif + const int min_prio = sched_get_priority_min(policy); + const int max_prio = sched_get_priority_max(policy); + if ((min_prio == -1) || (max_prio == -1)) { + WEBRTC_TRACE(kTraceError, kTraceUtility, -1, + "unable to retreive min or max priority for threads"); + } + + if (max_prio - min_prio > 2) { + sched_param param; + param.sched_priority = ConvertToSystemPriority(prio_, min_prio, max_prio); + if (pthread_setschedparam(pthread_self(), policy, ¶m) != 0) { + WEBRTC_TRACE( + kTraceError, kTraceUtility, -1, "unable to set thread priority"); + } + } + // It's a requirement that for successful thread creation that the run // function be called at least once (see RunFunctionIsCalled unit test), // so to fullfill that requirement, we use a |do| loop and not |while|. diff --git a/webrtc/system_wrappers/source/thread_posix.h b/webrtc/system_wrappers/source/thread_posix.h index c726e480cf..ccc52b642a 100644 --- a/webrtc/system_wrappers/source/thread_posix.h +++ b/webrtc/system_wrappers/source/thread_posix.h @@ -25,15 +25,14 @@ int ConvertToSystemPriority(ThreadPriority priority, int min_prio, class ThreadPosix : public ThreadWrapper { public: - ThreadPosix(ThreadRunFunction func, void* obj, const char* thread_name); + ThreadPosix(ThreadRunFunction func, void* obj, ThreadPriority prio, + const char* thread_name); ~ThreadPosix() override; // From ThreadWrapper. bool Start() override; bool Stop() override; - bool SetPriority(ThreadPriority priority) override; - private: static void* StartThread(void* param); @@ -42,6 +41,7 @@ class ThreadPosix : public ThreadWrapper { rtc::ThreadChecker thread_checker_; ThreadRunFunction const run_function_; void* const obj_; + ThreadPriority prio_; rtc::Event stop_event_; const std::string name_; diff --git a/webrtc/system_wrappers/source/thread_unittest.cc b/webrtc/system_wrappers/source/thread_unittest.cc index 854f98bbd9..f5de7d2099 100644 --- a/webrtc/system_wrappers/source/thread_unittest.cc +++ b/webrtc/system_wrappers/source/thread_unittest.cc @@ -24,7 +24,7 @@ bool NullRunFunction(void* obj) { TEST(ThreadTest, StartStop) { rtc::scoped_ptr thread = ThreadWrapper::CreateThread( - &NullRunFunction, nullptr, "ThreadTest"); + &NullRunFunction, NULL); ASSERT_TRUE(thread->Start()); EXPECT_TRUE(thread->Stop()); } @@ -40,7 +40,7 @@ bool SetFlagRunFunction(void* obj) { TEST(ThreadTest, RunFunctionIsCalled) { bool flag = false; rtc::scoped_ptr thread = ThreadWrapper::CreateThread( - &SetFlagRunFunction, &flag, "RunFunctionIsCalled"); + &SetFlagRunFunction, &flag); ASSERT_TRUE(thread->Start()); // At this point, the flag may be either true or false. diff --git a/webrtc/system_wrappers/source/thread_win.cc b/webrtc/system_wrappers/source/thread_win.cc index aa03b91809..0c1a8f209e 100644 --- a/webrtc/system_wrappers/source/thread_win.cc +++ b/webrtc/system_wrappers/source/thread_win.cc @@ -55,9 +55,10 @@ void SetThreadName(DWORD dwThreadID, LPCSTR szThreadName) { } ThreadWindows::ThreadWindows(ThreadRunFunction func, void* obj, - const char* thread_name) + ThreadPriority prio, const char* thread_name) : run_function_(func), obj_(obj), + prio_(prio), stop_(false), thread_(NULL), name_(thread_name ? thread_name : "webrtc") { @@ -97,6 +98,28 @@ bool ThreadWindows::Start() { return false; } + if (prio_ != kNormalPriority) { + int priority = THREAD_PRIORITY_NORMAL; + switch (prio_) { + case kLowPriority: + priority = THREAD_PRIORITY_BELOW_NORMAL; + break; + case kHighPriority: + priority = THREAD_PRIORITY_ABOVE_NORMAL; + break; + case kHighestPriority: + priority = THREAD_PRIORITY_HIGHEST; + break; + case kRealtimePriority: + priority = THREAD_PRIORITY_TIME_CRITICAL; + break; + default: + break; + } + + SetThreadPriority(thread_, priority); + } + return true; } @@ -113,11 +136,6 @@ bool ThreadWindows::Stop() { return true; } -bool ThreadWindows::SetPriority(ThreadPriority priority) { - DCHECK(main_thread_.CalledOnValidThread()); - return thread_ && SetThreadPriority(thread_, priority); -} - void ThreadWindows::Run() { if (!name_.empty()) SetThreadName(static_cast(-1), name_.c_str()); diff --git a/webrtc/system_wrappers/source/thread_win.h b/webrtc/system_wrappers/source/thread_win.h index 741ae1ed05..1652551a7b 100644 --- a/webrtc/system_wrappers/source/thread_win.h +++ b/webrtc/system_wrappers/source/thread_win.h @@ -21,14 +21,13 @@ namespace webrtc { class ThreadWindows : public ThreadWrapper { public: - ThreadWindows(ThreadRunFunction func, void* obj, const char* thread_name); + ThreadWindows(ThreadRunFunction func, void* obj, ThreadPriority prio, + const char* thread_name); ~ThreadWindows() override; bool Start() override; bool Stop() override; - bool SetPriority(ThreadPriority priority) override; - protected: void Run(); @@ -38,6 +37,8 @@ class ThreadWindows : public ThreadWrapper { ThreadRunFunction const run_function_; void* const obj_; bool stop_; + // TODO(tommi): Consider having a SetPriority method instead of this variable. + ThreadPriority prio_; HANDLE thread_; const std::string name_; rtc::ThreadChecker main_thread_; diff --git a/webrtc/test/channel_transport/udp_socket2_manager_win.cc b/webrtc/test/channel_transport/udp_socket2_manager_win.cc index 55ddaee068..f5062b1351 100644 --- a/webrtc/test/channel_transport/udp_socket2_manager_win.cc +++ b/webrtc/test/channel_transport/udp_socket2_manager_win.cc @@ -537,11 +537,7 @@ bool UdpSocket2WorkerWindows::Start() { WEBRTC_TRACE(kTraceStateInfo, kTraceTransport, -1, "Start UdpSocket2WorkerWindows"); - if (!_pThread->Start()) - return false; - - _pThread->SetPriority(kRealtimePriority); - return true; + return _pThread->Start(); } bool UdpSocket2WorkerWindows::Stop() @@ -556,7 +552,8 @@ int32_t UdpSocket2WorkerWindows::Init() if(!_init) { const char* threadName = "UdpSocket2ManagerWindows_thread"; - _pThread = ThreadWrapper::CreateThread(Run, this, threadName); + _pThread = ThreadWrapper::CreateThread(Run, this, kRealtimePriority, + threadName); _init = true; } return 0; diff --git a/webrtc/test/channel_transport/udp_socket_manager_posix.cc b/webrtc/test/channel_transport/udp_socket_manager_posix.cc index 9748400f11..5d7686ef43 100644 --- a/webrtc/test/channel_transport/udp_socket_manager_posix.cc +++ b/webrtc/test/channel_transport/udp_socket_manager_posix.cc @@ -189,6 +189,7 @@ UdpSocketManagerPosixImpl::UdpSocketManagerPosixImpl() { _critSectList = CriticalSectionWrapper::CreateCriticalSection(); _thread = ThreadWrapper::CreateThread(UdpSocketManagerPosixImpl::Run, this, + kRealtimePriority, "UdpSocketManagerPosixImplThread"); FD_ZERO(&_readFds); WEBRTC_TRACE(kTraceMemory, kTraceTransport, -1, @@ -227,10 +228,7 @@ bool UdpSocketManagerPosixImpl::Start() WEBRTC_TRACE(kTraceStateInfo, kTraceTransport, -1, "Start UdpSocketManagerPosix"); - if (!_thread->Start()) - return false; - _thread->SetPriority(kRealtimePriority); - return true; + return _thread->Start(); } bool UdpSocketManagerPosixImpl::Stop() diff --git a/webrtc/test/direct_transport.cc b/webrtc/test/direct_transport.cc index 871bcb06c3..4e7b9d01ec 100644 --- a/webrtc/test/direct_transport.cc +++ b/webrtc/test/direct_transport.cc @@ -20,8 +20,7 @@ namespace test { DirectTransport::DirectTransport() : lock_(CriticalSectionWrapper::CreateCriticalSection()), packet_event_(EventWrapper::Create()), - thread_(ThreadWrapper::CreateThread( - NetworkProcess, this, "NetworkProcess")), + thread_(ThreadWrapper::CreateThread(NetworkProcess, this)), clock_(Clock::GetRealTimeClock()), shutting_down_(false), fake_network_(FakeNetworkPipe::Config()) { @@ -32,8 +31,7 @@ DirectTransport::DirectTransport( const FakeNetworkPipe::Config& config) : lock_(CriticalSectionWrapper::CreateCriticalSection()), packet_event_(EventWrapper::Create()), - thread_(ThreadWrapper::CreateThread( - NetworkProcess, this, "NetworkProcess")), + thread_(ThreadWrapper::CreateThread(NetworkProcess, this)), clock_(Clock::GetRealTimeClock()), shutting_down_(false), fake_network_(config) { diff --git a/webrtc/test/fake_audio_device.cc b/webrtc/test/fake_audio_device.cc index a55be4a2fc..5f78eb46ca 100644 --- a/webrtc/test/fake_audio_device.cc +++ b/webrtc/test/fake_audio_device.cc @@ -55,15 +55,14 @@ int32_t FakeAudioDevice::Init() { if (!tick_->StartTimer(true, 10)) return -1; - thread_ = ThreadWrapper::CreateThread(FakeAudioDevice::Run, this, - "FakeAudioDevice"); + thread_ = ThreadWrapper::CreateThread( + FakeAudioDevice::Run, this, webrtc::kHighPriority, "FakeAudioDevice"); if (thread_.get() == NULL) return -1; if (!thread_->Start()) { thread_.reset(); return -1; } - thread_->SetPriority(webrtc::kHighPriority); return 0; } diff --git a/webrtc/test/frame_generator_capturer.cc b/webrtc/test/frame_generator_capturer.cc index 664ed6b19a..e956fd21dc 100644 --- a/webrtc/test/frame_generator_capturer.cc +++ b/webrtc/test/frame_generator_capturer.cc @@ -90,7 +90,9 @@ bool FrameGeneratorCapturer::Init() { if (!tick_->StartTimer(true, 1000 / target_fps_)) return false; - thread_ = ThreadWrapper::CreateThread(FrameGeneratorCapturer::Run, this, + thread_ = ThreadWrapper::CreateThread(FrameGeneratorCapturer::Run, + this, + webrtc::kHighPriority, "FrameGeneratorCapturer"); if (thread_.get() == NULL) return false; @@ -98,7 +100,6 @@ bool FrameGeneratorCapturer::Init() { thread_.reset(); return false; } - thread_->SetPriority(webrtc::kHighPriority); return true; } diff --git a/webrtc/video/full_stack.cc b/webrtc/video/full_stack.cc index 93e682a7bb..9913f3dcbd 100644 --- a/webrtc/video/full_stack.cc +++ b/webrtc/video/full_stack.cc @@ -108,7 +108,7 @@ class VideoAnalyzer : public PacketReceiver, for (uint32_t i = 0; i < num_cores; ++i) { rtc::scoped_ptr thread = - ThreadWrapper::CreateThread(&FrameComparisonThread, this, "Analyzer"); + ThreadWrapper::CreateThread(&FrameComparisonThread, this); EXPECT_TRUE(thread->Start()); comparison_thread_pool_.push_back(thread.release()); } diff --git a/webrtc/video_engine/test/auto_test/source/vie_autotest_win.cc b/webrtc/video_engine/test/auto_test/source/vie_autotest_win.cc index 6e2bac3f9f..a5ef89cdf0 100755 --- a/webrtc/video_engine/test/auto_test/source/vie_autotest_win.cc +++ b/webrtc/video_engine/test/auto_test/source/vie_autotest_win.cc @@ -47,7 +47,8 @@ ViEAutoTestWindowManager::ViEAutoTestWindowManager() _window2(NULL), _terminate(false), _eventThread(webrtc::ThreadWrapper::CreateThread( - EventProcess, this, "ViEAutotestEventThread")), + EventProcess, this, webrtc::kNormalPriority, + "ViEAutotestEventThread")), _crit(*webrtc::CriticalSectionWrapper::CreateCriticalSection()), _hwnd1(NULL), _hwnd2(NULL), diff --git a/webrtc/video_engine/test/libvietest/helpers/vie_fake_camera.cc b/webrtc/video_engine/test/libvietest/helpers/vie_fake_camera.cc index 1c18d498e0..5de0f9ce59 100644 --- a/webrtc/video_engine/test/libvietest/helpers/vie_fake_camera.cc +++ b/webrtc/video_engine/test/libvietest/helpers/vie_fake_camera.cc @@ -61,8 +61,7 @@ bool ViEFakeCamera::StartCameraInNewThread( // Set up a thread which runs the fake camera. The capturer object is // thread-safe. camera_thread_ = webrtc::ThreadWrapper::CreateThread( - StreamVideoFileRepeatedlyIntoCaptureDevice, file_capture_device_, - "StreamVideoFileRepeatedlyIntoCaptureDevice"); + StreamVideoFileRepeatedlyIntoCaptureDevice, file_capture_device_); camera_thread_->Start(); return true; diff --git a/webrtc/video_engine/test/libvietest/helpers/vie_to_file_renderer.cc b/webrtc/video_engine/test/libvietest/helpers/vie_to_file_renderer.cc index d0aee84bd6..640d9c6938 100644 --- a/webrtc/video_engine/test/libvietest/helpers/vie_to_file_renderer.cc +++ b/webrtc/video_engine/test/libvietest/helpers/vie_to_file_renderer.cc @@ -37,7 +37,8 @@ ViEToFileRenderer::ViEToFileRenderer() output_path_(), output_filename_(), thread_(webrtc::ThreadWrapper::CreateThread( - ViEToFileRenderer::RunRenderThread, this, "ViEToFileRendererThread")), + ViEToFileRenderer::RunRenderThread, + this, webrtc::kNormalPriority, "ViEToFileRendererThread")), frame_queue_cs_(webrtc::CriticalSectionWrapper::CreateCriticalSection()), frame_render_event_(webrtc::EventWrapper::Create()), render_queue_(), diff --git a/webrtc/video_engine/test/libvietest/testbed/tb_external_transport.cc b/webrtc/video_engine/test/libvietest/testbed/tb_external_transport.cc index d406985ef4..f62c66079b 100644 --- a/webrtc/video_engine/test/libvietest/testbed/tb_external_transport.cc +++ b/webrtc/video_engine/test/libvietest/testbed/tb_external_transport.cc @@ -41,7 +41,8 @@ TbExternalTransport::TbExternalTransport( receive_channels_(receive_channels), _vieNetwork(vieNetwork), _thread(webrtc::ThreadWrapper::CreateThread( - ViEExternalTransportRun, this, "AutotestTransport")), + ViEExternalTransportRun, this, webrtc::kHighPriority, + "AutotestTransport")), _event(*webrtc::EventWrapper::Create()), _crit(*webrtc::CriticalSectionWrapper::CreateCriticalSection()), _statCrit(*webrtc::CriticalSectionWrapper::CreateCriticalSection()), @@ -76,7 +77,6 @@ TbExternalTransport::TbExternalTransport( srand((int) webrtc::TickTime::MicrosecondTimestamp()); memset(&network_parameters_, 0, sizeof(NetworkParameters)); _thread->Start(); - _thread->SetPriority(webrtc::kHighPriority); } TbExternalTransport::~TbExternalTransport() diff --git a/webrtc/video_engine/vie_capturer.cc b/webrtc/video_engine/vie_capturer.cc index 8a4880435d..456d15de0d 100644 --- a/webrtc/video_engine/vie_capturer.cc +++ b/webrtc/video_engine/vie_capturer.cc @@ -68,8 +68,10 @@ ViECapturer::ViECapturer(int capture_id, module_process_thread_(module_process_thread), capture_id_(capture_id), incoming_frame_cs_(CriticalSectionWrapper::CreateCriticalSection()), - capture_thread_(ThreadWrapper::CreateThread( - ViECaptureThreadFunction, this, "ViECaptureThread")), + capture_thread_(ThreadWrapper::CreateThread(ViECaptureThreadFunction, + this, + kHighPriority, + "ViECaptureThread")), capture_event_(*EventWrapper::Create()), deliver_event_(*EventWrapper::Create()), stop_(0), @@ -91,7 +93,6 @@ ViECapturer::ViECapturer(int capture_id, new OveruseFrameDetector(Clock::GetRealTimeClock(), cpu_overuse_metrics_observer_.get())) { capture_thread_->Start(); - capture_thread_->SetPriority(kHighPriority); module_process_thread_.RegisterModule(overuse_detector_.get()); } diff --git a/webrtc/video_engine/vie_channel.cc b/webrtc/video_engine/vie_channel.cc index a6d075fa40..ee23dcc693 100644 --- a/webrtc/video_engine/vie_channel.cc +++ b/webrtc/video_engine/vie_channel.cc @@ -1839,9 +1839,9 @@ int32_t ViEChannel::StartDecodeThread() { return 0; } decode_thread_ = ThreadWrapper::CreateThread(ChannelDecodeThreadFunction, - this, "DecodingThread"); + this, kHighestPriority, + "DecodingThread"); decode_thread_->Start(); - decode_thread_->SetPriority(kHighestPriority); return 0; } diff --git a/webrtc/voice_engine/test/android/android_test/jni/android_test.cc b/webrtc/voice_engine/test/android/android_test/jni/android_test.cc index b0a26e06a0..1efe0759a1 100644 --- a/webrtc/voice_engine/test/android/android_test/jni/android_test.cc +++ b/webrtc/voice_engine/test/android/android_test/jni/android_test.cc @@ -188,7 +188,8 @@ ThreadTest::~ThreadTest() ThreadTest::ThreadTest() { - _thread = ThreadWrapper::CreateThread(Run, this, "ThreadTest thread"); + _thread = ThreadWrapper::CreateThread(Run, this, kNormalPriority, + "ThreadTest thread"); } bool ThreadTest::Run(void* ptr) diff --git a/webrtc/voice_engine/test/auto_test/fakes/fake_external_transport.cc b/webrtc/voice_engine/test/auto_test/fakes/fake_external_transport.cc index c825ea5861..29156cd577 100644 --- a/webrtc/voice_engine/test/auto_test/fakes/fake_external_transport.cc +++ b/webrtc/voice_engine/test/auto_test/fakes/fake_external_transport.cc @@ -27,10 +27,10 @@ FakeExternalTransport::FakeExternalTransport(webrtc::VoENetwork* ptr) const char* thread_name = "external_thread"; lock_ = webrtc::CriticalSectionWrapper::CreateCriticalSection(); event_ = webrtc::EventWrapper::Create(); - thread_ = webrtc::ThreadWrapper::CreateThread(Run, this, thread_name); + thread_ = webrtc::ThreadWrapper::CreateThread( + Run, this, webrtc::kHighPriority, thread_name); if (thread_) { thread_->Start(); - thread_->SetPriority(webrtc::kHighPriority); } } diff --git a/webrtc/voice_engine/test/auto_test/fixtures/after_initialization_fixture.h b/webrtc/voice_engine/test/auto_test/fixtures/after_initialization_fixture.h index cee5a58f8e..3383a53bd2 100644 --- a/webrtc/voice_engine/test/auto_test/fixtures/after_initialization_fixture.h +++ b/webrtc/voice_engine/test/auto_test/fixtures/after_initialization_fixture.h @@ -29,8 +29,7 @@ class LoopBackTransport : public webrtc::Transport { LoopBackTransport(webrtc::VoENetwork* voe_network) : crit_(webrtc::CriticalSectionWrapper::CreateCriticalSection()), packet_event_(webrtc::EventWrapper::Create()), - thread_(webrtc::ThreadWrapper::CreateThread( - NetworkProcess, this, "LoopBackTransport")), + thread_(webrtc::ThreadWrapper::CreateThread(NetworkProcess, this)), voe_network_(voe_network), transmitted_packets_(0) { thread_->Start(); } diff --git a/webrtc/voice_engine/test/auto_test/voe_stress_test.cc b/webrtc/voice_engine/test/auto_test/voe_stress_test.cc index ab8fffe832..38329eb74f 100644 --- a/webrtc/voice_engine/test/auto_test/voe_stress_test.cc +++ b/webrtc/voice_engine/test/auto_test/voe_stress_test.cc @@ -334,8 +334,9 @@ int VoEStressTest::MultipleThreadsTest() { int rnd(0); // Start extra thread + const char* threadName = "StressTest Extra API Thread"; _ptrExtraApiThread = ThreadWrapper::CreateThread(RunExtraApi, this, - "StressTestExtraApiThread"); + kNormalPriority, threadName); VALIDATE_STRESS(!_ptrExtraApiThread->Start()); // Some possible extensions include: