Commit fb67134b authored by Dale Curtis's avatar Dale Curtis Committed by Commit Bot

Remove incorrect DCHECK for suspend muted audio feature.

When we get bad device info, we don't setup the NullAudioSink for
the suspend muted audio feature (we're already on a NullAudioSink).

R=tmathmeyer

Fixed: 1110780
Test: New unittest.
Change-Id: I258db545723c0cdf4ab6a8a4ca319c4c88da8e83
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2327250
Commit-Queue: Dale Curtis <dalecurtis@chromium.org>
Commit-Queue: Ted Meyer <tmathmeyer@chromium.org>
Auto-Submit: Dale Curtis <dalecurtis@chromium.org>
Reviewed-by: default avatarTed Meyer <tmathmeyer@chromium.org>
Cr-Commit-Position: refs/heads/master@{#792916}
parent 94517080
...@@ -661,7 +661,8 @@ void AudioRendererImpl::OnAudioDecoderStreamInitialized(bool success) { ...@@ -661,7 +661,8 @@ void AudioRendererImpl::OnAudioDecoderStreamInitialized(bool success) {
null_sink_->Start(); // Does nothing but reduce state bookkeeping. null_sink_->Start(); // Does nothing but reduce state bookkeeping.
real_sink_needs_start_ = true; real_sink_needs_start_ = true;
} else { } else {
DCHECK(!base::FeatureList::IsEnabled(kSuspendMutedAudio)); // Even when kSuspendMutedAudio is enabled, we can hit this path if we are
// exclusively using NullAudioSink due to OnDeviceInfoReceived() failure.
sink_->Start(); sink_->Start();
sink_->Pause(); // Sinks play on start. sink_->Pause(); // Sinks play on start.
} }
...@@ -733,7 +734,8 @@ void AudioRendererImpl::SetVolume(float volume) { ...@@ -733,7 +734,8 @@ void AudioRendererImpl::SetVolume(float volume) {
sink_->SetVolume(volume); sink_->SetVolume(volume);
if (!null_sink_) { if (!null_sink_) {
DCHECK(!base::FeatureList::IsEnabled(kSuspendMutedAudio)); // Either null sink suspension is not enabled or we're already on the null
// sink due to failing to get device parameters.
return; return;
} }
......
...@@ -1401,6 +1401,47 @@ TEST_F(AudioRendererImplTest, BitstreamEndOfStream) { ...@@ -1401,6 +1401,47 @@ TEST_F(AudioRendererImplTest, BitstreamEndOfStream) {
SetMediaClient(nullptr); SetMediaClient(nullptr);
} }
TEST_F(AudioRendererImplTest, MutedPlaybackBadDeviceInfo) {
base::test::ScopedFeatureList scoped_feature_list_;
scoped_feature_list_.InitAndEnableFeature(kSuspendMutedAudio);
mock_sink_ = base::MakeRefCounted<MockAudioRendererSink>(
std::string(), OUTPUT_DEVICE_STATUS_ERROR_NOT_AUTHORIZED,
AudioParameters());
renderer_ = std::make_unique<AudioRendererImpl>(
main_thread_task_runner_, mock_sink_.get(),
base::BindRepeating(&AudioRendererImplTest::CreateAudioDecoderForTest,
base::Unretained(this)),
&media_log_, nullptr);
testing::Mock::VerifyAndClearExpectations(&demuxer_stream_);
ConfigureDemuxerStream(true);
EXPECT_CALL(*mock_sink_, SetVolume(0)).Times(0);
renderer_->SetVolume(0);
// Playback startup should use never touch our passed in sink, since an
// internal NullAudioSink is always used for bad device info.
EXPECT_CALL(*mock_sink_, Start()).Times(0);
Initialize();
Preroll();
StartTicking();
EXPECT_CALL(*mock_sink_, Pause()).Times(0);
StopTicking();
EXPECT_CALL(*mock_sink_, Play()).Times(0);
StartTicking();
testing::Mock::VerifyAndClearExpectations(mock_sink_.get());
EXPECT_CALL(*mock_sink_, SetVolume(1)).Times(0);
EXPECT_CALL(*mock_sink_, Start()).Times(0);
EXPECT_CALL(*mock_sink_, Play()).Times(0);
renderer_->SetVolume(1);
EXPECT_CALL(*mock_sink_, Pause()).Times(0);
StopTicking();
EXPECT_CALL(*mock_sink_, Stop()).Times(0);
}
TEST_F(AudioRendererImplTest, BasicMutedPlayback) { TEST_F(AudioRendererImplTest, BasicMutedPlayback) {
base::test::ScopedFeatureList scoped_feature_list_; base::test::ScopedFeatureList scoped_feature_list_;
scoped_feature_list_.InitAndEnableFeature(kSuspendMutedAudio); scoped_feature_list_.InitAndEnableFeature(kSuspendMutedAudio);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment