diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-10-06 12:48:11 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-10-13 09:33:43 +0000 |
commit | 7b5b123ac58f58ffde0f4f6e488bcd09aa4decd3 (patch) | |
tree | fa14ba0ca8d2683ba2efdabd246dc9b18a1229c6 /chromium/media/audio | |
parent | 79b4f909db1049fca459c07cca55af56a9b54fe3 (diff) | |
download | qtwebengine-chromium-7b5b123ac58f58ffde0f4f6e488bcd09aa4decd3.tar.gz |
BASELINE: Update Chromium to 84.0.4147.141
Change-Id: Ib85eb4cfa1cbe2b2b81e5022c8cad5c493969535
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/media/audio')
-rw-r--r-- | chromium/media/audio/android/opensles_util.cc | 2 | ||||
-rw-r--r-- | chromium/media/audio/audio_device_description.cc | 2 | ||||
-rw-r--r-- | chromium/media/audio/audio_device_thread.cc | 2 | ||||
-rw-r--r-- | chromium/media/audio/audio_input_device.cc | 11 | ||||
-rw-r--r-- | chromium/media/audio/audio_output_device.cc | 3 | ||||
-rw-r--r-- | chromium/media/audio/audio_output_device_thread_callback.cc | 50 | ||||
-rw-r--r-- | chromium/media/audio/audio_output_device_thread_callback.h | 20 | ||||
-rw-r--r-- | chromium/media/audio/audio_output_proxy.cc | 2 | ||||
-rw-r--r-- | chromium/media/audio/cras/audio_manager_cras.cc | 2 | ||||
-rw-r--r-- | chromium/media/audio/fake_audio_output_stream.cc | 2 | ||||
-rw-r--r-- | chromium/media/audio/mock_audio_manager.cc | 2 | ||||
-rw-r--r-- | chromium/media/audio/pulse/pulse_input.cc | 2 | ||||
-rw-r--r-- | chromium/media/audio/simple_sources_unittest.cc | 1 | ||||
-rw-r--r-- | chromium/media/audio/wav_audio_handler_unittest.cc | 1 | ||||
-rw-r--r-- | chromium/media/audio/win/audio_output_win_unittest.cc | 72 | ||||
-rw-r--r-- | chromium/media/audio/win/avrt_wrapper_win.cc | 4 |
16 files changed, 75 insertions, 103 deletions
diff --git a/chromium/media/audio/android/opensles_util.cc b/chromium/media/audio/android/opensles_util.cc index cf5ea3b98d8..128a3bd20d2 100644 --- a/chromium/media/audio/android/opensles_util.cc +++ b/chromium/media/audio/android/opensles_util.cc @@ -4,6 +4,8 @@ #include "media/audio/android/opensles_util.h" +#include "base/logging.h" + namespace media { #define SL_ANDROID_SPEAKER_QUAD \ diff --git a/chromium/media/audio/audio_device_description.cc b/chromium/media/audio/audio_device_description.cc index c72b61478a7..bd3f61100e8 100644 --- a/chromium/media/audio/audio_device_description.cc +++ b/chromium/media/audio/audio_device_description.cc @@ -7,7 +7,7 @@ #include <utility> #include "base/bind.h" -#include "base/logging.h" +#include "base/notreached.h" #include "build/chromecast_buildflags.h" #include "media/base/localized_strings.h" diff --git a/chromium/media/audio/audio_device_thread.cc b/chromium/media/audio/audio_device_thread.cc index 2acfb8ad6e9..b813314b867 100644 --- a/chromium/media/audio/audio_device_thread.cc +++ b/chromium/media/audio/audio_device_thread.cc @@ -6,7 +6,7 @@ #include <limits> -#include "base/logging.h" +#include "base/check_op.h" #include "base/system/sys_info.h" namespace media { diff --git a/chromium/media/audio/audio_input_device.cc b/chromium/media/audio/audio_input_device.cc index 26367015351..aad6984307d 100644 --- a/chromium/media/audio/audio_input_device.cc +++ b/chromium/media/audio/audio_input_device.cc @@ -81,7 +81,6 @@ class AudioInputDevice::AudioThreadCallback base::ReadOnlySharedMemoryRegion shared_memory_region_; base::ReadOnlySharedMemoryMapping shared_memory_mapping_; const base::TimeTicks start_time_; - bool no_callbacks_received_; size_t current_segment_id_; uint32_t last_buffer_id_; std::vector<std::unique_ptr<const media::AudioBus>> audio_buses_; @@ -357,7 +356,6 @@ AudioInputDevice::AudioThreadCallback::AudioThreadCallback( enable_uma_(enable_uma), shared_memory_region_(std::move(shared_memory_region)), start_time_(base::TimeTicks::Now()), - no_callbacks_received_(true), current_segment_id_(0u), last_buffer_id_(UINT32_MAX), capture_callback_(capture_callback), @@ -400,15 +398,6 @@ void AudioInputDevice::AudioThreadCallback::MapSharedMemory() { void AudioInputDevice::AudioThreadCallback::Process(uint32_t pending_data) { TRACE_EVENT_BEGIN0("audio", "AudioInputDevice::AudioThreadCallback::Process"); - - if (no_callbacks_received_) { - if (enable_uma_) { - UMA_HISTOGRAM_TIMES("Media.Audio.Render.InputDeviceStartTime", - base::TimeTicks::Now() - start_time_); - } - no_callbacks_received_ = false; - } - // The shared memory represents parameters, size of the data buffer and the // actual data buffer containing audio data. Map the memory into this // structure and parse out parameters and the data area. diff --git a/chromium/media/audio/audio_output_device.cc b/chromium/media/audio/audio_output_device.cc index 86239ef1bc8..92448e7469f 100644 --- a/chromium/media/audio/audio_output_device.cc +++ b/chromium/media/audio/audio_output_device.cc @@ -402,8 +402,7 @@ void AudioOutputDevice::OnStreamCreated( DCHECK(!audio_callback_); audio_callback_.reset(new AudioOutputDeviceThreadCallback( - audio_parameters_, std::move(shared_memory_region), callback_, - std::make_unique<AudioOutputDeviceThreadCallback::Metrics>())); + audio_parameters_, std::move(shared_memory_region), callback_)); if (playing_automatically) audio_callback_->InitializePlayStartTime(); audio_thread_.reset(new AudioDeviceThread( diff --git a/chromium/media/audio/audio_output_device_thread_callback.cc b/chromium/media/audio/audio_output_device_thread_callback.cc index c19252afbb9..c834b0d77d8 100644 --- a/chromium/media/audio/audio_output_device_thread_callback.cc +++ b/chromium/media/audio/audio_output_device_thread_callback.cc @@ -11,57 +11,23 @@ namespace media { -AudioOutputDeviceThreadCallback::Metrics::Metrics() - : first_play_start_time_(base::nullopt) {} - -AudioOutputDeviceThreadCallback::Metrics::~Metrics() = default; - -void AudioOutputDeviceThreadCallback::Metrics::OnCreated() { - start_time_ = base::TimeTicks::Now(); -} - -void AudioOutputDeviceThreadCallback::Metrics::OnProcess() { - if (first_play_start_time_) { - UMA_HISTOGRAM_TIMES("Media.Audio.Render.OutputDeviceStartTime", - base::TimeTicks::Now() - *first_play_start_time_); - } -} - -void AudioOutputDeviceThreadCallback::Metrics::OnInitializePlayStartTime() { - if (!first_play_start_time_.has_value()) - first_play_start_time_ = base::TimeTicks::Now(); -} - -void AudioOutputDeviceThreadCallback::Metrics::OnDestroyed() { - DCHECK(!start_time_.is_null()); - UMA_HISTOGRAM_LONG_TIMES("Media.Audio.Render.OutputStreamDuration", - base::TimeTicks::Now() - start_time_); -} - AudioOutputDeviceThreadCallback::AudioOutputDeviceThreadCallback( const media::AudioParameters& audio_parameters, base::UnsafeSharedMemoryRegion shared_memory_region, - media::AudioRendererSink::RenderCallback* render_callback, - std::unique_ptr<Metrics> metrics) + media::AudioRendererSink::RenderCallback* render_callback) : media::AudioDeviceThread::Callback( audio_parameters, ComputeAudioOutputBufferSize(audio_parameters), /*segment count*/ 1), shared_memory_region_(std::move(shared_memory_region)), render_callback_(render_callback), - callback_num_(0), - metrics_(std::move(metrics)) { + callback_num_(0) { // CHECK that the shared memory is large enough. The memory allocated must be // at least as large as expected. CHECK(memory_length_ <= shared_memory_region_.GetSize()); - if (metrics_) - metrics_->OnCreated(); } -AudioOutputDeviceThreadCallback::~AudioOutputDeviceThreadCallback() { - if (metrics_) - metrics_->OnDestroyed(); -} +AudioOutputDeviceThreadCallback::~AudioOutputDeviceThreadCallback() = default; void AudioOutputDeviceThreadCallback::MapSharedMemory() { CHECK_EQ(total_segments_, 1u); @@ -103,11 +69,8 @@ void AudioOutputDeviceThreadCallback::Process(uint32_t control_signal) { // When playback starts, we get an immediate callback to Process to make sure // that we have some data, we'll get another one after the device is awake and // ingesting data, which is what we want to track with this trace. - if (callback_num_ == 2) { - if (metrics_) - metrics_->OnProcess(); + if (callback_num_ == 2) TRACE_EVENT_ASYNC_END0("audio", "StartingPlayback", this); - } // Update the audio-delay measurement, inform about the number of skipped // frames, and ask client to render audio. Since |output_bus_| is wrapping @@ -131,9 +94,6 @@ bool AudioOutputDeviceThreadCallback::CurrentThreadIsAudioDeviceThread() { return thread_checker_.CalledOnValidThread(); } -void AudioOutputDeviceThreadCallback::InitializePlayStartTime() { - if (metrics_) - metrics_->OnInitializePlayStartTime(); -} +void AudioOutputDeviceThreadCallback::InitializePlayStartTime() {} } // namespace media diff --git a/chromium/media/audio/audio_output_device_thread_callback.h b/chromium/media/audio/audio_output_device_thread_callback.h index 2a529bf9082..84b80d9af78 100644 --- a/chromium/media/audio/audio_output_device_thread_callback.h +++ b/chromium/media/audio/audio_output_device_thread_callback.h @@ -20,27 +20,10 @@ namespace media { class MEDIA_EXPORT AudioOutputDeviceThreadCallback : public media::AudioDeviceThread::Callback { public: - class Metrics { - public: - Metrics(); - ~Metrics(); - - void OnCreated(); - void OnProcess(); - void OnInitializePlayStartTime(); - void OnDestroyed(); - - private: - base::TimeTicks start_time_; - // If set, this is used to record the startup duration UMA stat. - base::Optional<base::TimeTicks> first_play_start_time_; - }; - AudioOutputDeviceThreadCallback( const media::AudioParameters& audio_parameters, base::UnsafeSharedMemoryRegion shared_memory_region, - media::AudioRendererSink::RenderCallback* render_callback, - std::unique_ptr<Metrics> metrics = nullptr); + media::AudioRendererSink::RenderCallback* render_callback); ~AudioOutputDeviceThreadCallback() override; void MapSharedMemory() override; @@ -64,7 +47,6 @@ class MEDIA_EXPORT AudioOutputDeviceThreadCallback media::AudioRendererSink::RenderCallback* render_callback_; std::unique_ptr<media::AudioBus> output_bus_; uint64_t callback_num_; - std::unique_ptr<Metrics> metrics_; DISALLOW_COPY_AND_ASSIGN(AudioOutputDeviceThreadCallback); }; diff --git a/chromium/media/audio/audio_output_proxy.cc b/chromium/media/audio/audio_output_proxy.cc index ec6657a5f67..d205d67091e 100644 --- a/chromium/media/audio/audio_output_proxy.cc +++ b/chromium/media/audio/audio_output_proxy.cc @@ -4,7 +4,7 @@ #include "media/audio/audio_output_proxy.h" -#include "base/logging.h" +#include "base/check_op.h" #include "media/audio/audio_manager.h" #include "media/audio/audio_output_dispatcher.h" diff --git a/chromium/media/audio/cras/audio_manager_cras.cc b/chromium/media/audio/cras/audio_manager_cras.cc index 376989bfb50..fb4f792d5d0 100644 --- a/chromium/media/audio/cras/audio_manager_cras.cc +++ b/chromium/media/audio/cras/audio_manager_cras.cc @@ -11,9 +11,9 @@ #include <utility> #include "base/bind.h" +#include "base/check_op.h" #include "base/command_line.h" #include "base/environment.h" -#include "base/logging.h" #include "base/metrics/field_trial_params.h" #include "base/nix/xdg_util.h" #include "base/stl_util.h" diff --git a/chromium/media/audio/fake_audio_output_stream.cc b/chromium/media/audio/fake_audio_output_stream.cc index b39e13454d0..04a624e321f 100644 --- a/chromium/media/audio/fake_audio_output_stream.cc +++ b/chromium/media/audio/fake_audio_output_stream.cc @@ -6,7 +6,7 @@ #include "base/bind.h" #include "base/bind_helpers.h" -#include "base/logging.h" +#include "base/check.h" #include "base/single_thread_task_runner.h" #include "base/time/time.h" #include "media/audio/audio_manager_base.h" diff --git a/chromium/media/audio/mock_audio_manager.cc b/chromium/media/audio/mock_audio_manager.cc index 16ab5c719ad..a4056b2edf7 100644 --- a/chromium/media/audio/mock_audio_manager.cc +++ b/chromium/media/audio/mock_audio_manager.cc @@ -8,7 +8,7 @@ #include "base/bind.h" #include "base/callback.h" -#include "base/logging.h" +#include "base/check.h" #include "media/audio/mock_audio_debug_recording_manager.h" #include "media/base/audio_parameters.h" diff --git a/chromium/media/audio/pulse/pulse_input.cc b/chromium/media/audio/pulse/pulse_input.cc index 3f0c9d7a1d4..10bbd2d2af6 100644 --- a/chromium/media/audio/pulse/pulse_input.cc +++ b/chromium/media/audio/pulse/pulse_input.cc @@ -6,7 +6,7 @@ #include <stdint.h> -#include "base/logging.h" +#include "base/check.h" #include "base/strings/stringprintf.h" #include "media/audio/audio_device_description.h" #include "media/audio/pulse/audio_manager_pulse.h" diff --git a/chromium/media/audio/simple_sources_unittest.cc b/chromium/media/audio/simple_sources_unittest.cc index 44009d4b87c..263d639242f 100644 --- a/chromium/media/audio/simple_sources_unittest.cc +++ b/chromium/media/audio/simple_sources_unittest.cc @@ -11,7 +11,6 @@ #include <memory> #include "base/files/file_util.h" -#include "base/logging.h" #include "base/time/time.h" #include "media/audio/audio_io.h" #include "media/audio/test_data.h" diff --git a/chromium/media/audio/wav_audio_handler_unittest.cc b/chromium/media/audio/wav_audio_handler_unittest.cc index 9969c116c43..89521245a61 100644 --- a/chromium/media/audio/wav_audio_handler_unittest.cc +++ b/chromium/media/audio/wav_audio_handler_unittest.cc @@ -9,7 +9,6 @@ #include <memory> #include <string> -#include "base/logging.h" #include "base/stl_util.h" #include "base/strings/string_piece.h" #include "media/audio/test_data.h" diff --git a/chromium/media/audio/win/audio_output_win_unittest.cc b/chromium/media/audio/win/audio_output_win_unittest.cc index f207cf2b0fb..7a4fc8648c4 100644 --- a/chromium/media/audio/win/audio_output_win_unittest.cc +++ b/chromium/media/audio/win/audio_output_win_unittest.cc @@ -472,8 +472,12 @@ TEST_F(WinAudioTest, PCMWaveStreamPendingBytes) { // from a potentially remote thread. class SyncSocketSource : public AudioOutputStream::AudioSourceCallback { public: - SyncSocketSource(base::SyncSocket* socket, const AudioParameters& params) - : socket_(socket), params_(params) { + SyncSocketSource(base::SyncSocket* socket, + const AudioParameters& params, + int expected_packet_count) + : socket_(socket), + params_(params), + expected_packet_count_(expected_packet_count) { // Setup AudioBus wrapping data we'll receive over the sync socket. packet_size_ = AudioBus::CalculateMemorySize(params); data_.reset(static_cast<float*>( @@ -488,18 +492,28 @@ class SyncSocketSource : public AudioOutputStream::AudioSourceCallback { base::TimeTicks delay_timestamp, int /* prior_frames_skipped */, AudioBus* dest) override { - uint32_t control_signal = 0; - socket_->Send(&control_signal, sizeof(control_signal)); - output_buffer()->params.delay_us = delay.InMicroseconds(); - output_buffer()->params.delay_timestamp_us = - (delay_timestamp - base::TimeTicks()).InMicroseconds(); - uint32_t size = socket_->Receive(data_.get(), packet_size_); - - DCHECK_EQ(static_cast<size_t>(size) % sizeof(*audio_bus_->channel(0)), 0U); - audio_bus_->CopyTo(dest); - return audio_bus_->frames(); + // If we ask for more data once the producer has shutdown, we will hang + // on |socket_->Receive()|. + if (current_packet_count_ < expected_packet_count_) { + uint32_t control_signal = 0; + socket_->Send(&control_signal, sizeof(control_signal)); + output_buffer()->params.delay_us = delay.InMicroseconds(); + output_buffer()->params.delay_timestamp_us = + (delay_timestamp - base::TimeTicks()).InMicroseconds(); + uint32_t size = socket_->Receive(data_.get(), packet_size_); + ++current_packet_count_; + + DCHECK_EQ(static_cast<size_t>(size) % sizeof(*audio_bus_->channel(0)), + 0U); + audio_bus_->CopyTo(dest); + return audio_bus_->frames(); + } + + return 0; } + int packet_size() const { return packet_size_; } + AudioOutputBuffer* output_buffer() const { return reinterpret_cast<AudioOutputBuffer*>(data_.get()); } @@ -513,6 +527,11 @@ class SyncSocketSource : public AudioOutputStream::AudioSourceCallback { int packet_size_; std::unique_ptr<float, base::AlignedFreeDeleter> data_; std::unique_ptr<AudioBus> audio_bus_; + + // This test produces a fixed number of packets, we need these so we know + // when to stop listening. + const int expected_packet_count_; + int current_packet_count_ = 0; }; struct SyncThreadContext { @@ -523,6 +542,7 @@ struct SyncThreadContext { double sine_freq; uint32_t packet_size_bytes; AudioOutputBuffer* buffer; + int total_packets; }; // This thread provides the data that the SyncSocketSource above needs @@ -541,10 +561,11 @@ DWORD __stdcall SyncSocketThread(void* context) { AudioBus::WrapMemory(ctx.channels, ctx.frames, data.get()); SineWaveAudioSource sine(1, ctx.sine_freq, ctx.sample_rate); - const int kTwoSecFrames = ctx.sample_rate * 2; uint32_t control_signal = 0; - for (int ix = 0; ix < kTwoSecFrames; ix += ctx.frames) { + for (int ix = 0; ix < ctx.total_packets; ++ix) { + // Listen for a signal from the Audio Stream that it wants data. This is a + // blocking call and will not proceed until we receive the signal. if (ctx.socket->Receive(&control_signal, sizeof(control_signal)) == 0) break; base::TimeDelta delay = @@ -553,6 +574,8 @@ DWORD __stdcall SyncSocketThread(void* context) { base::TimeTicks() + base::TimeDelta::FromMicroseconds( ctx.buffer->params.delay_timestamp_us); sine.OnMoreData(delay, delay_timestamp, 0, audio_bus.get()); + + // Send the audio data to the Audio Stream. ctx.socket->Send(data.get(), ctx.packet_size_bytes); } @@ -572,6 +595,9 @@ TEST_F(WinAudioTest, SyncSocketBasic) { static const int sample_rate = AudioParameters::kAudioCDSampleRate; static const uint32_t kSamples20ms = sample_rate / 50; + // We want 2 seconds of audio, which means we need 100 packets as each packet + // contains 20ms worth of audio samples. + static const int kPackets2s = 100; AudioParameters params(AudioParameters::AUDIO_PCM_LINEAR, CHANNEL_LAYOUT_MONO, sample_rate, kSamples20ms); @@ -581,11 +607,20 @@ TEST_F(WinAudioTest, SyncSocketBasic) { ASSERT_TRUE(oas->Open()); + // Create two sockets and connect them with a named pipe. base::SyncSocket sockets[2]; ASSERT_TRUE(base::SyncSocket::CreatePair(&sockets[0], &sockets[1])); - SyncSocketSource source(&sockets[0], params); + // Give one socket to the source, which receives requests from the + // AudioOutputStream for more data. On such a request, it will send a control + // signal to the SyncThreadContext, then it will receive + // an audio packet back which it will give to the AudioOutputStream. + SyncSocketSource source(&sockets[0], params, kPackets2s); + // Give the other socket to the thread. This thread runs a loop that will + // generate enough audio packets for 2 seconds worth of audio. It will listen + // for a control signal and when it gets one it will write one audio packet + // to the pipe that connects the two sockets. SyncThreadContext thread_context; thread_context.sample_rate = params.sample_rate(); thread_context.sine_freq = 200.0; @@ -594,15 +629,22 @@ TEST_F(WinAudioTest, SyncSocketBasic) { thread_context.channels = params.channels(); thread_context.socket = &sockets[1]; thread_context.buffer = source.output_buffer(); + thread_context.total_packets = kPackets2s; HANDLE thread = ::CreateThread(NULL, 0, SyncSocketThread, &thread_context, 0, NULL); + // Start the AudioOutputStream, which will request data via + // SyncSocketSource::OnMoreData until the SyncThreadContext has run out of + // data to give. oas->Start(&source); + // Wait for the SyncThreadContext to finish its loop, should take 2 seconds. + // During this time it is providing audio data as described above. ::WaitForSingleObject(thread, INFINITE); ::CloseHandle(thread); + // Once no more data is being sent, we can stop and close the stream. oas->Stop(); oas->Close(); } diff --git a/chromium/media/audio/win/avrt_wrapper_win.cc b/chromium/media/audio/win/avrt_wrapper_win.cc index 2fb716fcb59..6e3c1f75112 100644 --- a/chromium/media/audio/win/avrt_wrapper_win.cc +++ b/chromium/media/audio/win/avrt_wrapper_win.cc @@ -4,7 +4,7 @@ #include "media/audio/win/avrt_wrapper_win.h" -#include "base/logging.h" +#include "base/check.h" #include "base/stl_util.h" namespace avrt { @@ -23,7 +23,7 @@ bool Initialize() { if (!g_set_mm_thread_priority) { // The avrt.dll is available on Windows Vista and later. wchar_t path[MAX_PATH] = {0}; - ExpandEnvironmentStrings(L"%WINDIR%\\system32\\avrt.dll", path, + ExpandEnvironmentStrings(L"%SystemRoot%\\system32\\avrt.dll", path, base::size(path)); g_avrt = LoadLibraryExW(path, NULL, LOAD_WITH_ALTERED_SEARCH_PATH); if (!g_avrt) |