Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(20)

Unified Diff: chromeos/audio/cras_audio_handler_unittest.cc

Issue 1199413008: Work around for HDMI audio output rediscovering transistion loss. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Changed to VLOG. Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chromeos/audio/cras_audio_handler.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chromeos/audio/cras_audio_handler_unittest.cc
diff --git a/chromeos/audio/cras_audio_handler_unittest.cc b/chromeos/audio/cras_audio_handler_unittest.cc
index fa5dbc35ba60a5c266c49f4c1517455b8022c1ae..7472a7f16341c747967c360ef48862b287866090 100644
--- a/chromeos/audio/cras_audio_handler_unittest.cc
+++ b/chromeos/audio/cras_audio_handler_unittest.cc
@@ -4,9 +4,12 @@
#include "chromeos/audio/cras_audio_handler.h"
+#include "base/bind.h"
#include "base/memory/ref_counted.h"
#include "base/memory/scoped_ptr.h"
#include "base/message_loop/message_loop.h"
+#include "base/run_loop.h"
+#include "base/thread_task_runner_handle.h"
#include "base/values.h"
#include "chromeos/audio/audio_devices_pref_handler_stub.h"
#include "chromeos/dbus/audio_node.h"
@@ -343,6 +346,18 @@ class CrasAudioHandlerTest : public testing::Test {
return num_active_nodes;
}
+ void SetActiveHDMIRediscover() {
+ cras_audio_handler_->SetActiveHDMIOutoutRediscoveringIfNecessary(true);
+ }
+
+ void SetHDMIRediscoverGracePeriodDuration(int duration_in_ms) {
+ cras_audio_handler_->SetHDMIRediscoverGracePeriodForTesting(duration_in_ms);
+ }
+
+ bool IsDuringHDMIRediscoverGracePeriod() {
+ return cras_audio_handler_->hdmi_rediscovering();
+ }
+
protected:
base::MessageLoopForUI message_loop_;
CrasAudioHandler* cras_audio_handler_; // Not owned.
@@ -354,6 +369,46 @@ class CrasAudioHandlerTest : public testing::Test {
DISALLOW_COPY_AND_ASSIGN(CrasAudioHandlerTest);
};
+class HDMIRediscoverWaiter {
+ public:
+ HDMIRediscoverWaiter(CrasAudioHandlerTest* cras_audio_handler_test,
+ int grace_period_duration_in_ms)
+ : cras_audio_handler_test_(cras_audio_handler_test),
+ grace_period_duration_in_ms_(grace_period_duration_in_ms) {}
+
+ void WaitUntilTimeOut(int wait_duration_in_ms) {
+ base::RunLoop run_loop;
+ base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
+ FROM_HERE, run_loop.QuitClosure(),
+ base::TimeDelta::FromMilliseconds(wait_duration_in_ms));
+ run_loop.Run();
+ }
+
+ void CheckHDMIRediscoverGracePeriodEnd(const base::Closure& quit_loop_func) {
+ if (!cras_audio_handler_test_->IsDuringHDMIRediscoverGracePeriod()) {
+ quit_loop_func.Run();
+ return;
+ }
+ base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
+ FROM_HERE,
+ base::Bind(&HDMIRediscoverWaiter::CheckHDMIRediscoverGracePeriodEnd,
+ base::Unretained(this), quit_loop_func),
+ base::TimeDelta::FromMilliseconds(grace_period_duration_in_ms_ / 4));
+ }
+
+ void WaitUntilHDMIRediscoverGracePeriodEnd() {
+ base::RunLoop run_loop;
+ CheckHDMIRediscoverGracePeriodEnd(run_loop.QuitClosure());
+ run_loop.Run();
+ }
+
+ private:
+ CrasAudioHandlerTest* cras_audio_handler_test_; // not owned
+ int grace_period_duration_in_ms_;
+
+ DISALLOW_COPY_AND_ASSIGN(HDMIRediscoverWaiter);
+};
+
TEST_F(CrasAudioHandlerTest, InitializeWithOnlyDefaultAudioDevices) {
AudioNodeList audio_nodes;
audio_nodes.push_back(kInternalSpeaker);
@@ -2493,4 +2548,53 @@ TEST_F(CrasAudioHandlerTest, ActiveNodeLostDuringLoginSession) {
EXPECT_TRUE(headphone_resumed->active);
}
+// This test HDMI output rediscovering case in crbug.com/503667.
+TEST_F(CrasAudioHandlerTest, HDMIOutputRediscover) {
+ AudioNodeList audio_nodes;
+ audio_nodes.push_back(kInternalSpeaker);
+ audio_nodes.push_back(kHDMIOutput);
+ SetUpCrasAudioHandler(audio_nodes);
+
+ // Verify the HDMI device has been selected as the active output, and audio
+ // output is not muted.
+ AudioDevice active_output;
+ EXPECT_TRUE(
+ cras_audio_handler_->GetPrimaryActiveOutputDevice(&active_output));
+ EXPECT_EQ(kHDMIOutput.id, active_output.id);
+ EXPECT_EQ(kHDMIOutput.id, cras_audio_handler_->GetPrimaryActiveOutputNode());
+ EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
+ EXPECT_FALSE(cras_audio_handler_->IsOutputMuted());
+
+ // Trigger HDMI rediscovering grace period, and remove the HDMI node.
+ const int grace_period_in_ms = 200;
+ SetHDMIRediscoverGracePeriodDuration(grace_period_in_ms);
+ SetActiveHDMIRediscover();
+ AudioNodeList audio_nodes_lost_hdmi;
+ audio_nodes_lost_hdmi.push_back(kInternalSpeaker);
+ ChangeAudioNodes(audio_nodes_lost_hdmi);
+
+ // Verify the active output is switched to internal speaker, it is not muted
+ // by preference, but the system output is muted during the grace period.
+ EXPECT_TRUE(
+ cras_audio_handler_->GetPrimaryActiveOutputDevice(&active_output));
+ EXPECT_EQ(kInternalSpeaker.id, active_output.id);
+ EXPECT_FALSE(
+ cras_audio_handler_->IsOutputMutedForDevice(kInternalSpeaker.id));
+ EXPECT_TRUE(cras_audio_handler_->IsOutputMuted());
+
+ // Re-attach the HDMI device after a little delay.
+ HDMIRediscoverWaiter waiter(this, grace_period_in_ms);
+ waiter.WaitUntilTimeOut(grace_period_in_ms / 4);
+ ChangeAudioNodes(audio_nodes);
+
+ // After HDMI re-discover grace period, verify HDMI output is selected as the
+ // active device and not muted.
+ waiter.WaitUntilHDMIRediscoverGracePeriodEnd();
+ EXPECT_TRUE(
+ cras_audio_handler_->GetPrimaryActiveOutputDevice(&active_output));
+ EXPECT_EQ(kHDMIOutput.id, active_output.id);
+ EXPECT_EQ(kHDMIOutput.id, cras_audio_handler_->GetPrimaryActiveOutputNode());
+ EXPECT_FALSE(cras_audio_handler_->IsOutputMuted());
+}
+
} // namespace chromeos
« no previous file with comments | « chromeos/audio/cras_audio_handler.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698