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

Unified Diff: chromeos/display/output_configurator.h

Issue 24081004: chromeos: Fix display failures when going to mirrored mode. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: uploading yet again Created 7 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | chromeos/display/output_configurator.cc » ('j') | chromeos/display/output_configurator.cc » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chromeos/display/output_configurator.h
diff --git a/chromeos/display/output_configurator.h b/chromeos/display/output_configurator.h
index 5891785381cb22161e41415a98e62b8fd00679b1..52ab71ae63c520ecff210cc98eb4b3a2ae59cd9f 100644
--- a/chromeos/display/output_configurator.h
+++ b/chromeos/display/output_configurator.h
@@ -44,13 +44,16 @@ class CHROMEOS_EXPORT OutputConfigurator
public:
struct ModeInfo {
ModeInfo();
- ModeInfo(int width, int height, bool interlaced);
+ ModeInfo(int width, int height, bool interlaced, float refresh_rate);
int width;
int height;
bool interlaced;
+ float refresh_rate;
};
+ typedef std::map<RRMode, ModeInfo> ModeInfoMap;
+
struct CoordinateTransformation {
// Initialized to the identity transformation.
CoordinateTransformation();
@@ -96,7 +99,7 @@ class CHROMEOS_EXPORT OutputConfigurator
bool is_aspect_preserving_scaling;
// Map from mode IDs to details about the corresponding modes.
- std::map<RRMode, ModeInfo> mode_infos;
+ ModeInfoMap mode_infos;
// XInput device ID or 0 if this output isn't a touchscreen.
int touch_device_id;
@@ -160,8 +163,6 @@ class CHROMEOS_EXPORT OutputConfigurator
public:
virtual ~Delegate() {}
- virtual void SetPanelFittingEnabled(bool enabled) = 0;
-
// Initializes the XRandR extension, saving the base event ID to
// |event_base|.
virtual void InitXRandRExtension(int* event_base) = 0;
@@ -187,10 +188,13 @@ class CHROMEOS_EXPORT OutputConfigurator
// Enables DPMS and forces it to the "on" state.
virtual void ForceDPMSOn() = 0;
- // Returns information about the current outputs.
- // This method may block for 60 milliseconds or more.
- virtual std::vector<OutputSnapshot> GetOutputs(
- const StateController* state_controller) = 0;
+ // Returns information about the current outputs. This method may block for
+ // 60 milliseconds or more. The returned outputs are not fully initialized;
+ // the rest of the work happens in OutputConfigurator::GetOutputs().
+ virtual std::vector<OutputSnapshot> GetOutputs() = 0;
+
+ // Adds |mode| to |output|.
+ virtual void AddOutputMode(RROutput output, RRMode mode) = 0;
// Calls XRRSetCrtcConfig() with the given options but some of our default
// output count and rotation arguments. Returns true on success.
@@ -271,6 +275,12 @@ class CHROMEOS_EXPORT OutputConfigurator
static const ModeInfo* GetModeInfo(const OutputSnapshot& output,
RRMode mode);
+ // Returns the mode within |output| that matches the given size with highest
+ // refresh rate. Returns None if no matching output was found.
+ static RRMode FindOutputModeMatchingSize(const OutputSnapshot& output,
+ int width,
+ int height);
+
OutputConfigurator();
virtual ~OutputConfigurator();
@@ -349,7 +359,29 @@ class CHROMEOS_EXPORT OutputConfigurator
void ScheduleConfigureOutputs();
private:
- // Configure outputs.
+ // Returns currently-connected outputs. This method is a wrapper around
+ // |delegate_->GetOutputs()| that does additional work, like finding the
+ // mirror mode and setting user-preferred modes. Note that the server must
+ // be grabbed via |delegate_->GrabServer()| first.
+ std::vector<OutputSnapshot> GetOutputs();
+
+ // Helper method for GetOutputs() that initializes the passed-in outputs'
+ // |mirror_mode| fields by looking for a mode in |internal_output| and
+ // |external_output| having the same resolution. Returns false if a shared
+ // mode wasn't found or created.
+ //
+ // |try_creating| allows creating a panel-fitting mode for |internal_output|
oshima 2013/09/17 15:22:14 nit: isn't it better to call this |try_panel_fitti
Daniel Erat 2013/09/17 15:53:27 Sure, done. (Also renamed the method to FindMirror
+ // instead of only searching for a matching mode (note that it may lead to a
+ // crash if |internal_info| is not capable of panel fitting).
+ //
+ // |preserve_aspect| limits the search/creation only to the modes having the
+ // native aspect ratio of |external_output|.
+ bool FindOrCreateMirrorMode(OutputSnapshot* internal_output,
+ OutputSnapshot* external_output,
+ bool try_creating,
+ bool preserve_aspect);
+
+ // Configures outputs.
void ConfigureOutputs();
// Notifies observers about an attempted state change.
@@ -393,6 +425,9 @@ class CHROMEOS_EXPORT OutputConfigurator
SoftwareMirroringController* mirroring_controller_;
scoped_ptr<Delegate> delegate_;
+ // Used to enable modes which rely on panel fitting.
+ bool is_panel_fitting_enabled_;
+
// Key of the map is the touch display's id, and the value of the map is the
// touch display's area ratio in mirror mode defined as :
// mirror_mode_area / native_mode_area.
« no previous file with comments | « no previous file | chromeos/display/output_configurator.cc » ('j') | chromeos/display/output_configurator.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698