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

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

Issue 10909242: Add "panel_fitting" GPU feature type and use it for mirror mode. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Reorganized code per oshima's suggestion. Created 8 years, 3 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 (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 #ifndef CHROMEOS_DISPLAY_OUTPUT_CONFIGURATOR_H_ 5 #ifndef CHROMEOS_DISPLAY_OUTPUT_CONFIGURATOR_H_
6 #define CHROMEOS_DISPLAY_OUTPUT_CONFIGURATOR_H_ 6 #define CHROMEOS_DISPLAY_OUTPUT_CONFIGURATOR_H_
7 7
8 #include "base/basictypes.h" 8 #include "base/basictypes.h"
9 #include "base/event_types.h" 9 #include "base/event_types.h"
10 #include "base/observer_list.h" 10 #include "base/observer_list.h"
11 #include "base/memory/scoped_ptr.h" 11 #include "base/memory/scoped_ptr.h"
12 #include "base/message_loop.h" 12 #include "base/message_loop.h"
13 #include "chromeos/chromeos_export.h" 13 #include "chromeos/chromeos_export.h"
14 14
15 // Forward declarations for Xlib and Xrandr. 15 // Forward declarations for Xlib and Xrandr.
16 // This is so unused X definitions don't pollute the namespace. 16 // This is so unused X definitions don't pollute the namespace.
17 typedef unsigned long XID; 17 typedef unsigned long XID;
18 typedef XID Window; 18 typedef XID Window;
19 typedef XID RROutput; 19 typedef XID RROutput;
20 typedef XID RRCrtc; 20 typedef XID RRCrtc;
21 typedef XID RRMode; 21 typedef XID RRMode;
22 22
23 struct _XRRScreenResources; 23 struct _XRRScreenResources;
24 typedef _XRRScreenResources XRRScreenResources; 24 typedef _XRRScreenResources XRRScreenResources;
25 struct _XRROutputInfo;
26 typedef _XRROutputInfo XRROutputInfo;
25 27
26 namespace chromeos { 28 namespace chromeos {
27 29
28 // Used to describe the state of a multi-display configuration. 30 // Used to describe the state of a multi-display configuration.
29 // TODO(oshima): remove DUAL_SECONDARY_ONLY 31 // TODO(oshima): remove DUAL_SECONDARY_ONLY
30 enum OutputState { 32 enum OutputState {
31 STATE_INVALID, 33 STATE_INVALID,
32 STATE_HEADLESS, 34 STATE_HEADLESS,
33 STATE_SINGLE, 35 STATE_SINGLE,
34 STATE_DUAL_MIRROR, 36 STATE_DUAL_MIRROR,
(...skipping 15 matching lines...) Expand all
50 virtual void OnDisplayModeChanged() = 0; 52 virtual void OnDisplayModeChanged() = 0;
51 }; 53 };
52 54
53 OutputConfigurator(); 55 OutputConfigurator();
54 virtual ~OutputConfigurator(); 56 virtual ~OutputConfigurator();
55 57
56 int connected_output_count() const { return connected_output_count_; } 58 int connected_output_count() const { return connected_output_count_; }
57 59
58 OutputState output_state() const { return output_state_; } 60 OutputState output_state() const { return output_state_; }
59 61
62 // Initialization, must be called right after constructor.
63 // |is_panel_fitting_supported| indicates hardware panel fitting support.
64 void Init(bool is_panel_fitting_supported);
65
60 // Called when the user hits ctrl-F4 to request a display mode change. 66 // Called when the user hits ctrl-F4 to request a display mode change.
61 // This method should only return false if it was called in a single-head or 67 // This method should only return false if it was called in a single-head or
62 // headless mode. 68 // headless mode.
63 bool CycleDisplayMode(); 69 bool CycleDisplayMode();
64 70
65 // Called when powerd notifies us that some set of displays should be turned 71 // Called when powerd notifies us that some set of displays should be turned
66 // on or off. This requires enabling or disabling the CRTC associated with 72 // on or off. This requires enabling or disabling the CRTC associated with
67 // the display(s) in question so that the low power state is engaged. 73 // the display(s) in question so that the low power state is engaged.
68 bool ScreenPowerSet(bool power_on, bool all_displays); 74 bool ScreenPowerSet(bool power_on, bool all_displays);
69 75
70 // Force switching the display mode to |new_state|. This method is used when 76 // Force switching the display mode to |new_state|. This method is used when
71 // the user explicitly changes the display mode in the options UI. Returns 77 // the user explicitly changes the display mode in the options UI. Returns
72 // false if it was called in a single-head or headless mode. 78 // false if it was called in a single-head or headless mode.
73 bool SetDisplayMode(OutputState new_state); 79 bool SetDisplayMode(OutputState new_state);
74 80
75 // Called when an RRNotify event is received. The implementation is 81 // Called when an RRNotify event is received. The implementation is
76 // interested in the cases of RRNotify events which correspond to output 82 // interested in the cases of RRNotify events which correspond to output
77 // add/remove events. Note that Output add/remove events are sent in response 83 // add/remove events. Note that Output add/remove events are sent in response
78 // to our own reconfiguration operations so spurious events are common. 84 // to our own reconfiguration operations so spurious events are common.
79 // Spurious events will have no effect. 85 // Spurious events will have no effect.
80 virtual bool Dispatch(const base::NativeEvent& event) OVERRIDE; 86 virtual bool Dispatch(const base::NativeEvent& event) OVERRIDE;
81 87
82 void AddObserver(Observer* observer); 88 void AddObserver(Observer* observer);
83 void RemoveObserver(Observer* observer); 89 void RemoveObserver(Observer* observer);
84 90
85 // Tells if the output specified by |name| is for internal display. 91 // Tells if the output specified by |name| is for internal display.
86 static bool IsInternalOutputName(const std::string& name); 92 static bool IsInternalOutputName(const std::string& name);
87 93
94 // Returns output's native mode, None if not found.
95 static RRMode GetOutputNativeMode(const XRROutputInfo* output_info);
96
88 private: 97 private:
89 // Fires OnDisplayModeChanged() event to the observers. 98 // Fires OnDisplayModeChanged() event to the observers.
90 void NotifyOnDisplayChanged(); 99 void NotifyOnDisplayChanged();
91 100
92 // This is detected by the constructor to determine whether or not we should 101 // This is detected by the constructor to determine whether or not we should
93 // be enabled. If we aren't running on ChromeOS, we can't assume that the 102 // be enabled. If we aren't running on ChromeOS, we can't assume that the
94 // Xrandr X11 extension is supported. 103 // Xrandr X11 extension is supported.
95 // If this flag is set to false, any attempts to change the output 104 // If this flag is set to false, any attempts to change the output
96 // configuration to immediately fail without changing the state. 105 // configuration to immediately fail without changing the state.
97 bool is_running_on_chrome_os_; 106 bool is_running_on_chrome_os_;
98 107
108 // This is set externally in Init,
109 // and is used to enable modes which rely on panel fitting.
110 bool is_panel_fitting_supported_;
cwolfe 2012/09/18 13:27:47 Weak preference for something like use_panel_fitti
ynovikov 2012/09/21 18:48:27 Done.
111
99 // The number of outputs that are connected. 112 // The number of outputs that are connected.
100 int connected_output_count_; 113 int connected_output_count_;
101 114
102 // The base of the event numbers used to represent XRandr events used in 115 // The base of the event numbers used to represent XRandr events used in
103 // decoding events regarding output add/remove. 116 // decoding events regarding output add/remove.
104 int xrandr_event_base_; 117 int xrandr_event_base_;
105 118
106 // The display state as derived from the outputs observed in |output_cache_|. 119 // The display state as derived from the outputs observed in |output_cache_|.
107 // This is used for rotating display modes. 120 // This is used for rotating display modes.
108 OutputState output_state_; 121 OutputState output_state_;
109 122
110 ObserverList<Observer> observers_; 123 ObserverList<Observer> observers_;
111 124
112 DISALLOW_COPY_AND_ASSIGN(OutputConfigurator); 125 DISALLOW_COPY_AND_ASSIGN(OutputConfigurator);
113 }; 126 };
114 127
115 } // namespace chromeos 128 } // namespace chromeos
116 129
117 #endif // CHROMEOS_DISPLAY_OUTPUT_CONFIGURATOR_H_ 130 #endif // CHROMEOS_DISPLAY_OUTPUT_CONFIGURATOR_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698