| Index: ui/display/chromeos/display_configurator_unittest.cc
|
| diff --git a/ui/display/chromeos/display_configurator_unittest.cc b/ui/display/chromeos/display_configurator_unittest.cc
|
| index aaee7b526b67f0730ee70d3bac89e44ff0a0982c..9a4f2d99f266e3e9e8135a61aeb37ec25218f324 100644
|
| --- a/ui/display/chromeos/display_configurator_unittest.cc
|
| +++ b/ui/display/chromeos/display_configurator_unittest.cc
|
| @@ -841,16 +841,9 @@ TEST_F(DisplayConfiguratorTest, SuspendAndResume) {
|
| EXPECT_EQ(CALLBACK_SUCCESS, PopCallbackResult());
|
| EXPECT_EQ(framebuffer_size.ToString(),
|
| configurator_.framebuffer_size().ToString());
|
| - EXPECT_EQ(
|
| - JoinActions(
|
| - kGrab,
|
| - GetFramebufferAction(small_mode_.size(), &outputs_[0], NULL).c_str(),
|
| - GetCrtcAction(outputs_[0], NULL, gfx::Point(0, 0)).c_str(),
|
| - kUngrab,
|
| - kSync,
|
| - NULL),
|
| - log_->GetActionsAndClear());
|
| + EXPECT_EQ(kNoActions, log_->GetActionsAndClear());
|
| configurator_.ResumeDisplays();
|
| + EXPECT_TRUE(test_api_.TriggerConfigureTimeout());
|
| EXPECT_EQ(
|
| JoinActions(
|
| kGrab,
|
| @@ -881,16 +874,19 @@ TEST_F(DisplayConfiguratorTest, SuspendAndResume) {
|
| configurator_.SuspendDisplays(base::Bind(
|
| &DisplayConfiguratorTest::OnConfiguredCallback, base::Unretained(this)));
|
| EXPECT_EQ(CALLBACK_SUCCESS, PopCallbackResult());
|
| - EXPECT_EQ(kSync, log_->GetActionsAndClear());
|
| + EXPECT_EQ(
|
| + JoinActions(
|
| + kGrab,
|
| + GetFramebufferAction(small_mode_.size(), &outputs_[0], NULL).c_str(),
|
| + GetCrtcAction(outputs_[0], &small_mode_, gfx::Point(0, 0)).c_str(),
|
| + kForceDPMS,
|
| + kUngrab,
|
| + kSync,
|
| + NULL),
|
| + log_->GetActionsAndClear());
|
|
|
| configurator_.ResumeDisplays();
|
| - EXPECT_EQ(kNoActions, log_->GetActionsAndClear());
|
| -
|
| - configurator_.SetDisplayPower(
|
| - chromeos::DISPLAY_POWER_ALL_ON,
|
| - DisplayConfigurator::kSetDisplayPowerNoFlags,
|
| - base::Bind(&DisplayConfiguratorTest::OnConfiguredCallback,
|
| - base::Unretained(this)));
|
| + EXPECT_TRUE(test_api_.TriggerConfigureTimeout());
|
| EXPECT_EQ(
|
| JoinActions(
|
| kGrab,
|
| @@ -901,6 +897,8 @@ TEST_F(DisplayConfiguratorTest, SuspendAndResume) {
|
| NULL),
|
| log_->GetActionsAndClear());
|
|
|
| + // If a second, external display is connected, the displays shouldn't be
|
| + // powered back on before suspending.
|
| state_controller_.set_state(MULTIPLE_DISPLAY_STATE_DUAL_MIRROR);
|
| UpdateOutputs(2, true);
|
| EXPECT_EQ(
|
| @@ -921,38 +919,31 @@ TEST_F(DisplayConfiguratorTest, SuspendAndResume) {
|
| base::Unretained(this)));
|
| EXPECT_EQ(CALLBACK_SUCCESS, PopCallbackResult());
|
| EXPECT_EQ(
|
| - JoinActions(
|
| - kGrab,
|
| - GetFramebufferAction(small_mode_.size(), &outputs_[0], &outputs_[1])
|
| - .c_str(),
|
| - GetCrtcAction(outputs_[0], NULL, gfx::Point(0, 0)).c_str(),
|
| - GetCrtcAction(outputs_[1], NULL, gfx::Point(0, 0)).c_str(),
|
| - kUngrab,
|
| - NULL),
|
| + JoinActions(kGrab,
|
| + GetFramebufferAction(
|
| + small_mode_.size(), &outputs_[0], &outputs_[1]).c_str(),
|
| + GetCrtcAction(outputs_[0], NULL, gfx::Point(0, 0)).c_str(),
|
| + GetCrtcAction(outputs_[1], NULL, gfx::Point(0, 0)).c_str(),
|
| + kUngrab,
|
| + NULL),
|
| log_->GetActionsAndClear());
|
|
|
| configurator_.SuspendDisplays(base::Bind(
|
| &DisplayConfiguratorTest::OnConfiguredCallback, base::Unretained(this)));
|
| EXPECT_EQ(CALLBACK_SUCCESS, PopCallbackResult());
|
| - EXPECT_EQ(kSync, log_->GetActionsAndClear());
|
| + EXPECT_EQ(JoinActions(kGrab, kUngrab, kSync, NULL),
|
| + log_->GetActionsAndClear());
|
|
|
| // If a display is disconnected while suspended, the configurator should
|
| - // pick up the change and only turn on the internal display.
|
| + // pick up the change.
|
| UpdateOutputs(1, false);
|
| configurator_.ResumeDisplays();
|
| - EXPECT_EQ(kNoActions, log_->GetActionsAndClear());
|
| -
|
| - configurator_.SetDisplayPower(
|
| - chromeos::DISPLAY_POWER_ALL_ON,
|
| - DisplayConfigurator::kSetDisplayPowerNoFlags,
|
| - base::Bind(&DisplayConfiguratorTest::OnConfiguredCallback,
|
| - base::Unretained(this)));
|
| + EXPECT_TRUE(test_api_.TriggerConfigureTimeout());
|
| EXPECT_EQ(
|
| JoinActions(
|
| kGrab,
|
| GetFramebufferAction(small_mode_.size(), &outputs_[0], NULL).c_str(),
|
| - GetCrtcAction(outputs_[0], &small_mode_, gfx::Point(0, 0)).c_str(),
|
| - kForceDPMS,
|
| + GetCrtcAction(outputs_[0], NULL, gfx::Point(0, 0)).c_str(),
|
| kUngrab,
|
| NULL),
|
| log_->GetActionsAndClear());
|
| @@ -1214,15 +1205,7 @@ TEST_F(DisplayConfiguratorTest, DoNotConfigureWithSuspendedDisplays) {
|
| configurator_.SuspendDisplays(base::Bind(
|
| &DisplayConfiguratorTest::OnConfiguredCallback, base::Unretained(this)));
|
| EXPECT_EQ(CALLBACK_SUCCESS, PopCallbackResult());
|
| - EXPECT_EQ(
|
| - JoinActions(
|
| - kGrab,
|
| - GetFramebufferAction(small_mode_.size(), &outputs_[0], NULL).c_str(),
|
| - GetCrtcAction(outputs_[0], NULL, gfx::Point(0, 0)).c_str(),
|
| - kUngrab,
|
| - kSync,
|
| - NULL),
|
| - log_->GetActionsAndClear());
|
| + EXPECT_EQ(kNoActions, log_->GetActionsAndClear());
|
|
|
| // The configuration timer should not be started when the displays
|
| // are suspended.
|
| @@ -1230,15 +1213,21 @@ TEST_F(DisplayConfiguratorTest, DoNotConfigureWithSuspendedDisplays) {
|
| EXPECT_FALSE(test_api_.TriggerConfigureTimeout());
|
| EXPECT_EQ(kNoActions, log_->GetActionsAndClear());
|
|
|
| - // Calls to SetDisplayPower should do nothing if the power state doesn't
|
| - // change.
|
| + // Calls to SetDisplayPower and SetDisplayMode should be successful.
|
| configurator_.SetDisplayPower(
|
| chromeos::DISPLAY_POWER_ALL_OFF,
|
| DisplayConfigurator::kSetDisplayPowerNoFlags,
|
| base::Bind(&DisplayConfiguratorTest::OnConfiguredCallback,
|
| base::Unretained(this)));
|
| EXPECT_EQ(CALLBACK_SUCCESS, PopCallbackResult());
|
| - EXPECT_EQ(kNoActions, log_->GetActionsAndClear());
|
| + EXPECT_EQ(
|
| + JoinActions(
|
| + kGrab,
|
| + GetFramebufferAction(small_mode_.size(), &outputs_[0], NULL).c_str(),
|
| + GetCrtcAction(outputs_[0], NULL, gfx::Point(0, 0)).c_str(),
|
| + kUngrab,
|
| + NULL),
|
| + log_->GetActionsAndClear());
|
| configurator_.SetDisplayPower(
|
| chromeos::DISPLAY_POWER_ALL_ON,
|
| DisplayConfigurator::kSetDisplayPowerNoFlags,
|
| @@ -1268,33 +1257,34 @@ TEST_F(DisplayConfiguratorTest, DoNotConfigureWithSuspendedDisplays) {
|
| NULL),
|
| log_->GetActionsAndClear());
|
|
|
| - // The DisplayConfigurator should do nothing at resume time if there is no
|
| - // state change.
|
| + // The DisplayConfigurator should force a probe and reconfiguration at resume
|
| + // time.
|
| UpdateOutputs(1, false);
|
| configurator_.ResumeDisplays();
|
| - EXPECT_EQ(kNoActions, log_->GetActionsAndClear());
|
| -
|
| - // If a configuration task is pending when the displays are suspended, that
|
| - // task should not run either and the timer should be stopped. The displays
|
| - // should be turned off by suspend.
|
| - configurator_.OnConfigurationChanged();
|
| - configurator_.SuspendDisplays(base::Bind(
|
| - &DisplayConfiguratorTest::OnConfiguredCallback, base::Unretained(this)));
|
| - EXPECT_EQ(CALLBACK_SUCCESS, PopCallbackResult());
|
| + EXPECT_TRUE(test_api_.TriggerConfigureTimeout());
|
| EXPECT_EQ(
|
| JoinActions(
|
| kGrab,
|
| GetFramebufferAction(small_mode_.size(), &outputs_[0], NULL).c_str(),
|
| - GetCrtcAction(outputs_[0], NULL, gfx::Point(0, 0)).c_str(),
|
| + GetCrtcAction(outputs_[0], &small_mode_, gfx::Point(0, 0)).c_str(),
|
| + kForceDPMS,
|
| kUngrab,
|
| - kSync,
|
| NULL),
|
| log_->GetActionsAndClear());
|
|
|
| + // If a configuration task is pending when the displays are suspended, that
|
| + // task should not run either and the timer should be stopped.
|
| + configurator_.OnConfigurationChanged();
|
| + configurator_.SuspendDisplays(base::Bind(
|
| + &DisplayConfiguratorTest::OnConfiguredCallback, base::Unretained(this)));
|
| + EXPECT_EQ(CALLBACK_SUCCESS, PopCallbackResult());
|
| + EXPECT_EQ(kNoActions, log_->GetActionsAndClear());
|
| +
|
| EXPECT_FALSE(test_api_.TriggerConfigureTimeout());
|
| EXPECT_EQ(kNoActions, log_->GetActionsAndClear());
|
|
|
| configurator_.ResumeDisplays();
|
| + EXPECT_TRUE(test_api_.TriggerConfigureTimeout());
|
| EXPECT_EQ(
|
| JoinActions(
|
| kGrab,
|
| @@ -1574,24 +1564,12 @@ TEST_F(DisplayConfiguratorTest, DontRestoreStalePowerStateAfterResume) {
|
| NULL),
|
| log_->GetActionsAndClear());
|
|
|
| - // Suspend and resume the system. Resuming should restore the previous power
|
| - // state and force a probe. Suspend should turn off the displays since an
|
| - // external monitor is connected.
|
| + // Suspend and resume the system. Resuming should post a task to restore the
|
| + // previous power state, additionally forcing a probe.
|
| configurator_.SuspendDisplays(base::Bind(
|
| &DisplayConfiguratorTest::OnConfiguredCallback, base::Unretained(this)));
|
| EXPECT_EQ(CALLBACK_SUCCESS, PopCallbackResult());
|
| - EXPECT_EQ(2, observer_.num_changes());
|
| - EXPECT_EQ(
|
| - JoinActions(
|
| - kGrab,
|
| - GetFramebufferAction(small_mode_.size(), &outputs_[0],
|
| - &outputs_[1]).c_str(),
|
| - GetCrtcAction(outputs_[0], NULL, gfx::Point(0, 0)).c_str(),
|
| - GetCrtcAction(outputs_[1], NULL, gfx::Point(0, 0)).c_str(),
|
| - kUngrab,
|
| - kSync,
|
| - NULL),
|
| - log_->GetActionsAndClear());
|
| + configurator_.ResumeDisplays();
|
|
|
| // Before the task runs, exit docked mode.
|
| configurator_.SetDisplayPower(
|
| @@ -1600,7 +1578,7 @@ TEST_F(DisplayConfiguratorTest, DontRestoreStalePowerStateAfterResume) {
|
| base::Bind(&DisplayConfiguratorTest::OnConfiguredCallback,
|
| base::Unretained(this)));
|
| EXPECT_EQ(CALLBACK_SUCCESS, PopCallbackResult());
|
| - EXPECT_EQ(3, observer_.num_changes());
|
| + EXPECT_EQ(2, observer_.num_changes());
|
| EXPECT_EQ(0, observer_.num_failures());
|
| EXPECT_EQ(
|
| JoinActions(
|
| @@ -1614,9 +1592,20 @@ TEST_F(DisplayConfiguratorTest, DontRestoreStalePowerStateAfterResume) {
|
| NULL),
|
| log_->GetActionsAndClear());
|
|
|
| - // Check that the display states are not changed after resuming.
|
| - configurator_.ResumeDisplays();
|
| - EXPECT_EQ(kNoActions, log_->GetActionsAndClear());
|
| + // Check that the task doesn't restore the old internal-off-external-on power
|
| + // state.
|
| + EXPECT_TRUE(test_api_.TriggerConfigureTimeout());
|
| + EXPECT_EQ(
|
| + JoinActions(
|
| + kGrab,
|
| + GetFramebufferAction(small_mode_.size(), &outputs_[0], &outputs_[1])
|
| + .c_str(),
|
| + GetCrtcAction(outputs_[0], &small_mode_, gfx::Point(0, 0)).c_str(),
|
| + GetCrtcAction(outputs_[1], &small_mode_, gfx::Point(0, 0)).c_str(),
|
| + kForceDPMS,
|
| + kUngrab,
|
| + NULL),
|
| + log_->GetActionsAndClear());
|
| }
|
|
|
| TEST_F(DisplayConfiguratorTest, ExternalControl) {
|
|
|