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

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
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..39d38a8b4c9f6a2604d812f1d7c1c69c39c87d2f 100644
--- a/ui/display/chromeos/display_configurator.cc
+++ b/ui/display/chromeos/display_configurator.cc
@@ -26,6 +26,12 @@ typedef std::vector<const DisplayMode*> DisplayModeList;
// in |Dispatch()|.
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;

Powered by Google App Engine
This is Rietveld 408576698