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

Unified Diff: ui/display/chromeos/display_configurator.cc

Issue 463633005: On resume perform a delayed call to SetDisplayPower() (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 6 years, 4 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 | « ui/display/chromeos/display_configurator.h ('k') | ui/display/chromeos/display_configurator_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/display/chromeos/display_configurator.cc
diff --git a/ui/display/chromeos/display_configurator.cc b/ui/display/chromeos/display_configurator.cc
index a63b2567c1050bcf861681e907cffcfa2e8c3f66..f25f05a94342de085e130ac3da5429019c067406 100644
--- a/ui/display/chromeos/display_configurator.cc
+++ b/ui/display/chromeos/display_configurator.cc
@@ -22,10 +22,16 @@ namespace {
typedef std::vector<const DisplayMode*> DisplayModeList;
-// The delay to perform configuration after RRNotify. See the comment
-// in |Dispatch()|.
+// The delay to perform configuration after RRNotify. See the comment for
+// |configure_timer_|.
const int kConfigureDelayMs = 500;
+// The delay spent before reading the display configuration after coming out of
+// suspend. While coming out of suspend the display state may be updating. This
+// is used to wait until the hardware had a chance to update the display state
+// such that we read an up to date state.
+const int kResumeDelayMs = 500;
+
// Returns a string describing |state|.
std::string DisplayPowerStateToString(chromeos::DisplayPowerState state) {
switch (state) {
@@ -89,6 +95,12 @@ int GetDisplayPower(
} // namespace
+
+const int DisplayConfigurator::kSetDisplayPowerNoFlags = 0;
+const int DisplayConfigurator::kSetDisplayPowerForceProbe = 1 << 0;
+const int
+DisplayConfigurator::kSetDisplayPowerOnlyIfSingleInternalDisplay = 1 << 1;
+
DisplayConfigurator::DisplayState::DisplayState()
: display(NULL),
touch_device_id(0),
@@ -96,10 +108,9 @@ DisplayConfigurator::DisplayState::DisplayState()
mirror_mode(NULL) {}
bool DisplayConfigurator::TestApi::TriggerConfigureTimeout() {
- if (configurator_->configure_timer_.get() &&
- configurator_->configure_timer_->IsRunning()) {
- configurator_->configure_timer_.reset();
- configurator_->ConfigureDisplays();
+ if (configurator_->configure_timer_.IsRunning()) {
+ configurator_->configure_timer_.user_task().Run();
+ configurator_->configure_timer_.Stop();
return true;
} else {
return false;
@@ -437,8 +448,7 @@ bool DisplayConfigurator::SetDisplayPower(
VLOG(1) << "SetDisplayPower: power_state="
<< DisplayPowerStateToString(power_state) << " flags=" << flags
<< ", configure timer="
- << ((configure_timer_.get() && configure_timer_->IsRunning()) ?
- "Running" : "Stopped");
+ << (configure_timer_.IsRunning() ? "Running" : "Stopped");
if (power_state == power_state_ && !(flags & kSetDisplayPowerForceProbe))
return true;
@@ -499,11 +509,15 @@ bool DisplayConfigurator::SetDisplayMode(MultipleDisplayState new_state) {
void DisplayConfigurator::OnConfigurationChanged() {
// Configure displays with |kConfigureDelayMs| delay,
// so that time-consuming ConfigureDisplays() won't be called multiple times.
- if (configure_timer_.get()) {
- configure_timer_->Reset();
+ if (configure_timer_.IsRunning()) {
+ // Note: when the timer is running it is possible that a different task
+ // (SetDisplayPower()) is scheduled. In these cases, prefer the already
+ // scheduled task to ConfigureDisplays() since ConfigureDisplays() performs
+ // only basic configuration while SetDisplayPower() will perform additional
+ // operations.
+ configure_timer_.Reset();
} else {
- configure_timer_.reset(new base::OneShotTimer<DisplayConfigurator>());
- configure_timer_->Start(
+ configure_timer_.Start(
FROM_HERE,
base::TimeDelta::FromMilliseconds(kConfigureDelayMs),
this,
@@ -539,7 +553,13 @@ void DisplayConfigurator::SuspendDisplays() {
void DisplayConfigurator::ResumeDisplays() {
// Force probing to ensure that we pick up any changes that were made
// while the system was suspended.
- SetDisplayPower(power_state_, kSetDisplayPowerForceProbe);
+ configure_timer_.Start(
+ FROM_HERE,
+ base::TimeDelta::FromMilliseconds(kResumeDelayMs),
+ base::Bind(base::IgnoreResult(&DisplayConfigurator::SetDisplayPower),
+ base::Unretained(this),
+ power_state_,
+ kSetDisplayPowerForceProbe));
}
void DisplayConfigurator::UpdateCachedDisplays() {
@@ -687,8 +707,6 @@ bool DisplayConfigurator::FindMirrorMode(DisplayState* internal_display,
}
void DisplayConfigurator::ConfigureDisplays() {
- configure_timer_.reset();
-
if (!configure_display_)
return;
« no previous file with comments | « ui/display/chromeos/display_configurator.h ('k') | ui/display/chromeos/display_configurator_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698