diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-01-20 13:40:20 +0100 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-01-22 12:41:23 +0000 |
commit | 7961cea6d1041e3e454dae6a1da660b453efd238 (patch) | |
tree | c0eeb4a9ff9ba32986289c1653d9608e53ccb444 /chromium/media/audio | |
parent | b7034d0803538058e5c9d904ef03cf5eab34f6ef (diff) | |
download | qtwebengine-chromium-7961cea6d1041e3e454dae6a1da660b453efd238.tar.gz |
BASELINE: Update Chromium to 78.0.3904.130
Change-Id: If185e0c0061b3437531c97c9c8c78f239352a68b
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/media/audio')
53 files changed, 328 insertions, 140 deletions
diff --git a/chromium/media/audio/BUILD.gn b/chromium/media/audio/BUILD.gn index d8ae83ce63a..35fd1d7da0a 100644 --- a/chromium/media/audio/BUILD.gn +++ b/chromium/media/audio/BUILD.gn @@ -279,6 +279,8 @@ source_set("audio") { "pulse/pulse_util.h", ] + deps += [ "//build:branding_buildflags" ] + if (link_pulseaudio) { configs += [ ":libpulse" ] } else { diff --git a/chromium/media/audio/OWNERS b/chromium/media/audio/OWNERS index b85a81bc9b5..c13e013dfd7 100644 --- a/chromium/media/audio/OWNERS +++ b/chromium/media/audio/OWNERS @@ -1,6 +1,5 @@ tommi@chromium.org olka@chromium.org -maxmorin@chromium.org # Windows henrika@chromium.org diff --git a/chromium/media/audio/alive_checker_unittest.cc b/chromium/media/audio/alive_checker_unittest.cc index ac2bf7342bf..a2f13bd3129 100644 --- a/chromium/media/audio/alive_checker_unittest.cc +++ b/chromium/media/audio/alive_checker_unittest.cc @@ -8,7 +8,7 @@ #include "base/bind.h" #include "base/sequenced_task_runner.h" #include "base/synchronization/waitable_event.h" -#include "base/test/scoped_task_environment.h" +#include "base/test/task_environment.h" #include "base/threading/thread.h" #include "media/audio/alive_checker.h" #include "testing/gtest/include/gtest/gtest.h" @@ -159,7 +159,7 @@ class AliveCheckerTest : public testing::Test { } // The test task environment. - base::test::ScopedTaskEnvironment scoped_task_environment_; + base::test::TaskEnvironment task_environment_; // The thread the checker is run on. base::Thread alive_checker_thread_; diff --git a/chromium/media/audio/android/audio_manager_android.cc b/chromium/media/audio/android/audio_manager_android.cc index 79bebf1a8ff..5d74f7e662b 100644 --- a/chromium/media/audio/android/audio_manager_android.cc +++ b/chromium/media/audio/android/audio_manager_android.cc @@ -311,6 +311,13 @@ bool AudioManagerAndroid::HasOutputVolumeOverride(double* out_volume) const { return output_volume_override_set_; } +base::TimeDelta AudioManagerAndroid::GetOutputLatency() { + DCHECK(GetTaskRunner()->BelongsToCurrentThread()); + JNIEnv* env = AttachCurrentThread(); + return base::TimeDelta::FromMilliseconds( + Java_AudioManagerAndroid_getOutputLatency(env, GetJavaAudioManager())); +} + AudioParameters AudioManagerAndroid::GetPreferredOutputStreamParameters( const std::string& output_device_id, const AudioParameters& input_params) { diff --git a/chromium/media/audio/android/audio_manager_android.h b/chromium/media/audio/android/audio_manager_android.h index 5075ed514f1..df27f8fafe2 100644 --- a/chromium/media/audio/android/audio_manager_android.h +++ b/chromium/media/audio/android/audio_manager_android.h @@ -81,6 +81,13 @@ class MEDIA_EXPORT AudioManagerAndroid : public AudioManagerBase { void SetOutputVolumeOverride(double volume); bool HasOutputVolumeOverride(double* out_volume) const; + // Get the latency introduced by the hardware. It relies on + // AudioManager.getOutputLatency, which is both (a) hidden and (b) not + // guaranteed to be meaningful. Do not use this, except in the context of + // b/80326798 to adjust (hackily) for hardware latency that OpenSLES isn't + // otherwise accounting for. + base::TimeDelta GetOutputLatency(); + protected: void ShutdownOnAudioThread() override; AudioParameters GetPreferredOutputStreamParameters( diff --git a/chromium/media/audio/android/opensles_output.cc b/chromium/media/audio/android/opensles_output.cc index 594174c6667..e4e9274e0cf 100644 --- a/chromium/media/audio/android/opensles_output.cc +++ b/chromium/media/audio/android/opensles_output.cc @@ -5,6 +5,7 @@ #include "media/audio/android/opensles_output.h" #include "base/android/build_info.h" +#include "base/feature_list.h" #include "base/logging.h" #include "base/stl_util.h" #include "base/strings/string_util.h" @@ -13,6 +14,7 @@ #include "media/audio/android/audio_manager_android.h" #include "media/base/audio_sample_types.h" #include "media/base/audio_timestamp_helper.h" +#include "media/base/media_switches.h" #define LOG_ON_FAILURE_AND_RETURN(op, ...) \ do { \ @@ -136,6 +138,8 @@ void OpenSLESOutputStream::Start(AudioSourceCallback* callback) { DCHECK(!callback_); callback_ = callback; + CacheHardwareLatencyIfNeeded(); + // Fill audio data with silence to avoid start-up glitches. Don't use // FillBufferQueueNoLock() since it can trigger recursive entry if an error // occurs while writing into the stream. See http://crbug.com/624877. @@ -400,6 +404,7 @@ void OpenSLESOutputStream::FillBufferQueueNoLock() { // Calculate the position relative to the number of frames written. uint32_t position_in_ms = 0; SLresult err = (*player_)->GetPosition(player_, &position_in_ms); + // Given the position of the playback head, compute the approximate number of // frames that have been queued to the buffer but not yet played out. // Note that the value returned by GetFramesToTarget() is negative because @@ -409,7 +414,7 @@ void OpenSLESOutputStream::FillBufferQueueNoLock() { const int delay_frames = err == SL_RESULT_SUCCESS ? -delay_calculator_.GetFramesToTarget( - base::TimeDelta::FromMilliseconds(position_in_ms)) + AdjustPositionForHardwareLatency(position_in_ms)) : 0; DCHECK_GE(delay_frames, 0); @@ -480,4 +485,23 @@ void OpenSLESOutputStream::HandleError(SLresult error) { callback_->OnError(); } +void OpenSLESOutputStream::CacheHardwareLatencyIfNeeded() { + // If the feature is turned off, then leave it at its default (zero) value. + // In general, GetOutputLatency is not reliable. + if (!base::FeatureList::IsEnabled(kUseAudioLatencyFromHAL)) + return; + + hardware_latency_ = audio_manager_->GetOutputLatency(); +} + +base::TimeDelta OpenSLESOutputStream::AdjustPositionForHardwareLatency( + uint32_t position_in_ms) { + base::TimeDelta position = base::TimeDelta::FromMilliseconds(position_in_ms); + + if (position <= hardware_latency_) + return base::TimeDelta::FromMilliseconds(0); + + return position - hardware_latency_; +} + } // namespace media diff --git a/chromium/media/audio/android/opensles_output.h b/chromium/media/audio/android/opensles_output.h index 4c1cec16350..aafc81657d5 100644 --- a/chromium/media/audio/android/opensles_output.h +++ b/chromium/media/audio/android/opensles_output.h @@ -77,6 +77,13 @@ class OpenSLESOutputStream : public MuteableAudioOutputStream { // the attached AudioOutputCallback::OnError(). void HandleError(SLresult error); + // Cache |hardware_latency_in_ms_| by asking |audio_manager_| for it, if the + // kUseAudioLatencyFromHAL is enabled. + void CacheHardwareLatencyIfNeeded(); + + // Adjust |position_in_ms| for hardware latency, and return the result. + base::TimeDelta AdjustPositionForHardwareLatency(uint32_t position_in_ms); + base::ThreadChecker thread_checker_; // Protects |callback_|, |active_buffer_index_|, |audio_data_|, @@ -140,6 +147,10 @@ class OpenSLESOutputStream : public MuteableAudioOutputStream { // Container for retrieving data from AudioSourceCallback::OnMoreData(). std::unique_ptr<AudioBus> audio_bus_; + // Adjustment for hardware latency. Needed for some cast targets, since + // OpenSLES's GetPosition doesn't properly account for HAL latency. + base::TimeDelta hardware_latency_; + DISALLOW_COPY_AND_ASSIGN(OpenSLESOutputStream); }; diff --git a/chromium/media/audio/audio_debug_file_writer.h b/chromium/media/audio/audio_debug_file_writer.h index 66f0f91d910..b128025dc04 100644 --- a/chromium/media/audio/audio_debug_file_writer.h +++ b/chromium/media/audio/audio_debug_file_writer.h @@ -63,8 +63,9 @@ class MEDIA_EXPORT AudioDebugFileWriter { // The task runner to do file output operations on. const scoped_refptr<base::SequencedTaskRunner> file_task_runner_ = - base::CreateSequencedTaskRunnerWithTraits( - {base::MayBlock(), base::TaskPriority::BEST_EFFORT, + base::CreateSequencedTaskRunner( + {base::ThreadPool(), base::MayBlock(), + base::TaskPriority::BEST_EFFORT, base::TaskShutdownBehavior::BLOCK_SHUTDOWN}); AudioFileWriterUniquePtr file_writer_; diff --git a/chromium/media/audio/audio_debug_file_writer_unittest.cc b/chromium/media/audio/audio_debug_file_writer_unittest.cc index 4d498690b43..5f8974da252 100644 --- a/chromium/media/audio/audio_debug_file_writer_unittest.cc +++ b/chromium/media/audio/audio_debug_file_writer_unittest.cc @@ -11,7 +11,7 @@ #include "base/memory/ptr_util.h" #include "base/synchronization/waitable_event.h" #include "base/sys_byteorder.h" -#include "base/test/scoped_task_environment.h" +#include "base/test/task_environment.h" #include "base/threading/thread.h" #include "media/audio/audio_debug_file_writer.h" #include "media/base/audio_bus.h" @@ -50,10 +50,9 @@ class AudioDebugFileWriterTest : public testing::TestWithParam<AudioDebugFileWriterTestData> { public: explicit AudioDebugFileWriterTest( - base::test::ScopedTaskEnvironment::ThreadPoolExecutionMode execution_mode) - : scoped_task_environment_( - base::test::ScopedTaskEnvironment::MainThreadType::DEFAULT, - execution_mode), + base::test::TaskEnvironment::ThreadPoolExecutionMode execution_mode) + : task_environment_(base::test::TaskEnvironment::MainThreadType::DEFAULT, + execution_mode), params_(AudioParameters::Format::AUDIO_PCM_LINEAR, std::get<0>(GetParam()), std::get<1>(GetParam()), @@ -67,8 +66,7 @@ class AudioDebugFileWriterTest } AudioDebugFileWriterTest() : AudioDebugFileWriterTest( - base::test::ScopedTaskEnvironment::ThreadPoolExecutionMode::ASYNC) { - } + base::test::TaskEnvironment::ThreadPoolExecutionMode::ASYNC) {} protected: virtual ~AudioDebugFileWriterTest() = default; @@ -192,7 +190,7 @@ class AudioDebugFileWriterTest debug_writer_->Stop(); - scoped_task_environment_.RunUntilIdle(); + task_environment_.RunUntilIdle(); VerifyRecording(file_path); @@ -206,7 +204,7 @@ class AudioDebugFileWriterTest protected: // The test task environment. - base::test::ScopedTaskEnvironment scoped_task_environment_; + base::test::TaskEnvironment task_environment_; // Writer under test. std::unique_ptr<AudioDebugFileWriter> debug_writer_; @@ -232,8 +230,8 @@ class AudioDebugFileWriterBehavioralTest : public AudioDebugFileWriterTest {}; class AudioDebugFileWriterSingleThreadTest : public AudioDebugFileWriterTest { public: AudioDebugFileWriterSingleThreadTest() - : AudioDebugFileWriterTest(base::test::ScopedTaskEnvironment:: - ThreadPoolExecutionMode::QUEUED) {} + : AudioDebugFileWriterTest( + base::test::TaskEnvironment::ThreadPoolExecutionMode::QUEUED) {} }; TEST_P(AudioDebugFileWriterTest, WaveRecordingTest) { @@ -256,7 +254,7 @@ TEST_P(AudioDebugFileWriterSingleThreadTest, debug_writer_.reset(); - scoped_task_environment_.RunUntilIdle(); + task_environment_.RunUntilIdle(); VerifyRecording(file_path); diff --git a/chromium/media/audio/audio_debug_recording_helper_unittest.cc b/chromium/media/audio/audio_debug_recording_helper_unittest.cc index 9bd581d8f1a..8798fb00fe2 100644 --- a/chromium/media/audio/audio_debug_recording_helper_unittest.cc +++ b/chromium/media/audio/audio_debug_recording_helper_unittest.cc @@ -15,7 +15,7 @@ #include "base/memory/ptr_util.h" #include "base/run_loop.h" #include "base/single_thread_task_runner.h" -#include "base/test/scoped_task_environment.h" +#include "base/test/task_environment.h" #include "media/base/audio_bus.h" #include "media/base/audio_sample_types.h" #include "testing/gmock/include/gmock/gmock.h" @@ -112,7 +112,7 @@ class AudioDebugRecordingHelperTest : public ::testing::Test { const AudioParameters& params, base::OnceClosure on_destruction_closure) { return std::make_unique<AudioDebugRecordingHelperUnderTest>( - params, scoped_task_environment_.GetMainThreadTaskRunner(), + params, task_environment_.GetMainThreadTaskRunner(), std::move(on_destruction_closure)); } @@ -146,7 +146,7 @@ class AudioDebugRecordingHelperTest : public ::testing::Test { const uint32_t id_ = 1; // The test task environment. - base::test::ScopedTaskEnvironment scoped_task_environment_; + base::test::TaskEnvironment task_environment_; private: DISALLOW_COPY_AND_ASSIGN(AudioDebugRecordingHelperTest); diff --git a/chromium/media/audio/audio_debug_recording_manager_unittest.cc b/chromium/media/audio/audio_debug_recording_manager_unittest.cc index 014491b59de..46b977fd92e 100644 --- a/chromium/media/audio/audio_debug_recording_manager_unittest.cc +++ b/chromium/media/audio/audio_debug_recording_manager_unittest.cc @@ -9,7 +9,7 @@ #include "base/bind.h" #include "base/single_thread_task_runner.h" -#include "base/test/scoped_task_environment.h" +#include "base/test/task_environment.h" #include "media/audio/audio_debug_recording_helper.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" @@ -114,7 +114,7 @@ class AudioDebugRecordingManagerUnderTest : public AudioDebugRecordingManager { class AudioDebugRecordingManagerTest : public ::testing::Test { public: AudioDebugRecordingManagerTest() - : manager_(scoped_task_environment_.GetMainThreadTaskRunner()) {} + : manager_(task_environment_.GetMainThreadTaskRunner()) {} ~AudioDebugRecordingManagerTest() override = default; @@ -127,7 +127,7 @@ class AudioDebugRecordingManagerTest : public ::testing::Test { protected: // The test task environment. - base::test::ScopedTaskEnvironment scoped_task_environment_; + base::test::TaskEnvironment task_environment_; AudioDebugRecordingManagerUnderTest manager_; diff --git a/chromium/media/audio/audio_debug_recording_session_impl.cc b/chromium/media/audio/audio_debug_recording_session_impl.cc index 125e7a15f2f..2d433cd61d0 100644 --- a/chromium/media/audio/audio_debug_recording_session_impl.cc +++ b/chromium/media/audio/audio_debug_recording_session_impl.cc @@ -58,9 +58,9 @@ void CreateWavFile(const base::FilePath& debug_recording_file_path, return; } - base::PostTaskWithTraitsAndReplyWithResult( + base::PostTaskAndReplyWithResult( FROM_HERE, - {base::MayBlock(), base::TaskPriority::BEST_EFFORT, + {base::ThreadPool(), base::MayBlock(), base::TaskPriority::BEST_EFFORT, base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN}, base::BindOnce( [](const base::FilePath& file_name) { diff --git a/chromium/media/audio/audio_debug_recording_session_impl_unittest.cc b/chromium/media/audio/audio_debug_recording_session_impl_unittest.cc index 47067985e49..c5f7149ff2a 100644 --- a/chromium/media/audio/audio_debug_recording_session_impl_unittest.cc +++ b/chromium/media/audio/audio_debug_recording_session_impl_unittest.cc @@ -10,7 +10,7 @@ #include "base/files/file_util.h" #include "base/files/scoped_temp_dir.h" #include "base/strings/string_number_conversions.h" -#include "base/test/scoped_task_environment.h" +#include "base/test/task_environment.h" #include "build/build_config.h" #include "media/audio/audio_debug_recording_test.h" #include "media/audio/mock_audio_debug_recording_manager.h" @@ -125,7 +125,7 @@ TEST_F(AudioDebugRecordingSessionImplTest, CreateWavFileCreatesExpectedFiles) { CreateDebugRecordingSession(); // Wait for files to be created. - scoped_task_environment_.RunUntilIdle(); + task_environment_.RunUntilIdle(); // Check that expected files were created. base::FilePath input_recording_filename(GetFileName(kInput, kId)); diff --git a/chromium/media/audio/audio_debug_recording_test.h b/chromium/media/audio/audio_debug_recording_test.h index 4191b937399..1ccae83206e 100644 --- a/chromium/media/audio/audio_debug_recording_test.h +++ b/chromium/media/audio/audio_debug_recording_test.h @@ -7,7 +7,7 @@ #include <memory> -#include "base/test/scoped_task_environment.h" +#include "base/test/task_environment.h" #include "media/base/media_export.h" #include "testing/gtest/include/gtest/gtest.h" @@ -28,7 +28,7 @@ class AudioDebugRecordingTest : public testing::Test { void ShutdownAudioManager(); void InitializeAudioDebugRecordingManager(); - base::test::ScopedTaskEnvironment scoped_task_environment_; + base::test::TaskEnvironment task_environment_; std::unique_ptr<MockAudioManager> mock_audio_manager_; MockAudioDebugRecordingManager* mock_debug_recording_manager_; diff --git a/chromium/media/audio/audio_device_description.cc b/chromium/media/audio/audio_device_description.cc index 87f8f37d366..3bdc7be1612 100644 --- a/chromium/media/audio/audio_device_description.cc +++ b/chromium/media/audio/audio_device_description.cc @@ -37,9 +37,9 @@ bool AudioDeviceDescription::IsLoopbackDevice(const std::string& device_id) { // static bool AudioDeviceDescription::UseSessionIdToSelectDevice( - int session_id, + const base::UnguessableToken& session_id, const std::string& device_id) { - return session_id && device_id.empty(); + return !session_id.is_empty() && device_id.empty(); } // static diff --git a/chromium/media/audio/audio_device_description.h b/chromium/media/audio/audio_device_description.h index 970ec0e822d..ccba18edbbb 100644 --- a/chromium/media/audio/audio_device_description.h +++ b/chromium/media/audio/audio_device_description.h @@ -8,6 +8,7 @@ #include <string> #include <vector> +#include "base/unguessable_token.h" #include "media/base/media_export.h" namespace media { @@ -50,8 +51,9 @@ struct MEDIA_EXPORT AudioDeviceDescription { // If |device_id| is empty and |session_id| is nonzero, output device // associated with the opened input device designated by |session_id| should // be used. - static bool UseSessionIdToSelectDevice(int session_id, - const std::string& device_id); + static bool UseSessionIdToSelectDevice( + const base::UnguessableToken& session_id, + const std::string& device_id); // The functions dealing with localization are not reliable in the audio // service, and should be avoided there. diff --git a/chromium/media/audio/audio_features.cc b/chromium/media/audio/audio_features.cc index a36d1fcc840..dfbeaad8e21 100644 --- a/chromium/media/audio/audio_features.cc +++ b/chromium/media/audio/audio_features.cc @@ -9,7 +9,13 @@ namespace features { // When the audio service in a separate process, kill it when a hang is // detected. It will be restarted when needed. const base::Feature kAudioServiceOutOfProcessKillAtHang{ - "AudioServiceOutOfProcessKillAtHang", base::FEATURE_DISABLED_BY_DEFAULT}; + "AudioServiceOutOfProcessKillAtHang", +#if defined(OS_WIN) || defined(OS_MACOSX) + base::FEATURE_ENABLED_BY_DEFAULT +#else + base::FEATURE_DISABLED_BY_DEFAULT +#endif +}; // If enabled, base::DumpWithoutCrashing is called whenever an audio service // hang is detected. diff --git a/chromium/media/audio/audio_input_controller_unittest.cc b/chromium/media/audio/audio_input_controller_unittest.cc index 00a3b5ab6c0..dbf5e29b31e 100644 --- a/chromium/media/audio/audio_input_controller_unittest.cc +++ b/chromium/media/audio/audio_input_controller_unittest.cc @@ -8,7 +8,7 @@ #include "base/macros.h" #include "base/run_loop.h" -#include "base/test/scoped_task_environment.h" +#include "base/test/task_environment.h" #include "base/timer/timer.h" #include "media/audio/audio_manager.h" #include "media/audio/fake_audio_input_stream.h" @@ -144,7 +144,7 @@ class AudioInputControllerTest : public testing::TestWithParam<bool> { run_loop.Run(); } - base::test::ScopedTaskEnvironment scoped_task_environment_; + base::test::SingleThreadTaskEnvironment task_environment_; // Parameterize tests to run AudioInputController either on audio thread // (synchronously), or on a different thread (non-blocking). diff --git a/chromium/media/audio/audio_input_device_unittest.cc b/chromium/media/audio/audio_input_device_unittest.cc index 01fa2add753..942097505b8 100644 --- a/chromium/media/audio/audio_input_device_unittest.cc +++ b/chromium/media/audio/audio_input_device_unittest.cc @@ -8,12 +8,11 @@ #include "base/memory/ptr_util.h" #include "base/memory/shared_memory.h" -#include "base/message_loop/message_loop.h" #include "base/process/process_handle.h" #include "base/run_loop.h" #include "base/single_thread_task_runner.h" #include "base/sync_socket.h" -#include "base/test/scoped_task_environment.h" +#include "base/test/task_environment.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gmock_mutant.h" #include "testing/gtest/include/gtest/gtest.h" @@ -67,7 +66,8 @@ class MockCaptureCallback : public AudioCapturerSource::CaptureCallback { // Regular construction. TEST(AudioInputDeviceTest, Noop) { - base::MessageLoopForIO io_loop; + base::test::SingleThreadTaskEnvironment task_environment( + base::test::SingleThreadTaskEnvironment::MainThreadType::IO); MockAudioInputIPC* input_ipc = new MockAudioInputIPC(); scoped_refptr<AudioInputDevice> device(new AudioInputDevice( base::WrapUnique(input_ipc), AudioInputDevice::Purpose::kUserInput)); @@ -117,7 +117,7 @@ TEST(AudioInputDeviceTest, CreateStream) { shared_memory.region.Duplicate(); ASSERT_TRUE(duplicated_shared_memory_region.IsValid()); - base::test::ScopedTaskEnvironment ste; + base::test::TaskEnvironment ste; MockCaptureCallback callback; MockAudioInputIPC* input_ipc = new MockAudioInputIPC(); scoped_refptr<AudioInputDevice> device(new AudioInputDevice( diff --git a/chromium/media/audio/audio_input_ipc.h b/chromium/media/audio/audio_input_ipc.h index 4abfcf01b6d..b8defb609bd 100644 --- a/chromium/media/audio/audio_input_ipc.h +++ b/chromium/media/audio/audio_input_ipc.h @@ -22,7 +22,7 @@ class AudioProcessorControls; class MEDIA_EXPORT AudioInputIPCDelegate { public: // Called when an AudioInputController has been created. - // See media/mojo/interfaces/audio_data_pipe.mojom for documentation of + // See media/mojo/mojom/audio_data_pipe.mojom for documentation of // |handle| and |socket_handle|. virtual void OnStreamCreated( base::ReadOnlySharedMemoryRegion shared_memory_region, diff --git a/chromium/media/audio/audio_input_sync_writer_unittest.cc b/chromium/media/audio/audio_input_sync_writer_unittest.cc index c887c331c1b..79583f6759b 100644 --- a/chromium/media/audio/audio_input_sync_writer_unittest.cc +++ b/chromium/media/audio/audio_input_sync_writer_unittest.cc @@ -17,7 +17,7 @@ #include "base/memory/read_only_shared_memory_region.h" #include "base/sync_socket.h" #include "base/test/mock_callback.h" -#include "base/test/scoped_task_environment.h" +#include "base/test/task_environment.h" #include "base/time/time.h" #include "build/build_config.h" #include "media/base/audio_bus.h" @@ -155,7 +155,7 @@ class AudioInputSyncWriterTest : public testing::Test { using MockLogger = base::MockCallback<base::RepeatingCallback<void(const std::string&)>>; - base::test::ScopedTaskEnvironment env_; + base::test::TaskEnvironment env_; MockLogger mock_logger_; std::unique_ptr<AudioInputSyncWriter> writer_; MockCancelableSyncSocket* socket_; diff --git a/chromium/media/audio/audio_input_unittest.cc b/chromium/media/audio/audio_input_unittest.cc index 2e908188daf..3763e798e06 100644 --- a/chromium/media/audio/audio_input_unittest.cc +++ b/chromium/media/audio/audio_input_unittest.cc @@ -8,7 +8,7 @@ #include "base/callback.h" #include "base/environment.h" #include "base/macros.h" -#include "base/message_loop/message_loop.h" +#include "base/message_loop/message_pump_type.h" #include "base/run_loop.h" #include "base/test/test_message_loop.h" #include "base/threading/platform_thread.h" @@ -69,7 +69,7 @@ class TestInputCallback : public AudioInputStream::AudioInputCallback { class AudioInputTest : public testing::Test { public: AudioInputTest() - : message_loop_(base::MessageLoop::TYPE_UI), + : message_loop_(base::MessagePumpType::UI), audio_manager_(AudioManager::CreateForTesting( std::make_unique<TestAudioThread>())), audio_input_stream_(NULL) { diff --git a/chromium/media/audio/audio_io.h b/chromium/media/audio/audio_io.h index 8f56ef08512..5ceb326205c 100644 --- a/chromium/media/audio/audio_io.h +++ b/chromium/media/audio/audio_io.h @@ -110,6 +110,9 @@ class MEDIA_EXPORT AudioOutputStream { // Close the stream. // After calling this method, the object should not be used anymore. + // After calling this method, no further AudioSourceCallback methods + // should be called on the callback object that was supplied to Start() + // by the AudioOutputStream implementation. virtual void Close() = 0; // Flushes the stream. This should only be called if the stream is not diff --git a/chromium/media/audio/audio_low_latency_input_output_unittest.cc b/chromium/media/audio/audio_low_latency_input_output_unittest.cc index 4ed02eccb21..c1042ccbdbc 100644 --- a/chromium/media/audio/audio_low_latency_input_output_unittest.cc +++ b/chromium/media/audio/audio_low_latency_input_output_unittest.cc @@ -16,7 +16,7 @@ #include "base/run_loop.h" #include "base/single_thread_task_runner.h" #include "base/synchronization/lock.h" -#include "base/test/scoped_task_environment.h" +#include "base/test/task_environment.h" #include "base/test/test_timeouts.h" #include "base/threading/thread_task_runner_handle.h" #include "base/time/time.h" @@ -87,8 +87,8 @@ class AudioLowLatencyInputOutputTest : public testing::Test { } private: - base::test::ScopedTaskEnvironment task_environment_{ - base::test::ScopedTaskEnvironment::MainThreadType::UI}; + base::test::TaskEnvironment task_environment_{ + base::test::TaskEnvironment::MainThreadType::UI}; std::unique_ptr<AudioManager> audio_manager_; DISALLOW_COPY_AND_ASSIGN(AudioLowLatencyInputOutputTest); diff --git a/chromium/media/audio/audio_output_device.h b/chromium/media/audio/audio_output_device.h index ff0ea95e6c8..0a305332677 100644 --- a/chromium/media/audio/audio_output_device.h +++ b/chromium/media/audio/audio_output_device.h @@ -199,7 +199,7 @@ class MEDIA_EXPORT AudioOutputDevice : public AudioRendererSink, // The media session ID used to identify which input device to be started. // Only used by Unified IO. - int session_id_; + base::UnguessableToken session_id_; // ID of hardware output device to be used (provided |session_id_| is zero) const std::string device_id_; diff --git a/chromium/media/audio/audio_output_device_unittest.cc b/chromium/media/audio/audio_output_device_unittest.cc index 90a51bdfe97..88ec75c89ca 100644 --- a/chromium/media/audio/audio_output_device_unittest.cc +++ b/chromium/media/audio/audio_output_device_unittest.cc @@ -19,7 +19,7 @@ #include "base/single_thread_task_runner.h" #include "base/sync_socket.h" #include "base/task_runner.h" -#include "base/test/scoped_task_environment.h" +#include "base/test/task_environment.h" #include "base/threading/thread_task_runner_handle.h" #include "build/build_config.h" #include "media/audio/audio_sync_reader.h" @@ -76,7 +76,7 @@ class MockAudioOutputIPC : public AudioOutputIPC { MOCK_METHOD3(RequestDeviceAuthorization, void(AudioOutputIPCDelegate* delegate, - int session_id, + const base::UnguessableToken& session_id, const std::string& device_id)); MOCK_METHOD3( CreateStream, @@ -109,8 +109,8 @@ class AudioOutputDeviceTest : public testing::Test { MOCK_METHOD1(OnDeviceInfoReceived, void(OutputDeviceInfo)); protected: - base::test::ScopedTaskEnvironment task_env_{ - base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME}; + base::test::TaskEnvironment task_env_{ + base::test::TaskEnvironment::TimeSource::MOCK_TIME}; AudioParameters default_audio_parameters_; StrictMock<MockRenderCallback> callback_; MockAudioOutputIPC* audio_output_ipc_; // owned by audio_device_ @@ -148,13 +148,14 @@ void AudioOutputDeviceTest::CreateDevice(const std::string& device_id, audio_output_ipc_ = new NiceMock<MockAudioOutputIPC>(); audio_device_ = new AudioOutputDevice( base::WrapUnique(audio_output_ipc_), task_env_.GetMainThreadTaskRunner(), - AudioSinkParameters(0, device_id), timeout); + AudioSinkParameters(base::UnguessableToken(), device_id), timeout); } void AudioOutputDeviceTest::SetDevice(const std::string& device_id) { CreateDevice(device_id); EXPECT_CALL(*audio_output_ipc_, - RequestDeviceAuthorization(audio_device_.get(), 0, device_id)); + RequestDeviceAuthorization(audio_device_.get(), + base::UnguessableToken(), device_id)); audio_device_->RequestDeviceAuthorization(); task_env_.FastForwardBy(base::TimeDelta()); @@ -277,7 +278,8 @@ TEST_F(AudioOutputDeviceTest, NonDefaultStartStopStartStop) { StopAudioDevice(); EXPECT_CALL(*audio_output_ipc_, - RequestDeviceAuthorization(audio_device_.get(), 0, _)); + RequestDeviceAuthorization(audio_device_.get(), + base::UnguessableToken(), _)); StartAudioDevice(); // Simulate reply from browser ReceiveAuthorization(OUTPUT_DEVICE_STATUS_OK); @@ -307,10 +309,12 @@ TEST_F(AudioOutputDeviceTest, AuthorizationFailsBeforeInitialize_NoError) { audio_output_ipc_ = new NiceMock<MockAudioOutputIPC>(); audio_device_ = new AudioOutputDevice( base::WrapUnique(audio_output_ipc_), task_env_.GetMainThreadTaskRunner(), - AudioSinkParameters(0, kDefaultDeviceId), kAuthTimeout); + AudioSinkParameters(base::UnguessableToken(), kDefaultDeviceId), + kAuthTimeout); EXPECT_CALL( *audio_output_ipc_, - RequestDeviceAuthorization(audio_device_.get(), 0, kDefaultDeviceId)); + RequestDeviceAuthorization(audio_device_.get(), base::UnguessableToken(), + kDefaultDeviceId)); audio_device_->RequestDeviceAuthorization(); audio_device_->Initialize(default_audio_parameters_, &callback_); @@ -329,7 +333,8 @@ TEST_F(AudioOutputDeviceTest, AuthorizationTimedOut) { CreateDevice(kNonDefaultDeviceId); EXPECT_CALL( *audio_output_ipc_, - RequestDeviceAuthorization(audio_device_.get(), 0, kNonDefaultDeviceId)); + RequestDeviceAuthorization(audio_device_.get(), base::UnguessableToken(), + kNonDefaultDeviceId)); EXPECT_CALL(*audio_output_ipc_, CloseStream()); // Request authorization; no reply from the browser. @@ -344,9 +349,10 @@ TEST_F(AudioOutputDeviceTest, AuthorizationTimedOut) { TEST_F(AudioOutputDeviceTest, GetOutputDeviceInfoAsync_Error) { CreateDevice(kUnauthorizedDeviceId, base::TimeDelta()); - EXPECT_CALL(*audio_output_ipc_, - RequestDeviceAuthorization(audio_device_.get(), 0, - kUnauthorizedDeviceId)); + EXPECT_CALL( + *audio_output_ipc_, + RequestDeviceAuthorization(audio_device_.get(), base::UnguessableToken(), + kUnauthorizedDeviceId)); audio_device_->RequestDeviceAuthorization(); audio_device_->GetOutputDeviceInfoAsync(base::BindOnce( &AudioOutputDeviceTest::OnDeviceInfoReceived, base::Unretained(this))); @@ -372,7 +378,8 @@ TEST_F(AudioOutputDeviceTest, GetOutputDeviceInfoAsync_Okay) { CreateDevice(kDefaultDeviceId, base::TimeDelta()); EXPECT_CALL( *audio_output_ipc_, - RequestDeviceAuthorization(audio_device_.get(), 0, kDefaultDeviceId)); + RequestDeviceAuthorization(audio_device_.get(), base::UnguessableToken(), + kDefaultDeviceId)); audio_device_->RequestDeviceAuthorization(); audio_device_->GetOutputDeviceInfoAsync(base::BindOnce( &AudioOutputDeviceTest::OnDeviceInfoReceived, base::Unretained(this))); @@ -455,13 +462,15 @@ TEST_F(AudioOutputDeviceTest, MAYBE_VerifyDataFlow) { auto* ipc = new MockAudioOutputIPC(); // owned by |audio_device|. auto audio_device = base::MakeRefCounted<AudioOutputDevice>( base::WrapUnique(ipc), task_env_.GetMainThreadTaskRunner(), - AudioSinkParameters(0, kDefaultDeviceId), kAuthTimeout); + AudioSinkParameters(base::UnguessableToken(), kDefaultDeviceId), + kAuthTimeout); // Start a stream. audio_device->RequestDeviceAuthorization(); audio_device->Initialize(params, &env.callback); audio_device->Start(); - EXPECT_CALL(*ipc, RequestDeviceAuthorization(audio_device.get(), 0, + EXPECT_CALL(*ipc, RequestDeviceAuthorization(audio_device.get(), + base::UnguessableToken(), kDefaultDeviceId)); EXPECT_CALL(*ipc, CreateStream(audio_device.get(), _, _)); EXPECT_CALL(*ipc, PlayStream()); @@ -517,12 +526,14 @@ TEST_F(AudioOutputDeviceTest, CreateNondefaultDevice) { auto* ipc = new MockAudioOutputIPC(); // owned by |audio_device|. auto audio_device = base::MakeRefCounted<AudioOutputDevice>( base::WrapUnique(ipc), task_env_.GetMainThreadTaskRunner(), - AudioSinkParameters(0, kNonDefaultDeviceId), kAuthTimeout); + AudioSinkParameters(base::UnguessableToken(), kNonDefaultDeviceId), + kAuthTimeout); audio_device->RequestDeviceAuthorization(); audio_device->Initialize(params, &env.callback); audio_device->Start(); - EXPECT_CALL(*ipc, RequestDeviceAuthorization(audio_device.get(), 0, + EXPECT_CALL(*ipc, RequestDeviceAuthorization(audio_device.get(), + base::UnguessableToken(), kNonDefaultDeviceId)); EXPECT_CALL(*ipc, CreateStream(audio_device.get(), _, _)); EXPECT_CALL(*ipc, PlayStream()); @@ -552,13 +563,15 @@ TEST_F(AudioOutputDeviceTest, CreateBitStreamStream) { auto* ipc = new MockAudioOutputIPC(); // owned by |audio_device|. auto audio_device = base::MakeRefCounted<AudioOutputDevice>( base::WrapUnique(ipc), task_env_.GetMainThreadTaskRunner(), - AudioSinkParameters(0, kNonDefaultDeviceId), kAuthTimeout); + AudioSinkParameters(base::UnguessableToken(), kNonDefaultDeviceId), + kAuthTimeout); // Start a stream. audio_device->RequestDeviceAuthorization(); audio_device->Initialize(params, &env.callback); audio_device->Start(); - EXPECT_CALL(*ipc, RequestDeviceAuthorization(audio_device.get(), 0, + EXPECT_CALL(*ipc, RequestDeviceAuthorization(audio_device.get(), + base::UnguessableToken(), kNonDefaultDeviceId)); EXPECT_CALL(*ipc, CreateStream(audio_device.get(), _, _)); EXPECT_CALL(*ipc, PlayStream()); diff --git a/chromium/media/audio/audio_output_ipc.h b/chromium/media/audio/audio_output_ipc.h index f41054e573b..abe70531502 100644 --- a/chromium/media/audio/audio_output_ipc.h +++ b/chromium/media/audio/audio_output_ipc.h @@ -32,7 +32,7 @@ class MEDIA_EXPORT AudioOutputIPCDelegate { const std::string& matched_device_id) = 0; // Called when an audio stream has been created. - // See media/mojo/interfaces/audio_data_pipe.mojom for documentation of + // See media/mojo/mojom/audio_data_pipe.mojom for documentation of // |handle| and |socket_handle|. |playing_automatically| indicates if the // AudioOutputIPCDelegate is playing right away due to an earlier call to // Play(); @@ -71,9 +71,10 @@ class MEDIA_EXPORT AudioOutputIPC { // the default device. // Once the authorization process is complete, the implementation will // notify |delegate| by calling OnDeviceAuthorized(). - virtual void RequestDeviceAuthorization(AudioOutputIPCDelegate* delegate, - int session_id, - const std::string& device_id) = 0; + virtual void RequestDeviceAuthorization( + AudioOutputIPCDelegate* delegate, + const base::UnguessableToken& session_id, + const std::string& device_id) = 0; // Sends a request to create an AudioOutputController object in the peer // process and configures it to use the specified audio |params| including diff --git a/chromium/media/audio/audio_output_proxy_unittest.cc b/chromium/media/audio/audio_output_proxy_unittest.cc index e4ba36f2852..e56d1cef484 100644 --- a/chromium/media/audio/audio_output_proxy_unittest.cc +++ b/chromium/media/audio/audio_output_proxy_unittest.cc @@ -11,7 +11,7 @@ #include "base/bind.h" #include "base/run_loop.h" #include "base/single_thread_task_runner.h" -#include "base/test/scoped_task_environment.h" +#include "base/test/task_environment.h" #include "base/threading/thread_task_runner_handle.h" #include "build/build_config.h" #include "media/audio/audio_manager.h" @@ -488,7 +488,7 @@ class AudioOutputProxyTest : public testing::Test { proxy->Close(); } - base::test::ScopedTaskEnvironment scoped_task_environment_; + base::test::SingleThreadTaskEnvironment task_environment_; MockAudioManager manager_; std::unique_ptr<AudioOutputDispatcherImpl> dispatcher_impl_; MockAudioSourceCallback callback_; @@ -511,7 +511,7 @@ class AudioOutputResamplerTest : public AudioOutputProxyTest { void OnStart() override { // Let Start() run for a bit. base::RunLoop run_loop; - scoped_task_environment_.GetMainThreadTaskRunner()->PostDelayedTask( + task_environment_.GetMainThreadTaskRunner()->PostDelayedTask( FROM_HERE, run_loop.QuitClosure(), base::TimeDelta::FromMilliseconds(kStartRunTimeMs)); run_loop.Run(); @@ -824,7 +824,7 @@ TEST_F(AudioOutputResamplerTest, FallbackRecovery) { // Once all proxies have been closed, AudioOutputResampler will start the // reinitialization timer and execute it after the close delay elapses. base::RunLoop run_loop; - scoped_task_environment_.GetMainThreadTaskRunner()->PostDelayedTask( + task_environment_.GetMainThreadTaskRunner()->PostDelayedTask( FROM_HERE, run_loop.QuitClosure(), base::TimeDelta::FromMilliseconds(2 * kTestCloseDelayMs)); run_loop.Run(); diff --git a/chromium/media/audio/audio_output_unittest.cc b/chromium/media/audio/audio_output_unittest.cc index 41e4aeceb06..dd67725698d 100644 --- a/chromium/media/audio/audio_output_unittest.cc +++ b/chromium/media/audio/audio_output_unittest.cc @@ -7,9 +7,9 @@ #include <memory> #include "base/memory/aligned_memory.h" -#include "base/message_loop/message_loop.h" #include "base/run_loop.h" #include "base/test/bind_test_util.h" +#include "base/test/task_environment.h" #include "base/test/test_timeouts.h" #include "base/threading/thread_task_runner_handle.h" #include "base/time/time.h" @@ -56,7 +56,8 @@ class AudioOutputTest : public ::testing::Test { } protected: - base::MessageLoopForIO message_loop_; + base::test::SingleThreadTaskEnvironment task_environment_{ + base::test::SingleThreadTaskEnvironment::MainThreadType::IO}; std::unique_ptr<AudioManager> audio_manager_; std::unique_ptr<AudioDeviceInfoAccessorForTests> audio_manager_device_info_; AudioParameters stream_params_; diff --git a/chromium/media/audio/audio_sink_parameters.cc b/chromium/media/audio/audio_sink_parameters.cc index 2d0b4e8a2d1..8287fa07779 100644 --- a/chromium/media/audio/audio_sink_parameters.cc +++ b/chromium/media/audio/audio_sink_parameters.cc @@ -7,8 +7,9 @@ namespace media { AudioSinkParameters::AudioSinkParameters() = default; -AudioSinkParameters::AudioSinkParameters(int session_id, - const std::string& device_id) +AudioSinkParameters::AudioSinkParameters( + const base::UnguessableToken& session_id, + const std::string& device_id) : session_id(session_id), device_id(device_id) {} AudioSinkParameters::AudioSinkParameters(const AudioSinkParameters& params) = default; diff --git a/chromium/media/audio/audio_sink_parameters.h b/chromium/media/audio/audio_sink_parameters.h index 88e3fab21d3..a51f1b82bc7 100644 --- a/chromium/media/audio/audio_sink_parameters.h +++ b/chromium/media/audio/audio_sink_parameters.h @@ -24,11 +24,12 @@ namespace media { // association. struct MEDIA_EXPORT AudioSinkParameters final { AudioSinkParameters(); - AudioSinkParameters(int session_id, const std::string& device_id); + AudioSinkParameters(const base::UnguessableToken& session_id, + const std::string& device_id); AudioSinkParameters(const AudioSinkParameters& params); ~AudioSinkParameters(); - int session_id = 0; + base::UnguessableToken session_id; std::string device_id; base::Optional<base::UnguessableToken> processing_id; }; diff --git a/chromium/media/audio/audio_source_parameters.cc b/chromium/media/audio/audio_source_parameters.cc index 3f05147eeeb..b8c631af30b 100644 --- a/chromium/media/audio/audio_source_parameters.cc +++ b/chromium/media/audio/audio_source_parameters.cc @@ -7,7 +7,8 @@ namespace media { AudioSourceParameters::AudioSourceParameters() = default; -AudioSourceParameters::AudioSourceParameters(int session_id) +AudioSourceParameters::AudioSourceParameters( + const base::UnguessableToken& session_id) : session_id(session_id) {} AudioSourceParameters::AudioSourceParameters( const AudioSourceParameters& params) = default; diff --git a/chromium/media/audio/audio_source_parameters.h b/chromium/media/audio/audio_source_parameters.h index 3de2dbbbb2b..96e1c1960ab 100644 --- a/chromium/media/audio/audio_source_parameters.h +++ b/chromium/media/audio/audio_source_parameters.h @@ -20,11 +20,11 @@ namespace media { // input device will be selected. This is the state when default constructed. struct MEDIA_EXPORT AudioSourceParameters final { AudioSourceParameters(); - explicit AudioSourceParameters(int session_id); + explicit AudioSourceParameters(const base::UnguessableToken& session_id); AudioSourceParameters(const AudioSourceParameters& params); ~AudioSourceParameters(); - int session_id = 0; + base::UnguessableToken session_id; struct MEDIA_EXPORT ProcessingConfig { ProcessingConfig(base::UnguessableToken id, diff --git a/chromium/media/audio/audio_sync_reader_unittest.cc b/chromium/media/audio/audio_sync_reader_unittest.cc index f92eaba5794..b1416d8d7e5 100644 --- a/chromium/media/audio/audio_sync_reader_unittest.cc +++ b/chromium/media/audio/audio_sync_reader_unittest.cc @@ -13,7 +13,7 @@ #include "base/bind.h" #include "base/memory/shared_memory.h" #include "base/sync_socket.h" -#include "base/test/scoped_task_environment.h" +#include "base/test/task_environment.h" #include "base/time/time.h" #include "media/base/audio_bus.h" #include "media/base/audio_parameters.h" @@ -49,7 +49,7 @@ class AudioSyncReaderBitstreamTest : public TestWithParam<OverflowTestCase> { ~AudioSyncReaderBitstreamTest() override {} private: - base::test::ScopedTaskEnvironment env_; + base::test::TaskEnvironment env_; }; TEST_P(AudioSyncReaderBitstreamTest, BitstreamBufferOverflow_DoesNotWriteOOB) { diff --git a/chromium/media/audio/audio_system_impl_unittest.cc b/chromium/media/audio/audio_system_impl_unittest.cc index cf85ff0036c..8375d35908c 100644 --- a/chromium/media/audio/audio_system_impl_unittest.cc +++ b/chromium/media/audio/audio_system_impl_unittest.cc @@ -3,7 +3,8 @@ // found in the LICENSE file. #include "media/audio/audio_system_impl.h" -#include "base/test/scoped_task_environment.h" + +#include "base/test/task_environment.h" #include "media/audio/audio_system_test_util.h" #include "media/audio/audio_thread_impl.h" #include "media/audio/mock_audio_manager.h" @@ -35,7 +36,7 @@ class AudioSystemImplTestBase : public testing::Test { MockAudioManager* audio_manager() { return audio_manager_.get(); } AudioSystem* audio_system() { return audio_system_.get(); } - base::test::ScopedTaskEnvironment scoped_task_environment_; + base::test::SingleThreadTaskEnvironment task_environment_; std::unique_ptr<MockAudioManager> audio_manager_; std::unique_ptr<AudioSystem> audio_system_; // AudioSystemTester tester_; diff --git a/chromium/media/audio/audio_thread_hang_monitor.cc b/chromium/media/audio/audio_thread_hang_monitor.cc index 727e198fafa..37351e1a60a 100644 --- a/chromium/media/audio/audio_thread_hang_monitor.cc +++ b/chromium/media/audio/audio_thread_hang_monitor.cc @@ -47,7 +47,7 @@ AudioThreadHangMonitor::Ptr AudioThreadHangMonitor::Create( scoped_refptr<base::SingleThreadTaskRunner> audio_thread_task_runner, scoped_refptr<base::SequencedTaskRunner> monitor_task_runner) { if (!monitor_task_runner) - monitor_task_runner = base::CreateSequencedTaskRunnerWithTraits({}); + monitor_task_runner = base::CreateSequencedTaskRunner({base::ThreadPool()}); auto monitor = Ptr(new AudioThreadHangMonitor(hang_action, hang_deadline, clock, diff --git a/chromium/media/audio/audio_thread_hang_monitor_unittest.cc b/chromium/media/audio/audio_thread_hang_monitor_unittest.cc index ac5b3de6c32..a173c726d5a 100644 --- a/chromium/media/audio/audio_thread_hang_monitor_unittest.cc +++ b/chromium/media/audio/audio_thread_hang_monitor_unittest.cc @@ -10,7 +10,7 @@ #include "base/synchronization/waitable_event.h" #include "base/task/post_task.h" #include "base/test/metrics/histogram_tester.h" -#include "base/test/scoped_task_environment.h" +#include "base/test/task_environment.h" #include "base/threading/thread.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" @@ -38,13 +38,13 @@ constexpr base::TimeDelta kLongHangDeadline = base::TimeDelta::FromMinutes(30); class AudioThreadHangMonitorTest : public Test { public: AudioThreadHangMonitorTest() - : task_env_(base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME), + : task_env_(base::test::TaskEnvironment::TimeSource::MOCK_TIME), histograms_(), audio_thread_("Audio thread"), hang_monitor_({nullptr, base::OnTaskRunnerDeleter(nullptr)}) { CHECK(audio_thread_.Start()); // We must inject the main thread task runner as the hang monitor task - // runner since ScopedTaskEnvironment::FastForwardBy only works for the main + // runner since TaskEnvironment::FastForwardBy only works for the main // thread. hang_monitor_ = AudioThreadHangMonitor::Create( HangAction::kDoNothing, base::nullopt, task_env_.GetMockTickClock(), @@ -87,7 +87,7 @@ class AudioThreadHangMonitorTest : public Test { MOCK_METHOD0(HangActionTerminate, void()); base::WaitableEvent event_; - base::test::ScopedTaskEnvironment task_env_; + base::test::TaskEnvironment task_env_; base::HistogramTester histograms_; base::Thread audio_thread_; AudioThreadHangMonitor::Ptr hang_monitor_; diff --git a/chromium/media/audio/audio_thread_impl.cc b/chromium/media/audio/audio_thread_impl.cc index c3dfddf7335..4f7b07c135c 100644 --- a/chromium/media/audio/audio_thread_impl.cc +++ b/chromium/media/audio/audio_thread_impl.cc @@ -4,6 +4,7 @@ #include "media/audio/audio_thread_impl.h" +#include "base/message_loop/message_pump_type.h" #include "base/optional.h" #include "base/threading/thread_task_runner_handle.h" #include "base/time/default_tick_clock.h" @@ -20,7 +21,7 @@ AudioThreadImpl::AudioThreadImpl() thread_.init_com_with_mta(true); #elif defined(OS_FUCHSIA) // FIDL-based APIs require async_t, which is initialized on IO thread. - thread_options.message_loop_type = base::MessageLoop::TYPE_IO; + thread_options.message_pump_type = base::MessagePumpType::IO; #endif CHECK(thread_.StartWithOptions(thread_options)); diff --git a/chromium/media/audio/cras/cras_input.cc b/chromium/media/audio/cras/cras_input.cc index 4b4276f2fae..954fc2ad001 100644 --- a/chromium/media/audio/cras/cras_input.cc +++ b/chromium/media/audio/cras/cras_input.cc @@ -210,6 +210,9 @@ void CrasInputStream::Start(AudioInputCallback* callback) { return; } + cras_client_stream_params_set_client_type(stream_params, + CRAS_CLIENT_TYPE_CHROME); + if (UseCrasAec()) cras_client_stream_params_enable_aec(stream_params); diff --git a/chromium/media/audio/cras/cras_unified.cc b/chromium/media/audio/cras/cras_unified.cc index 0719abca359..002d611146b 100644 --- a/chromium/media/audio/cras/cras_unified.cc +++ b/chromium/media/audio/cras/cras_unified.cc @@ -202,6 +202,9 @@ void CrasUnifiedStream::Start(AudioSourceCallback* callback) { return; } + cras_client_stream_params_set_client_type(stream_params, + CRAS_CLIENT_TYPE_CHROME); + // Before starting the stream, save the number of bytes in a frame for use in // the callback. bytes_per_frame_ = cras_client_format_bytes_per_frame(audio_format); diff --git a/chromium/media/audio/fake_audio_input_stream.cc b/chromium/media/audio/fake_audio_input_stream.cc index 0c03c657972..ce75d1e175e 100644 --- a/chromium/media/audio/fake_audio_input_stream.cc +++ b/chromium/media/audio/fake_audio_input_stream.cc @@ -4,18 +4,29 @@ #include "media/audio/fake_audio_input_stream.h" +#include <memory> +#include <string> + #include "base/atomicops.h" #include "base/bind.h" #include "base/bind_helpers.h" #include "base/command_line.h" #include "base/files/file_path.h" +#include "base/macros.h" #include "base/memory/ptr_util.h" +#include "base/memory/ref_counted.h" +#include "base/memory/scoped_refptr.h" #include "base/single_thread_task_runner.h" #include "base/strings/string_split.h" +#include "base/synchronization/lock.h" +#include "base/thread_annotations.h" +#include "base/threading/platform_thread.h" +#include "base/threading/thread.h" #include "base/time/time.h" #include "media/audio/audio_manager_base.h" #include "media/audio/simple_sources.h" #include "media/base/audio_bus.h" +#include "media/base/audio_parameters.h" #include "media/base/media_switches.h" namespace media { @@ -33,15 +44,20 @@ AudioInputStream* FakeAudioInputStream::MakeFakeStream( FakeAudioInputStream::FakeAudioInputStream(AudioManagerBase* manager, const AudioParameters& params) : audio_manager_(manager), - callback_(NULL), - fake_audio_worker_(manager->GetWorkerTaskRunner(), params), + callback_(nullptr), params_(params), - audio_bus_(AudioBus::Create(params)) { + audio_bus_(AudioBus::Create(params)), + capture_thread_( + nullptr, + base::OnTaskRunnerDeleter(manager->GetWorkerTaskRunner())) { DCHECK(audio_manager_->GetTaskRunner()->BelongsToCurrentThread()); } FakeAudioInputStream::~FakeAudioInputStream() { + // |worker_| should be null as Stop() should have been called before. + DCHECK(!capture_thread_); DCHECK(!callback_); + DCHECK(!fake_audio_worker_); } bool FakeAudioInputStream::Open() { @@ -51,17 +67,49 @@ bool FakeAudioInputStream::Open() { return true; } -void FakeAudioInputStream::Start(AudioInputCallback* callback) { +void FakeAudioInputStream::Start(AudioInputCallback* callback) { DCHECK(audio_manager_->GetTaskRunner()->BelongsToCurrentThread()); - callback_ = callback; - fake_audio_worker_.Start(base::BindRepeating( + DCHECK(!capture_thread_); + DCHECK(callback); + DCHECK(!fake_audio_worker_); + + capture_thread_.reset(new base::Thread("FakeAudioInput")); + base::Thread::Options options; + // REALTIME_AUDIO priority is needed to avoid audio playout delays. + // See crbug.com/971265 + options.priority = base::ThreadPriority::REALTIME_AUDIO; + CHECK(capture_thread_->StartWithOptions(options)); + + { + base::AutoLock lock(callback_lock_); + DCHECK(!callback_); + callback_ = callback; + } + + fake_audio_worker_ = std::make_unique<FakeAudioWorker>( + capture_thread_->task_runner(), params_); + fake_audio_worker_->Start(base::BindRepeating( &FakeAudioInputStream::ReadAudioFromSource, base::Unretained(this))); } void FakeAudioInputStream::Stop() { DCHECK(audio_manager_->GetTaskRunner()->BelongsToCurrentThread()); - fake_audio_worker_.Stop(); - callback_ = NULL; + // Start has not been called yet. + if (!capture_thread_) { + return; + } + + { + base::AutoLock lock(callback_lock_); + DCHECK(callback_); + callback_ = nullptr; + } + + DCHECK(fake_audio_worker_); + fake_audio_worker_->Stop(); + fake_audio_worker_.reset(); + + capture_thread_.reset(); } void FakeAudioInputStream::Close() { @@ -104,8 +152,7 @@ void FakeAudioInputStream::SetOutputDeviceForAec( void FakeAudioInputStream::ReadAudioFromSource(base::TimeTicks ideal_time, base::TimeTicks now) { - DCHECK(audio_manager_->GetWorkerTaskRunner()->BelongsToCurrentThread()); - DCHECK(callback_); + DCHECK(capture_thread_->task_runner()->BelongsToCurrentThread()); if (!audio_source_) audio_source_ = ChooseSource(); @@ -121,13 +168,19 @@ void FakeAudioInputStream::ReadAudioFromSource(base::TimeTicks ideal_time, // // However, it would be pointless to add a FIFO queue here to delay the signal // in this "fake" implementation. So, just hack the timing and carry-on. - audio_source_->OnMoreData(base::TimeDelta(), ideal_time, 0, audio_bus_.get()); - callback_->OnData(audio_bus_.get(), ideal_time, 1.0); + { + base::AutoLock lock(callback_lock_); + if (audio_bus_ && callback_) { + audio_source_->OnMoreData(base::TimeDelta(), ideal_time, 0, + audio_bus_.get()); + callback_->OnData(audio_bus_.get(), ideal_time, 1.0); + } + } } using AudioSourceCallback = AudioOutputStream::AudioSourceCallback; std::unique_ptr<AudioSourceCallback> FakeAudioInputStream::ChooseSource() { - DCHECK(audio_manager_->GetWorkerTaskRunner()->BelongsToCurrentThread()); + DCHECK(capture_thread_->task_runner()->BelongsToCurrentThread()); if (base::CommandLine::ForCurrentProcess()->HasSwitch( switches::kUseFileForFakeAudioCapture)) { diff --git a/chromium/media/audio/fake_audio_input_stream.h b/chromium/media/audio/fake_audio_input_stream.h index 29f74dfed22..b76f12fdde5 100644 --- a/chromium/media/audio/fake_audio_input_stream.h +++ b/chromium/media/audio/fake_audio_input_stream.h @@ -8,10 +8,13 @@ #define MEDIA_AUDIO_FAKE_AUDIO_INPUT_STREAM_H_ #include <memory> +#include <string> #include <vector> #include "base/callback_forward.h" #include "base/macros.h" +#include "base/memory/scoped_refptr.h" +#include "base/threading/thread.h" #include "media/audio/audio_io.h" #include "media/base/audio_parameters.h" #include "media/base/fake_audio_worker.h" @@ -68,12 +71,18 @@ class MEDIA_EXPORT FakeAudioInputStream void ReadAudioFromSource(base::TimeTicks ideal_time, base::TimeTicks now); AudioManagerBase* audio_manager_; - AudioInputCallback* callback_; - FakeAudioWorker fake_audio_worker_; + // |callback_| needs the lock as ReadAudioFromSource reads callback_ + // on the capture thread, while callback_ is set on the audio thread. + base::Lock callback_lock_; + AudioInputCallback* callback_ GUARDED_BY(callback_lock_); AudioParameters params_; + std::unique_ptr<FakeAudioWorker> fake_audio_worker_; std::unique_ptr<AudioOutputStream::AudioSourceCallback> audio_source_; std::unique_ptr<media::AudioBus> audio_bus_; + // We will delete the capture thread on the AudioManager worker task runner + // since the audio thread is the main UI thread on Mac. + std::unique_ptr<base::Thread, base::OnTaskRunnerDeleter> capture_thread_; DISALLOW_COPY_AND_ASSIGN(FakeAudioInputStream); }; diff --git a/chromium/media/audio/fuchsia/OWNERS b/chromium/media/audio/fuchsia/OWNERS index e7034eabb1e..c1b584511a6 100644 --- a/chromium/media/audio/fuchsia/OWNERS +++ b/chromium/media/audio/fuchsia/OWNERS @@ -1 +1,4 @@ file://build/fuchsia/OWNERS +# COMPONENT: Fuchsia +# OS: Fuchsia +# TEAM: cr-fuchsia@chromium.org diff --git a/chromium/media/audio/mac/audio_auhal_mac_unittest.cc b/chromium/media/audio/mac/audio_auhal_mac_unittest.cc index 03eb7544f46..281b9415219 100644 --- a/chromium/media/audio/mac/audio_auhal_mac_unittest.cc +++ b/chromium/media/audio/mac/audio_auhal_mac_unittest.cc @@ -4,7 +4,7 @@ #include "base/bind.h" #include "base/macros.h" -#include "base/message_loop/message_loop.h" +#include "base/message_loop/message_pump_type.h" #include "base/run_loop.h" #include "base/synchronization/waitable_event.h" #include "base/test/test_message_loop.h" @@ -39,7 +39,7 @@ ACTION_P3(MaybeSignalEvent, counter, signal_at_count, event) { class AUHALStreamTest : public testing::Test { public: AUHALStreamTest() - : message_loop_(base::MessageLoop::TYPE_UI), + : message_loop_(base::MessagePumpType::UI), manager_(AudioManager::CreateForTesting( std::make_unique<TestAudioThread>())), manager_device_info_(manager_.get()) { diff --git a/chromium/media/audio/mac/audio_device_listener_mac_unittest.cc b/chromium/media/audio/mac/audio_device_listener_mac_unittest.cc index b222c5932a0..245a2cd4714 100644 --- a/chromium/media/audio/mac/audio_device_listener_mac_unittest.cc +++ b/chromium/media/audio/mac/audio_device_listener_mac_unittest.cc @@ -13,7 +13,7 @@ #include "base/macros.h" #include "base/run_loop.h" #include "base/single_thread_task_runner.h" -#include "base/test/scoped_task_environment.h" +#include "base/test/task_environment.h" #include "media/base/bind_to_current_loop.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" @@ -25,7 +25,7 @@ class AudioDeviceListenerMacTest : public testing::Test { AudioDeviceListenerMacTest() { // It's important to create the device listener from the message loop in // order to ensure we don't end up with unbalanced TaskObserver calls. - scoped_task_environment_.GetMainThreadTaskRunner()->PostTask( + task_environment_.GetMainThreadTaskRunner()->PostTask( FROM_HERE, base::BindOnce(&AudioDeviceListenerMacTest::CreateDeviceListener, base::Unretained(this))); @@ -35,7 +35,7 @@ class AudioDeviceListenerMacTest : public testing::Test { virtual ~AudioDeviceListenerMacTest() { // It's important to destroy the device listener from the message loop in // order to ensure we don't end up with unbalanced TaskObserver calls. - scoped_task_environment_.GetMainThreadTaskRunner()->PostTask( + task_environment_.GetMainThreadTaskRunner()->PostTask( FROM_HERE, base::BindOnce(&AudioDeviceListenerMacTest::DestroyDeviceListener, base::Unretained(this))); @@ -98,7 +98,7 @@ class AudioDeviceListenerMacTest : public testing::Test { MOCK_METHOD0(OnDeviceChange, void()); protected: - base::test::ScopedTaskEnvironment scoped_task_environment_; + base::test::SingleThreadTaskEnvironment task_environment_; std::unique_ptr<AudioDeviceListenerMac> device_listener_; DISALLOW_COPY_AND_ASSIGN(AudioDeviceListenerMacTest); diff --git a/chromium/media/audio/mac/audio_low_latency_input_mac_unittest.cc b/chromium/media/audio/mac/audio_low_latency_input_mac_unittest.cc index 6f46b9f2358..cb47dae8204 100644 --- a/chromium/media/audio/mac/audio_low_latency_input_mac_unittest.cc +++ b/chromium/media/audio/mac/audio_low_latency_input_mac_unittest.cc @@ -11,7 +11,7 @@ #include "base/memory/ptr_util.h" #include "base/run_loop.h" #include "base/single_thread_task_runner.h" -#include "base/test/scoped_task_environment.h" +#include "base/test/task_environment.h" #include "base/test/test_timeouts.h" #include "base/threading/platform_thread.h" #include "media/audio/audio_device_description.h" @@ -113,8 +113,8 @@ class WriteToFileAudioSink : public AudioInputStream::AudioInputCallback { class MacAudioInputTest : public testing::Test { protected: MacAudioInputTest() - : scoped_task_environment_( - base::test::ScopedTaskEnvironment::MainThreadType::UI), + : task_environment_( + base::test::SingleThreadTaskEnvironment::MainThreadType::UI), audio_manager_(AudioManager::CreateForTesting( std::make_unique<TestAudioThread>())) { // Wait for the AudioManager to finish any initialization on the audio loop. @@ -159,7 +159,7 @@ class MacAudioInputTest : public testing::Test { void OnLogMessage(const std::string& message) { log_message_ = message; } - base::test::ScopedTaskEnvironment scoped_task_environment_; + base::test::SingleThreadTaskEnvironment task_environment_; std::unique_ptr<AudioManager> audio_manager_; std::string log_message_; }; @@ -219,7 +219,7 @@ TEST_F(MacAudioInputTest, AUAudioInputStreamVerifyMonoRecording) { EXPECT_CALL(sink, OnData(NotNull(), _, _)) .Times(AtLeast(10)) .WillRepeatedly(CheckCountAndPostQuitTask( - &count, 10, scoped_task_environment_.GetMainThreadTaskRunner(), + &count, 10, task_environment_.GetMainThreadTaskRunner(), run_loop.QuitClosure())); ais->Start(&sink); run_loop.Run(); @@ -255,7 +255,7 @@ TEST_F(MacAudioInputTest, AUAudioInputStreamVerifyStereoRecording) { EXPECT_CALL(sink, OnData(NotNull(), _, _)) .Times(AtLeast(10)) .WillRepeatedly(CheckCountAndPostQuitTask( - &count, 10, scoped_task_environment_.GetMainThreadTaskRunner(), + &count, 10, task_environment_.GetMainThreadTaskRunner(), run_loop.QuitClosure())); ais->Start(&sink); run_loop.Run(); diff --git a/chromium/media/audio/mac/coreaudio_dispatch_override.cc b/chromium/media/audio/mac/coreaudio_dispatch_override.cc index 2e555e16e4d..68a9618819c 100644 --- a/chromium/media/audio/mac/coreaudio_dispatch_override.cc +++ b/chromium/media/audio/mac/coreaudio_dispatch_override.cc @@ -97,14 +97,23 @@ bool AddressIsPauseOrResume(intptr_t address) { DCHECK_EQ(strcmp(info.dli_fname, kCoreAudioPath), 0); + // Before Mac OSX 10.10, this code is not applied because dyld is not + // available. + // From Mac OSX 10.10 to 10.15 (excluded) the target functions that trigger + // the interposition are HALC_IOContext_ResumeIO and HALC_IOContext_PauseIO + // for respectively resume and pause. + // With MacOSX 10.15 the target functions have changed to _XIOContext_ResumeIO + // and _XIOContext_PauseIO for respectively resume and pause. if (!resumeio_callsite && info.dli_sname && - strcmp(info.dli_sname, "HALC_IOContext_ResumeIO") == 0) { + (strcmp(info.dli_sname, "HALC_IOContext_ResumeIO") == 0 || + strcmp(info.dli_sname, "_XIOContext_ResumeIO") == 0)) { resumeio_callsite = address; base::subtle::NoBarrier_CompareAndSwap(&g_resumeio_callsite, 0, resumeio_callsite); LogCallsiteLookupEvent(LOOKUP_RESUMEIO_CALLSITE_FOUND); } else if (!pauseio_callsite && info.dli_sname && - strcmp(info.dli_sname, "HALC_IOContext_PauseIO") == 0) { + (strcmp(info.dli_sname, "HALC_IOContext_PauseIO") == 0 || + strcmp(info.dli_sname, "_XIOContext_PauseIO") == 0)) { pauseio_callsite = address; base::subtle::NoBarrier_CompareAndSwap(&g_pauseio_callsite, 0, pauseio_callsite); diff --git a/chromium/media/audio/power_observer_helper_unittest.cc b/chromium/media/audio/power_observer_helper_unittest.cc index 5a1f0b41c55..0d68d4ea207 100644 --- a/chromium/media/audio/power_observer_helper_unittest.cc +++ b/chromium/media/audio/power_observer_helper_unittest.cc @@ -6,7 +6,7 @@ #include "base/bind.h" #include "base/synchronization/waitable_event.h" -#include "base/test/scoped_task_environment.h" +#include "base/test/task_environment.h" #include "base/threading/thread.h" #include "media/audio/power_observer_helper.h" #include "testing/gtest/include/gtest/gtest.h" @@ -102,7 +102,7 @@ class PowerObserverHelperTest : public testing::Test { } // The test task environment. - base::test::ScopedTaskEnvironment scoped_task_environment_; + base::test::TaskEnvironment task_environment_; // The thread the helper is run on. base::Thread power_observer_helper_thread_; diff --git a/chromium/media/audio/pulse/pulse_util.cc b/chromium/media/audio/pulse/pulse_util.cc index 97debbdbc07..66d7149bfec 100644 --- a/chromium/media/audio/pulse/pulse_util.cc +++ b/chromium/media/audio/pulse/pulse_util.cc @@ -13,6 +13,7 @@ #include "base/logging.h" #include "base/macros.h" #include "base/memory/ptr_util.h" +#include "build/branding_buildflags.h" #include "media/audio/audio_device_description.h" #include "media/base/audio_timestamp_helper.h" @@ -30,7 +31,7 @@ namespace pulse { namespace { -#if defined(GOOGLE_CHROME_BUILD) +#if BUILDFLAG(GOOGLE_CHROME_BRANDING) static const char kBrowserDisplayName[] = "google-chrome"; #else static const char kBrowserDisplayName[] = "chromium-browser"; diff --git a/chromium/media/audio/win/audio_low_latency_input_win.cc b/chromium/media/audio/win/audio_low_latency_input_win.cc index bacb183b324..8fc6929e4be 100644 --- a/chromium/media/audio/win/audio_low_latency_input_win.cc +++ b/chromium/media/audio/win/audio_low_latency_input_win.cc @@ -32,6 +32,8 @@ namespace media { namespace { +constexpr uint32_t KSAUDIO_SPEAKER_UNSUPPORTED = 0; + // Errors when initializing the audio client related to the audio format. Split // by whether we're using format conversion or not. Used for reporting stats - // do not renumber entries. @@ -67,6 +69,25 @@ bool IsSupportedFormatForConversion(WAVEFORMATEXTENSIBLE* format_ex) { return true; } +// Converts ChannelLayout to Microsoft's channel configuration but only discrete +// and up to stereo is supported currently. All other multi-channel layouts +// return KSAUDIO_SPEAKER_UNSUPPORTED. +ChannelConfig ChannelLayoutToChannelConfig(ChannelLayout layout) { + switch (layout) { + case CHANNEL_LAYOUT_DISCRETE: + return KSAUDIO_SPEAKER_DIRECTOUT; + case CHANNEL_LAYOUT_MONO: + return KSAUDIO_SPEAKER_MONO; + case CHANNEL_LAYOUT_STEREO: + return KSAUDIO_SPEAKER_STEREO; + default: + LOG(WARNING) << "Unsupported channel layout: " << layout; + // KSAUDIO_SPEAKER_UNSUPPORTED equals 0 and corresponds to "no specific + // channel order". + return KSAUDIO_SPEAKER_UNSUPPORTED; + } +} + } // namespace WASAPIAudioInputStream::WASAPIAudioInputStream( @@ -78,6 +99,10 @@ WASAPIAudioInputStream::WASAPIAudioInputStream( DCHECK(manager_); DCHECK(!device_id_.empty()); DCHECK(!log_callback_.is_null()); + DCHECK_LE(params.channels(), 2); + DCHECK(params.channel_layout() == CHANNEL_LAYOUT_MONO || + params.channel_layout() == CHANNEL_LAYOUT_STEREO || + params.channel_layout() == CHANNEL_LAYOUT_DISCRETE); // Load the Avrt DLL if not already loaded. Required to support MMCSS. bool avrt_init = avrt::Initialize(); @@ -106,7 +131,7 @@ WASAPIAudioInputStream::WASAPIAudioInputStream( format->cbSize = sizeof(WAVEFORMATEXTENSIBLE) - sizeof(WAVEFORMATEX); input_format_.Samples.wValidBitsPerSample = format->wBitsPerSample; input_format_.dwChannelMask = - CoreAudioUtil::GetChannelConfig(device_id, eCapture); + ChannelLayoutToChannelConfig(params.channel_layout()); input_format_.SubFormat = KSDATAFORMAT_SUBTYPE_PCM; DVLOG(1) << "Input: " << CoreAudioUtil::WaveFormatToString(&input_format_); @@ -676,7 +701,7 @@ HRESULT WASAPIAudioInputStream::GetAudioEngineStreamFormat() { hr = audio_client_->GetMixFormat(&format); if (FAILED(hr)) return hr; - DVLOG(2) << CoreAudioUtil::WaveFormatToString(format.get()); + DVLOG(1) << CoreAudioUtil::WaveFormatToString(format.get()); #endif return hr; } @@ -803,6 +828,8 @@ HRESULT WASAPIAudioInputStream::InitializeAudioEngine() { // however cases when there are glitches anyway and it's avoided by setting a // larger buffer size. The larger size does not create higher latency for // properly implemented drivers. + DVLOG(1) << "Audio format used in IAudioClient::Initialize: " + << CoreAudioUtil::WaveFormatToString(&input_format_); HRESULT hr = audio_client_->Initialize( AUDCLNT_SHAREMODE_SHARED, flags, 100 * 1000 * 10, // Buffer duration, 100 ms expressed in 100-ns units. diff --git a/chromium/media/audio/win/audio_low_latency_input_win_unittest.cc b/chromium/media/audio/win/audio_low_latency_input_win_unittest.cc index 3f8b8fcadf2..81cf90abdab 100644 --- a/chromium/media/audio/win/audio_low_latency_input_win_unittest.cc +++ b/chromium/media/audio/win/audio_low_latency_input_win_unittest.cc @@ -4,10 +4,10 @@ #include "media/audio/win/audio_low_latency_input_win.h" +#include <windows.h> #include <mmsystem.h> #include <stddef.h> #include <stdint.h> -#include <windows.h> #include <memory> @@ -19,7 +19,7 @@ #include "base/run_loop.h" #include "base/single_thread_task_runner.h" #include "base/strings/stringprintf.h" -#include "base/test/scoped_task_environment.h" +#include "base/test/task_environment.h" #include "base/test/test_timeouts.h" #include "base/win/scoped_com_initializer.h" #include "media/audio/audio_device_description.h" @@ -268,7 +268,7 @@ class WinAudioInputTest : public ::testing::Test { ~WinAudioInputTest() override { audio_manager_->Shutdown(); } protected: - base::test::ScopedTaskEnvironment scoped_task_environment_; + base::test::SingleThreadTaskEnvironment task_environment_; std::unique_ptr<AudioManager> audio_manager_; }; @@ -414,7 +414,7 @@ TEST_F(WinAudioInputTest, WASAPIAudioInputStreamTestPacketSizes) { EXPECT_CALL(sink, OnData(NotNull(), _, _)) .Times(AtLeast(10)) .WillRepeatedly(CheckCountAndPostQuitTask( - &count, 10, scoped_task_environment_.GetMainThreadTaskRunner(), + &count, 10, task_environment_.GetMainThreadTaskRunner(), run_loop.QuitWhenIdleClosure())); ais->Start(&sink); run_loop.Run(); @@ -439,7 +439,7 @@ TEST_F(WinAudioInputTest, WASAPIAudioInputStreamTestPacketSizes) { EXPECT_CALL(sink, OnData(NotNull(), _, _)) .Times(AtLeast(10)) .WillRepeatedly(CheckCountAndPostQuitTask( - &count, 10, scoped_task_environment_.GetMainThreadTaskRunner(), + &count, 10, task_environment_.GetMainThreadTaskRunner(), run_loop.QuitWhenIdleClosure())); ais->Start(&sink); run_loop.Run(); @@ -460,7 +460,7 @@ TEST_F(WinAudioInputTest, WASAPIAudioInputStreamTestPacketSizes) { EXPECT_CALL(sink, OnData(NotNull(), _, _)) .Times(AtLeast(10)) .WillRepeatedly(CheckCountAndPostQuitTask( - &count, 10, scoped_task_environment_.GetMainThreadTaskRunner(), + &count, 10, task_environment_.GetMainThreadTaskRunner(), run_loop.QuitWhenIdleClosure())); ais->Start(&sink); run_loop.Run(); diff --git a/chromium/media/audio/win/audio_output_win_unittest.cc b/chromium/media/audio/win/audio_output_win_unittest.cc index 07c797390b0..e4d6c633f29 100644 --- a/chromium/media/audio/win/audio_output_win_unittest.cc +++ b/chromium/media/audio/win/audio_output_win_unittest.cc @@ -14,7 +14,7 @@ #include "base/memory/ptr_util.h" #include "base/run_loop.h" #include "base/sync_socket.h" -#include "base/test/scoped_task_environment.h" +#include "base/test/task_environment.h" #include "base/time/time.h" #include "base/win/scoped_com_initializer.h" #include "media/audio/audio_device_info_accessor_for_tests.h" @@ -164,7 +164,7 @@ class WinAudioTest : public ::testing::Test { ~WinAudioTest() override { audio_manager_->Shutdown(); } protected: - base::test::ScopedTaskEnvironment scoped_task_environment_; + base::test::SingleThreadTaskEnvironment task_environment_; std::unique_ptr<AudioManager> audio_manager_; std::unique_ptr<AudioDeviceInfoAccessorForTests> audio_manager_device_info_; }; diff --git a/chromium/media/audio/win/core_audio_util_win.cc b/chromium/media/audio/win/core_audio_util_win.cc index 9062a3646cc..289b4042a20 100644 --- a/chromium/media/audio/win/core_audio_util_win.cc +++ b/chromium/media/audio/win/core_audio_util_win.cc @@ -41,7 +41,7 @@ const GUID kCommunicationsSessionId = { namespace { -enum { KSAUDIO_SPEAKER_UNSUPPORTED = 0 }; +constexpr uint32_t KSAUDIO_SPEAKER_UNSUPPORTED = 0xFFFFFFFF; // Used for mapping UMA histograms with corresponding source of logging. enum class UmaLogStep { |