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

Side by Side Diff: chromeos/display/output_configurator.cc

Issue 11624038: [In progress] Monitor suspend code (Closed) Base URL: https://git.chromium.org/git/chromium/src@git-svn
Patch Set: Created 7 years, 12 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
« no previous file with comments | « chromeos/display/output_configurator.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "chromeos/display/output_configurator.h" 5 #include "chromeos/display/output_configurator.h"
6 6
7 #include <cmath> 7 #include <cmath>
8 8
9 #include <X11/Xatom.h> 9 #include <X11/Xatom.h>
10 #include <X11/Xlib.h> 10 #include <X11/Xlib.h>
(...skipping 752 matching lines...) Expand 10 before | Expand all | Expand 10 after
763 XRRFreeScreenResources(screen); 763 XRRFreeScreenResources(screen);
764 XUngrabServer(display); 764 XUngrabServer(display);
765 765
766 chromeos::DBusThreadManager::Get()->GetPowerManagerClient()-> 766 chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->
767 SetIsProjecting(is_projecting); 767 SetIsProjecting(is_projecting);
768 } 768 }
769 // Ignore the case of RR_UnkownConnection. 769 // Ignore the case of RR_UnkownConnection.
770 } 770 }
771 771
772 // Sets the timer for NotifyOnDisplayChanged(). When an output state change 772 // Sets the timer for NotifyOnDisplayChanged(). When an output state change
773 // is issued, several notifications chould arrive and NotifyOnDisplayChanged() 773 // is issued, several notifications should arrive and NotifyOnDisplayChanged()
774 // should be called once for the last one. The timer could lead at most a few 774 // should be called once for the last one. The timer could lead at most a few
775 // handreds milliseconds of delay for the notification, but it would be 775 // hundreds milliseconds of delay for the notification, but it would be
776 // unrecognizable for users. 776 // unrecognizable for users.
777 if (notification_timer_.get()) { 777 if (notification_timer_.get()) {
778 notification_timer_->Reset(); 778 notification_timer_->Reset();
779 } else { 779 } else {
780 notification_timer_.reset(new base::OneShotTimer<OutputConfigurator>()); 780 notification_timer_.reset(new base::OneShotTimer<OutputConfigurator>());
781 notification_timer_->Start( 781 notification_timer_->Start(
782 FROM_HERE, 782 FROM_HERE,
783 base::TimeDelta::FromMilliseconds(kNotificationTimerDelayMs), 783 base::TimeDelta::FromMilliseconds(kNotificationTimerDelayMs),
784 this, 784 this,
785 &OutputConfigurator::NotifyOnDisplayChanged); 785 &OutputConfigurator::NotifyOnDisplayChanged);
786 } 786 }
787 return true; 787 return true;
788 } 788 }
789 789
790 void OutputConfigurator::AddObserver(Observer* observer) { 790 void OutputConfigurator::AddObserver(Observer* observer) {
791 observers_.AddObserver(observer); 791 observers_.AddObserver(observer);
792 } 792 }
793 793
794 void OutputConfigurator::RemoveObserver(Observer* observer) { 794 void OutputConfigurator::RemoveObserver(Observer* observer) {
795 observers_.RemoveObserver(observer); 795 observers_.RemoveObserver(observer);
796 } 796 }
797 797
798 // static 798 // static
799 bool OutputConfigurator::IsInternalOutputName(const std::string& name) { 799 bool OutputConfigurator::IsInternalOutputName(const std::string& name) {
800 return name.find(kInternal_LVDS) == 0 || name.find(kInternal_eDP) == 0; 800 return name.find(kInternal_LVDS) == 0 || name.find(kInternal_eDP) == 0;
801 } 801 }
802 802
803 void OutputConfigurator::SuspendDisplays() {
804 // Turn displays on before suspend. At this point, the backlight is off,
805 // so we turn on the internal display so that we can resume directly into
806 // on state. This greatly reduces resume times.
807 Display* display = base::MessagePumpAuraX11::GetDefaultXDisplay();
808 ScreenPowerSet(true, true);
809 // We need to make sure this actually completes before we return, because
810 // otherwise we could be racing with the SuspendReady message.
811 XSync(display, 0);
812 }
813
803 void OutputConfigurator::NotifyOnDisplayChanged() { 814 void OutputConfigurator::NotifyOnDisplayChanged() {
804 notification_timer_.reset(); 815 notification_timer_.reset();
805 FOR_EACH_OBSERVER(Observer, observers_, OnDisplayModeChanged()); 816 FOR_EACH_OBSERVER(Observer, observers_, OnDisplayModeChanged());
806 } 817 }
807 818
808 std::vector<OutputSnapshot> OutputConfigurator::GetDualOutputs( 819 std::vector<OutputSnapshot> OutputConfigurator::GetDualOutputs(
809 Display* display, 820 Display* display,
810 XRRScreenResources* screen) { 821 XRRScreenResources* screen) {
811 std::vector<OutputSnapshot> outputs; 822 std::vector<OutputSnapshot> outputs;
812 XRROutputInfo* one_info = NULL; 823 XRROutputInfo* one_info = NULL;
(...skipping 476 matching lines...) Expand 10 before | Expand all | Expand 10 after
1289 // static 1300 // static
1290 RRMode OutputConfigurator::GetOutputNativeMode( 1301 RRMode OutputConfigurator::GetOutputNativeMode(
1291 const XRROutputInfo* output_info) { 1302 const XRROutputInfo* output_info) {
1292 if (output_info->nmode <= 0) 1303 if (output_info->nmode <= 0)
1293 return None; 1304 return None;
1294 1305
1295 return output_info->modes[0]; 1306 return output_info->modes[0];
1296 } 1307 }
1297 1308
1298 } // namespace chromeos 1309 } // namespace chromeos
OLDNEW
« no previous file with comments | « chromeos/display/output_configurator.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698