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

Side by Side Diff: ui/display/chromeos/display_configurator_unittest.cc

Issue 1130823003: Wait for display configuration to finish before suspending (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: unittests Created 5 years, 7 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ui/display/chromeos/display_configurator.h" 5 #include "ui/display/chromeos/display_configurator.h"
6 6
7 #include "base/memory/scoped_vector.h" 7 #include "base/memory/scoped_vector.h"
8 #include "base/message_loop/message_loop.h" 8 #include "base/message_loop/message_loop.h"
9 #include "testing/gtest/include/gtest/gtest.h" 9 #include "testing/gtest/include/gtest/gtest.h"
10 #include "ui/display/chromeos/test/action_logger_util.h" 10 #include "ui/display/chromeos/test/action_logger_util.h"
(...skipping 641 matching lines...) Expand 10 before | Expand all | Expand 10 after
652 } 652 }
653 653
654 TEST_F(DisplayConfiguratorTest, SuspendAndResume) { 654 TEST_F(DisplayConfiguratorTest, SuspendAndResume) {
655 InitWithSingleOutput(); 655 InitWithSingleOutput();
656 656
657 // No preparation is needed before suspending when the display is already 657 // No preparation is needed before suspending when the display is already
658 // on. The configurator should still reprobe on resume in case a display 658 // on. The configurator should still reprobe on resume in case a display
659 // was connected while suspended. 659 // was connected while suspended.
660 const gfx::Size framebuffer_size = configurator_.framebuffer_size(); 660 const gfx::Size framebuffer_size = configurator_.framebuffer_size();
661 DCHECK(!framebuffer_size.IsEmpty()); 661 DCHECK(!framebuffer_size.IsEmpty());
662 configurator_.SuspendDisplays(); 662 configurator_.SuspendDisplays(base::Bind(
663 &DisplayConfiguratorTest::OnConfiguredCallback, base::Unretained(this)));
664 EXPECT_EQ(CALLBACK_SUCCESS, PopCallbackResult());
663 EXPECT_EQ(framebuffer_size.ToString(), 665 EXPECT_EQ(framebuffer_size.ToString(),
664 configurator_.framebuffer_size().ToString()); 666 configurator_.framebuffer_size().ToString());
665 EXPECT_EQ(kNoActions, log_->GetActionsAndClear()); 667 EXPECT_EQ(kNoActions, log_->GetActionsAndClear());
666 configurator_.ResumeDisplays(); 668 configurator_.ResumeDisplays();
667 EXPECT_TRUE(test_api_.TriggerConfigureTimeout()); 669 EXPECT_TRUE(test_api_.TriggerConfigureTimeout());
668 EXPECT_EQ( 670 EXPECT_EQ(
669 JoinActions( 671 JoinActions(
670 kGrab, 672 kGrab,
671 GetFramebufferAction(small_mode_.size(), &outputs_[0], NULL).c_str(), 673 GetFramebufferAction(small_mode_.size(), &outputs_[0], NULL).c_str(),
672 GetCrtcAction(outputs_[0], &small_mode_, gfx::Point(0, 0)).c_str(), 674 GetCrtcAction(outputs_[0], &small_mode_, gfx::Point(0, 0)).c_str(),
(...skipping 12 matching lines...) Expand all
685 EXPECT_EQ(CALLBACK_SUCCESS, PopCallbackResult()); 687 EXPECT_EQ(CALLBACK_SUCCESS, PopCallbackResult());
686 EXPECT_EQ( 688 EXPECT_EQ(
687 JoinActions( 689 JoinActions(
688 kGrab, 690 kGrab,
689 GetFramebufferAction(small_mode_.size(), &outputs_[0], NULL).c_str(), 691 GetFramebufferAction(small_mode_.size(), &outputs_[0], NULL).c_str(),
690 GetCrtcAction(outputs_[0], NULL, gfx::Point(0, 0)).c_str(), 692 GetCrtcAction(outputs_[0], NULL, gfx::Point(0, 0)).c_str(),
691 kUngrab, 693 kUngrab,
692 NULL), 694 NULL),
693 log_->GetActionsAndClear()); 695 log_->GetActionsAndClear());
694 696
695 configurator_.SuspendDisplays(); 697 configurator_.SuspendDisplays(base::Bind(
698 &DisplayConfiguratorTest::OnConfiguredCallback, base::Unretained(this)));
699 EXPECT_EQ(CALLBACK_SUCCESS, PopCallbackResult());
696 EXPECT_EQ( 700 EXPECT_EQ(
697 JoinActions( 701 JoinActions(
698 kGrab, 702 kGrab,
699 GetFramebufferAction(small_mode_.size(), &outputs_[0], NULL).c_str(), 703 GetFramebufferAction(small_mode_.size(), &outputs_[0], NULL).c_str(),
700 GetCrtcAction(outputs_[0], &small_mode_, gfx::Point(0, 0)).c_str(), 704 GetCrtcAction(outputs_[0], &small_mode_, gfx::Point(0, 0)).c_str(),
701 kForceDPMS, 705 kForceDPMS,
702 kUngrab, 706 kUngrab,
703 kSync, 707 kSync,
704 NULL), 708 NULL),
705 log_->GetActionsAndClear()); 709 log_->GetActionsAndClear());
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
740 EXPECT_EQ( 744 EXPECT_EQ(
741 JoinActions(kGrab, 745 JoinActions(kGrab,
742 GetFramebufferAction( 746 GetFramebufferAction(
743 small_mode_.size(), &outputs_[0], &outputs_[1]).c_str(), 747 small_mode_.size(), &outputs_[0], &outputs_[1]).c_str(),
744 GetCrtcAction(outputs_[0], NULL, gfx::Point(0, 0)).c_str(), 748 GetCrtcAction(outputs_[0], NULL, gfx::Point(0, 0)).c_str(),
745 GetCrtcAction(outputs_[1], NULL, gfx::Point(0, 0)).c_str(), 749 GetCrtcAction(outputs_[1], NULL, gfx::Point(0, 0)).c_str(),
746 kUngrab, 750 kUngrab,
747 NULL), 751 NULL),
748 log_->GetActionsAndClear()); 752 log_->GetActionsAndClear());
749 753
750 configurator_.SuspendDisplays(); 754 configurator_.SuspendDisplays(base::Bind(
755 &DisplayConfiguratorTest::OnConfiguredCallback, base::Unretained(this)));
756 EXPECT_EQ(CALLBACK_SUCCESS, PopCallbackResult());
751 EXPECT_EQ(JoinActions(kGrab, kUngrab, kSync, NULL), 757 EXPECT_EQ(JoinActions(kGrab, kUngrab, kSync, NULL),
752 log_->GetActionsAndClear()); 758 log_->GetActionsAndClear());
753 759
754 // If a display is disconnected while suspended, the configurator should 760 // If a display is disconnected while suspended, the configurator should
755 // pick up the change. 761 // pick up the change.
756 UpdateOutputs(1, false); 762 UpdateOutputs(1, false);
757 configurator_.ResumeDisplays(); 763 configurator_.ResumeDisplays();
758 EXPECT_TRUE(test_api_.TriggerConfigureTimeout()); 764 EXPECT_TRUE(test_api_.TriggerConfigureTimeout());
759 EXPECT_EQ( 765 EXPECT_EQ(
760 JoinActions( 766 JoinActions(
(...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after
1013 log_->GetActionsAndClear()); 1019 log_->GetActionsAndClear());
1014 } 1020 }
1015 1021
1016 TEST_F(DisplayConfiguratorTest, DoNotConfigureWithSuspendedDisplays) { 1022 TEST_F(DisplayConfiguratorTest, DoNotConfigureWithSuspendedDisplays) {
1017 InitWithSingleOutput(); 1023 InitWithSingleOutput();
1018 1024
1019 // The DisplayConfigurator may occasionally receive OnConfigurationChanged() 1025 // The DisplayConfigurator may occasionally receive OnConfigurationChanged()
1020 // after the displays have been suspended. This event should be ignored since 1026 // after the displays have been suspended. This event should be ignored since
1021 // the DisplayConfigurator will force a probe and reconfiguration of displays 1027 // the DisplayConfigurator will force a probe and reconfiguration of displays
1022 // at resume time. 1028 // at resume time.
1023 configurator_.SuspendDisplays(); 1029 configurator_.SuspendDisplays(base::Bind(
1030 &DisplayConfiguratorTest::OnConfiguredCallback, base::Unretained(this)));
1031 EXPECT_EQ(CALLBACK_SUCCESS, PopCallbackResult());
1024 EXPECT_EQ(kNoActions, log_->GetActionsAndClear()); 1032 EXPECT_EQ(kNoActions, log_->GetActionsAndClear());
1025 1033
1026 // The configuration timer should not be started when the displays 1034 // The configuration timer should not be started when the displays
1027 // are suspended. 1035 // are suspended.
1028 configurator_.OnConfigurationChanged(); 1036 configurator_.OnConfigurationChanged();
1029 EXPECT_FALSE(test_api_.TriggerConfigureTimeout()); 1037 EXPECT_FALSE(test_api_.TriggerConfigureTimeout());
1030 EXPECT_EQ(kNoActions, log_->GetActionsAndClear()); 1038 EXPECT_EQ(kNoActions, log_->GetActionsAndClear());
1031 1039
1032 // Calls to SetDisplayPower and SetDisplayMode should be successful. 1040 // Calls to SetDisplayPower and SetDisplayMode should be successful.
1033 configurator_.SetDisplayPower( 1041 configurator_.SetDisplayPower(
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
1084 GetFramebufferAction(small_mode_.size(), &outputs_[0], NULL).c_str(), 1092 GetFramebufferAction(small_mode_.size(), &outputs_[0], NULL).c_str(),
1085 GetCrtcAction(outputs_[0], &small_mode_, gfx::Point(0, 0)).c_str(), 1093 GetCrtcAction(outputs_[0], &small_mode_, gfx::Point(0, 0)).c_str(),
1086 kForceDPMS, 1094 kForceDPMS,
1087 kUngrab, 1095 kUngrab,
1088 NULL), 1096 NULL),
1089 log_->GetActionsAndClear()); 1097 log_->GetActionsAndClear());
1090 1098
1091 // If a configuration task is pending when the displays are suspended, that 1099 // If a configuration task is pending when the displays are suspended, that
1092 // task should not run either and the timer should be stopped. 1100 // task should not run either and the timer should be stopped.
1093 configurator_.OnConfigurationChanged(); 1101 configurator_.OnConfigurationChanged();
1094 configurator_.SuspendDisplays(); 1102 configurator_.SuspendDisplays(base::Bind(
1103 &DisplayConfiguratorTest::OnConfiguredCallback, base::Unretained(this)));
1104 EXPECT_EQ(CALLBACK_SUCCESS, PopCallbackResult());
1095 EXPECT_EQ(kNoActions, log_->GetActionsAndClear()); 1105 EXPECT_EQ(kNoActions, log_->GetActionsAndClear());
1096 1106
1097 EXPECT_FALSE(test_api_.TriggerConfigureTimeout()); 1107 EXPECT_FALSE(test_api_.TriggerConfigureTimeout());
1098 EXPECT_EQ(kNoActions, log_->GetActionsAndClear()); 1108 EXPECT_EQ(kNoActions, log_->GetActionsAndClear());
1099 1109
1100 configurator_.ResumeDisplays(); 1110 configurator_.ResumeDisplays();
1101 EXPECT_TRUE(test_api_.TriggerConfigureTimeout()); 1111 EXPECT_TRUE(test_api_.TriggerConfigureTimeout());
1102 EXPECT_EQ( 1112 EXPECT_EQ(
1103 JoinActions( 1113 JoinActions(
1104 kGrab, 1114 kGrab,
(...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after
1373 .c_str(), 1383 .c_str(),
1374 GetCrtcAction(outputs_[0], NULL, gfx::Point(0, 0)).c_str(), 1384 GetCrtcAction(outputs_[0], NULL, gfx::Point(0, 0)).c_str(),
1375 GetCrtcAction(outputs_[1], &big_mode_, gfx::Point(0, 0)).c_str(), 1385 GetCrtcAction(outputs_[1], &big_mode_, gfx::Point(0, 0)).c_str(),
1376 kForceDPMS, 1386 kForceDPMS,
1377 kUngrab, 1387 kUngrab,
1378 NULL), 1388 NULL),
1379 log_->GetActionsAndClear()); 1389 log_->GetActionsAndClear());
1380 1390
1381 // Suspend and resume the system. Resuming should post a task to restore the 1391 // Suspend and resume the system. Resuming should post a task to restore the
1382 // previous power state, additionally forcing a probe. 1392 // previous power state, additionally forcing a probe.
1383 configurator_.SuspendDisplays(); 1393 configurator_.SuspendDisplays(base::Bind(
1394 &DisplayConfiguratorTest::OnConfiguredCallback, base::Unretained(this)));
1395 EXPECT_EQ(CALLBACK_SUCCESS, PopCallbackResult());
1384 configurator_.ResumeDisplays(); 1396 configurator_.ResumeDisplays();
1385 1397
1386 // Before the task runs, exit docked mode. 1398 // Before the task runs, exit docked mode.
1387 configurator_.SetDisplayPower( 1399 configurator_.SetDisplayPower(
1388 chromeos::DISPLAY_POWER_ALL_ON, 1400 chromeos::DISPLAY_POWER_ALL_ON,
1389 DisplayConfigurator::kSetDisplayPowerNoFlags, 1401 DisplayConfigurator::kSetDisplayPowerNoFlags,
1390 base::Bind(&DisplayConfiguratorTest::OnConfiguredCallback, 1402 base::Bind(&DisplayConfiguratorTest::OnConfiguredCallback,
1391 base::Unretained(this))); 1403 base::Unretained(this)));
1392 EXPECT_EQ(CALLBACK_SUCCESS, PopCallbackResult()); 1404 EXPECT_EQ(CALLBACK_SUCCESS, PopCallbackResult());
1393 EXPECT_EQ(2, observer_.num_changes()); 1405 EXPECT_EQ(2, observer_.num_changes());
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
1434 GetFramebufferAction(small_mode_.size(), &outputs_[0], 1446 GetFramebufferAction(small_mode_.size(), &outputs_[0],
1435 nullptr).c_str(), 1447 nullptr).c_str(),
1436 GetCrtcAction(outputs_[0], &small_mode_, 1448 GetCrtcAction(outputs_[0], &small_mode_,
1437 gfx::Point(0, 0)).c_str(), 1449 gfx::Point(0, 0)).c_str(),
1438 kUngrab, NULL), 1450 kUngrab, NULL),
1439 log_->GetActionsAndClear()); 1451 log_->GetActionsAndClear());
1440 } 1452 }
1441 1453
1442 } // namespace test 1454 } // namespace test
1443 } // namespace ui 1455 } // namespace ui
OLDNEW
« ui/display/chromeos/display_configurator.h ('K') | « ui/display/chromeos/display_configurator.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698