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

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

Issue 652073002: chromeos: Don't apply stale display power state after resume (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: add a test Created 6 years, 2 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/bind.h" 7 #include "base/bind.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/strings/string_number_conversions.h" 10 #include "base/strings/string_number_conversions.h"
(...skipping 499 matching lines...) Expand 10 before | Expand all | Expand 10 after
510 510
511 NotifyObservers(success, new_state); 511 NotifyObservers(success, new_state);
512 return success; 512 return success;
513 } 513 }
514 514
515 void DisplayConfigurator::OnConfigurationChanged() { 515 void DisplayConfigurator::OnConfigurationChanged() {
516 // Configure displays with |kConfigureDelayMs| delay, 516 // Configure displays with |kConfigureDelayMs| delay,
517 // so that time-consuming ConfigureDisplays() won't be called multiple times. 517 // so that time-consuming ConfigureDisplays() won't be called multiple times.
518 if (configure_timer_.IsRunning()) { 518 if (configure_timer_.IsRunning()) {
519 // Note: when the timer is running it is possible that a different task 519 // Note: when the timer is running it is possible that a different task
520 // (SetDisplayPower()) is scheduled. In these cases, prefer the already 520 // (RestoreRequestedPowerStateAfterResume()) is scheduled. In these cases,
521 // scheduled task to ConfigureDisplays() since ConfigureDisplays() performs 521 // prefer the already scheduled task to ConfigureDisplays() since
522 // only basic configuration while SetDisplayPower() will perform additional 522 // ConfigureDisplays() performs only basic configuration while
523 // RestoreRequestedPowerStateAfterResume() will perform additional
523 // operations. 524 // operations.
524 configure_timer_.Reset(); 525 configure_timer_.Reset();
525 } else { 526 } else {
526 configure_timer_.Start( 527 configure_timer_.Start(
527 FROM_HERE, 528 FROM_HERE,
528 base::TimeDelta::FromMilliseconds(kConfigureDelayMs), 529 base::TimeDelta::FromMilliseconds(kConfigureDelayMs),
529 this, 530 this,
530 &DisplayConfigurator::ConfigureDisplays); 531 &DisplayConfigurator::ConfigureDisplays);
531 } 532 }
532 } 533 }
(...skipping 17 matching lines...) Expand all
550 kSetDisplayPowerOnlyIfSingleInternalDisplay); 551 kSetDisplayPowerOnlyIfSingleInternalDisplay);
551 552
552 // We need to make sure that the monitor configuration we just did actually 553 // We need to make sure that the monitor configuration we just did actually
553 // completes before we return, because otherwise the X message could be 554 // completes before we return, because otherwise the X message could be
554 // racing with the HandleSuspendReadiness message. 555 // racing with the HandleSuspendReadiness message.
555 native_display_delegate_->SyncWithServer(); 556 native_display_delegate_->SyncWithServer();
556 } 557 }
557 } 558 }
558 559
559 void DisplayConfigurator::ResumeDisplays() { 560 void DisplayConfigurator::ResumeDisplays() {
560 // Force probing to ensure that we pick up any changes that were made
561 // while the system was suspended.
562 configure_timer_.Start( 561 configure_timer_.Start(
563 FROM_HERE, 562 FROM_HERE,
564 base::TimeDelta::FromMilliseconds(kResumeDelayMs), 563 base::TimeDelta::FromMilliseconds(kResumeDelayMs),
565 base::Bind(base::IgnoreResult(&DisplayConfigurator::SetDisplayPower), 564 base::Bind(&DisplayConfigurator::RestoreRequestedPowerStateAfterResume,
566 base::Unretained(this), 565 base::Unretained(this)));
567 requested_power_state_,
568 kSetDisplayPowerForceProbe));
569 } 566 }
570 567
571 void DisplayConfigurator::UpdateCachedDisplays() { 568 void DisplayConfigurator::UpdateCachedDisplays() {
572 std::vector<DisplaySnapshot*> snapshots = 569 std::vector<DisplaySnapshot*> snapshots =
573 native_display_delegate_->GetDisplays(); 570 native_display_delegate_->GetDisplays();
574 571
575 cached_displays_.clear(); 572 cached_displays_.clear();
576 for (size_t i = 0; i < snapshots.size(); ++i) { 573 for (size_t i = 0; i < snapshots.size(); ++i) {
577 DisplayState display_state; 574 DisplayState display_state;
578 display_state.display = snapshots[i]; 575 display_state.display = snapshots[i];
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
718 UpdateCachedDisplays(); 715 UpdateCachedDisplays();
719 const MultipleDisplayState new_state = ChooseDisplayState( 716 const MultipleDisplayState new_state = ChooseDisplayState(
720 requested_power_state_); 717 requested_power_state_);
721 const bool success = EnterStateOrFallBackToSoftwareMirroring( 718 const bool success = EnterStateOrFallBackToSoftwareMirroring(
722 new_state, requested_power_state_); 719 new_state, requested_power_state_);
723 native_display_delegate_->UngrabServer(); 720 native_display_delegate_->UngrabServer();
724 721
725 NotifyObservers(success, new_state); 722 NotifyObservers(success, new_state);
726 } 723 }
727 724
725 void DisplayConfigurator::RestoreRequestedPowerStateAfterResume() {
726 // Force probing to ensure that we pick up any changes that were made while
727 // the system was suspended.
728 SetDisplayPower(requested_power_state_, kSetDisplayPowerForceProbe);
729 }
730
728 void DisplayConfigurator::NotifyObservers( 731 void DisplayConfigurator::NotifyObservers(
729 bool success, 732 bool success,
730 MultipleDisplayState attempted_state) { 733 MultipleDisplayState attempted_state) {
731 if (success) { 734 if (success) {
732 FOR_EACH_OBSERVER( 735 FOR_EACH_OBSERVER(
733 Observer, observers_, OnDisplayModeChanged(cached_displays_)); 736 Observer, observers_, OnDisplayModeChanged(cached_displays_));
734 } else { 737 } else {
735 FOR_EACH_OBSERVER( 738 FOR_EACH_OBSERVER(
736 Observer, observers_, OnDisplayModeChangeFailed(attempted_state)); 739 Observer, observers_, OnDisplayModeChangeFailed(attempted_state));
737 } 740 }
(...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after
966 return state_controller_->GetStateForDisplayIds(display_ids); 969 return state_controller_->GetStateForDisplayIds(display_ids);
967 } 970 }
968 } 971 }
969 default: 972 default:
970 NOTREACHED(); 973 NOTREACHED();
971 } 974 }
972 return MULTIPLE_DISPLAY_STATE_INVALID; 975 return MULTIPLE_DISPLAY_STATE_INVALID;
973 } 976 }
974 977
975 } // namespace ui 978 } // namespace ui
OLDNEW
« 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