OLD | NEW |
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 604 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
615 XUngrabServer(display); | 615 XUngrabServer(display); |
616 | 616 |
617 chromeos::DBusThreadManager::Get()->GetPowerManagerClient()-> | 617 chromeos::DBusThreadManager::Get()->GetPowerManagerClient()-> |
618 SetIsProjecting(is_projecting); | 618 SetIsProjecting(is_projecting); |
619 } | 619 } |
620 | 620 |
621 void OutputConfigurator::Stop() { | 621 void OutputConfigurator::Stop() { |
622 configure_display_ = false; | 622 configure_display_ = false; |
623 } | 623 } |
624 | 624 |
625 bool OutputConfigurator::CycleDisplayMode() { | |
626 TRACE_EVENT0("chromeos", "OutputConfigurator::CycleDisplayMode"); | |
627 VLOG(1) << "CycleDisplayMode"; | |
628 if (!configure_display_) | |
629 return false; | |
630 | |
631 bool did_change = false; | |
632 Display* display = base::MessagePumpAuraX11::GetDefaultXDisplay(); | |
633 CHECK(display != NULL); | |
634 XGrabServer(display); | |
635 Window window = DefaultRootWindow(display); | |
636 XRRScreenResources* screen = GetScreenResourcesAndRecordUMA(display, window); | |
637 CHECK(screen != NULL); | |
638 | |
639 std::vector<OutputSnapshot> outputs = GetDualOutputs(display, screen); | |
640 connected_output_count_ = outputs.size(); | |
641 OutputState original = InferCurrentState(display, screen, outputs); | |
642 OutputState next_state = GetNextState(display, screen, original, outputs); | |
643 if (original != next_state && | |
644 EnterState(display, screen, window, next_state, power_state_, outputs)) { | |
645 did_change = true; | |
646 } | |
647 // We have seen cases where the XRandR data can get out of sync with our own | |
648 // cache so over-write it with whatever we detected, even if we didn't think | |
649 // anything changed. | |
650 output_state_ = next_state; | |
651 | |
652 XRRFreeScreenResources(screen); | |
653 XUngrabServer(display); | |
654 | |
655 if (did_change) { | |
656 NotifyOnDisplayChanged(); | |
657 } else { | |
658 FOR_EACH_OBSERVER( | |
659 Observer, observers_, OnDisplayModeChangeFailed(next_state)); | |
660 } | |
661 return did_change; | |
662 } | |
663 | |
664 bool OutputConfigurator::SetDisplayPower(DisplayPowerState power_state, | 625 bool OutputConfigurator::SetDisplayPower(DisplayPowerState power_state, |
665 bool force_probe) { | 626 bool force_probe) { |
666 TRACE_EVENT0("chromeos", "OutputConfigurator::SetDisplayPower"); | 627 TRACE_EVENT0("chromeos", "OutputConfigurator::SetDisplayPower"); |
667 VLOG(1) << "OutputConfigurator::SetDisplayPower: power_state=" << power_state | 628 VLOG(1) << "OutputConfigurator::SetDisplayPower: power_state=" << power_state |
668 << " force_probe=" << force_probe; | 629 << " force_probe=" << force_probe; |
669 | 630 |
670 if (!configure_display_) | 631 if (!configure_display_) |
671 return false; | 632 return false; |
672 if (power_state == power_state_ && !force_probe) | 633 if (power_state == power_state_ && !force_probe) |
673 return true; | 634 return true; |
(...skipping 675 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1349 // static | 1310 // static |
1350 RRMode OutputConfigurator::GetOutputNativeMode( | 1311 RRMode OutputConfigurator::GetOutputNativeMode( |
1351 const XRROutputInfo* output_info) { | 1312 const XRROutputInfo* output_info) { |
1352 if (output_info->nmode <= 0) | 1313 if (output_info->nmode <= 0) |
1353 return None; | 1314 return None; |
1354 | 1315 |
1355 return output_info->modes[0]; | 1316 return output_info->modes[0]; |
1356 } | 1317 } |
1357 | 1318 |
1358 } // namespace chromeos | 1319 } // namespace chromeos |
OLD | NEW |