summaryrefslogtreecommitdiff
path: root/chromium/media/audio
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2020-10-06 12:48:11 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2020-10-13 09:33:43 +0000
commit7b5b123ac58f58ffde0f4f6e488bcd09aa4decd3 (patch)
treefa14ba0ca8d2683ba2efdabd246dc9b18a1229c6 /chromium/media/audio
parent79b4f909db1049fca459c07cca55af56a9b54fe3 (diff)
downloadqtwebengine-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.cc2
-rw-r--r--chromium/media/audio/audio_device_description.cc2
-rw-r--r--chromium/media/audio/audio_device_thread.cc2
-rw-r--r--chromium/media/audio/audio_input_device.cc11
-rw-r--r--chromium/media/audio/audio_output_device.cc3
-rw-r--r--chromium/media/audio/audio_output_device_thread_callback.cc50
-rw-r--r--chromium/media/audio/audio_output_device_thread_callback.h20
-rw-r--r--chromium/media/audio/audio_output_proxy.cc2
-rw-r--r--chromium/media/audio/cras/audio_manager_cras.cc2
-rw-r--r--chromium/media/audio/fake_audio_output_stream.cc2
-rw-r--r--chromium/media/audio/mock_audio_manager.cc2
-rw-r--r--chromium/media/audio/pulse/pulse_input.cc2
-rw-r--r--chromium/media/audio/simple_sources_unittest.cc1
-rw-r--r--chromium/media/audio/wav_audio_handler_unittest.cc1
-rw-r--r--chromium/media/audio/win/audio_output_win_unittest.cc72
-rw-r--r--chromium/media/audio/win/avrt_wrapper_win.cc4
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)