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

Unified Diff: ui/display/chromeos/display_configurator.h

Issue 2540313002: Split //ui/display and create //ui/display/manager. (Closed)
Patch Set: Cleanup export header. Created 4 years 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
Index: ui/display/chromeos/display_configurator.h
diff --git a/ui/display/chromeos/display_configurator.h b/ui/display/chromeos/display_configurator.h
deleted file mode 100644
index 64ac535b9acac6c3b64ee096675ece2c129c005e..0000000000000000000000000000000000000000
--- a/ui/display/chromeos/display_configurator.h
+++ /dev/null
@@ -1,493 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef UI_DISPLAY_CHROMEOS_DISPLAY_CONFIGURATOR_H_
-#define UI_DISPLAY_CHROMEOS_DISPLAY_CONFIGURATOR_H_
-
-#include <stdint.h>
-
-#include <map>
-#include <memory>
-#include <queue>
-#include <string>
-#include <vector>
-
-#include "base/event_types.h"
-#include "base/macros.h"
-#include "base/memory/scoped_vector.h"
-#include "base/memory/weak_ptr.h"
-#include "base/observer_list.h"
-#include "base/timer/timer.h"
-#include "third_party/cros_system_api/dbus/service_constants.h"
-#include "ui/display/chromeos/display_snapshot_virtual.h"
-#include "ui/display/chromeos/query_content_protection_task.h"
-#include "ui/display/display_export.h"
-#include "ui/display/types/display_constants.h"
-#include "ui/display/types/native_display_observer.h"
-#include "ui/display/util/display_util.h"
-#include "ui/gfx/geometry/size.h"
-
-namespace gfx {
-class Size;
-}
-
-namespace ui {
-struct GammaRampRGBEntry;
-class DisplayLayoutManager;
-class DisplayMode;
-class DisplaySnapshot;
-class NativeDisplayDelegate;
-class UpdateDisplayConfigurationTask;
-
-// This class interacts directly with the system display configurator.
-class DISPLAY_EXPORT DisplayConfigurator : public NativeDisplayObserver {
- public:
- typedef uint64_t ContentProtectionClientId;
- static const ContentProtectionClientId kInvalidClientId = 0;
-
- typedef base::Callback<void(bool /* success */)> ConfigurationCallback;
-
- typedef base::Callback<void(bool /* success */)> EnableProtectionCallback;
-
- struct QueryProtectionResponse {
- // True if the query succeeded, false otherwise.
- bool success = false;
-
- // The type of connected display links, which is a bitmask of
- // DisplayConnectionType values.
- uint32_t link_mask = 0;
-
- // The desired protection methods, which is a bitmask of the
- // ContentProtectionMethod values.
- uint32_t protection_mask = 0;
- };
-
- typedef base::Callback<void(const QueryProtectionResponse&)>
- QueryProtectionCallback;
-
- typedef base::Callback<void(bool /* success */)> DisplayControlCallback;
-
- typedef std::vector<DisplaySnapshot*> DisplayStateList;
-
- // Mapping a display_id to a protection request bitmask.
- typedef std::map<int64_t, uint32_t> ContentProtections;
-
- class Observer {
- public:
- virtual ~Observer() {}
-
- // Called after the display mode has been changed. |display| contains the
- // just-applied configuration. Note that the X server is no longer grabbed
- // when this method is called, so the actual configuration could've changed
- // already.
- virtual void OnDisplayModeChanged(
- const DisplayStateList& displays) {}
-
- // Called after a display mode change attempt failed. |displays| contains
- // displays that are detected when failed.
- // |failed_new_state| is the new state which the system failed to enter.
- virtual void OnDisplayModeChangeFailed(
- const DisplayStateList& displays,
- MultipleDisplayState failed_new_state) {}
-
- // Called after the power state has been changed. |power_state| contains
- // the just-applied power state.
- virtual void OnPowerStateChanged(
- chromeos::DisplayPowerState power_state) {}
- };
-
- // Interface for classes that make decisions about which display state
- // should be used.
- class StateController {
- public:
- virtual ~StateController() {}
-
- // Called when displays are detected.
- virtual MultipleDisplayState GetStateForDisplayIds(
- const ui::DisplayConfigurator::DisplayStateList& outputs) const = 0;
-
- // Queries the resolution (|size|) in pixels to select display mode for the
- // given display id.
- virtual bool GetResolutionForDisplayId(int64_t display_id,
- gfx::Size* size) const = 0;
- };
-
- // Interface for classes that implement software based mirroring.
- class SoftwareMirroringController {
- public:
- virtual ~SoftwareMirroringController() {}
-
- // Called when the hardware mirroring failed.
- virtual void SetSoftwareMirroring(bool enabled) = 0;
- virtual bool SoftwareMirroringEnabled() const = 0;
- };
-
- // Helper class used by tests.
- class TestApi {
- public:
- TestApi(DisplayConfigurator* configurator) : configurator_(configurator) {}
- ~TestApi() {}
-
- // If |configure_timer_| is started, stops the timer, runs
- // ConfigureDisplays(), and returns true; returns false otherwise.
- bool TriggerConfigureTimeout() WARN_UNUSED_RESULT;
-
- // Gets the current delay of the |configure_timer_| if it's running, or zero
- // time delta otherwise.
- base::TimeDelta GetConfigureDelay() const;
-
- private:
- DisplayConfigurator* configurator_; // not owned
-
- DISALLOW_COPY_AND_ASSIGN(TestApi);
- };
-
- // Flags that can be passed to SetDisplayPower().
- static const int kSetDisplayPowerNoFlags;
- // Configure displays even if the passed-in state matches |power_state_|.
- static const int kSetDisplayPowerForceProbe;
- // Do not change the state if multiple displays are connected or if the
- // only connected display is external.
- static const int kSetDisplayPowerOnlyIfSingleInternalDisplay;
-
- // Gap between screens so cursor at bottom of active display doesn't
- // partially appear on top of inactive display. Higher numbers guard
- // against larger cursors, but also waste more memory.
- // For simplicity, this is hard-coded to avoid the complexity of always
- // determining the DPI of the screen and rationalizing which screen we
- // need to use for the DPI calculation.
- // See crbug.com/130188 for initial discussion.
- static const int kVerticalGap = 60;
-
- // The delay to perform configuration after RRNotify. See the comment for
- // |configure_timer_|.
- static const int kConfigureDelayMs = 500;
-
- // The delay to perform configuration after waking up from suspend when in
- // multi display mode. Should be bigger than |kConfigureDelayMs|. Generally
- // big enough for external displays to be detected and added.
- // crbug.com/614624.
- static const int kResumeConfigureMultiDisplayDelayMs = 2000;
-
- // Returns the mode within |display| that matches the given size with highest
- // refresh rate. Returns None if no matching display was found.
- static const DisplayMode* FindDisplayModeMatchingSize(
- const DisplaySnapshot& display,
- const gfx::Size& size);
-
- DisplayConfigurator();
- ~DisplayConfigurator() override;
-
- MultipleDisplayState display_state() const { return current_display_state_; }
- chromeos::DisplayPowerState requested_power_state() const {
- return requested_power_state_;
- }
- const gfx::Size framebuffer_size() const { return framebuffer_size_; }
- const std::vector<DisplaySnapshot*>& cached_displays() const {
- return cached_displays_;
- }
- void set_state_controller(StateController* controller) {
- state_controller_ = controller;
- }
- void set_mirroring_controller(SoftwareMirroringController* controller) {
- mirroring_controller_ = controller;
- }
- void set_configure_display(bool configure_display) {
- configure_display_ = configure_display;
- }
- chromeos::DisplayPowerState current_power_state() const {
- return current_power_state_;
- }
-
- // Called when an external process no longer needs to control the display
- // and Chrome can take control.
- void TakeControl(const DisplayControlCallback& callback);
-
- // Called when an external process needs to control the display and thus
- // Chrome should relinquish it.
- void RelinquishControl(const DisplayControlCallback& callback);
-
- // Replaces |native_display_delegate_| with the delegate passed in and sets
- // |configure_display_| to true. Should be called before Init().
- void SetDelegateForTesting(
- std::unique_ptr<NativeDisplayDelegate> display_delegate);
-
- // Sets the initial value of |power_state_|. Must be called before Start().
- void SetInitialDisplayPower(chromeos::DisplayPowerState power_state);
-
- // Initialization, must be called right after constructor.
- // |is_panel_fitting_enabled| indicates hardware panel fitting support.
- void Init(std::unique_ptr<NativeDisplayDelegate> delegate,
- bool is_panel_fitting_enabled);
-
- // Does initial configuration of displays during startup.
- // If |background_color_argb| is non zero and there are multiple displays,
- // DisplayConfigurator sets the background color of X's RootWindow to this
- // color.
- void ForceInitialConfigure(uint32_t background_color_argb);
-
- // Stop handling display configuration events/requests.
- void PrepareForExit();
-
- // Called when powerd notifies us that some set of displays should be turned
- // on or off. This requires enabling or disabling the CRTC associated with
- // the display(s) in question so that the low power state is engaged.
- // |flags| contains bitwise-or-ed kSetDisplayPower* values. After the
- // configuration finishes |callback| is called with the status of the
- // operation.
- void SetDisplayPower(chromeos::DisplayPowerState power_state,
- int flags,
- const ConfigurationCallback& callback);
-
- // Force switching the display mode to |new_state|. Returns false if
- // switching failed (possibly because |new_state| is invalid for the
- // current set of connected displays).
- void SetDisplayMode(MultipleDisplayState new_state);
-
- // NativeDisplayDelegate::Observer overrides:
- void OnConfigurationChanged() override;
-
- void AddObserver(Observer* observer);
- void RemoveObserver(Observer* observer);
-
- // Sets all the displays into pre-suspend mode; usually this means
- // configure them for their resume state. This allows faster resume on
- // machines where display configuration is slow. On completion of the display
- // configuration |callback| is executed synchronously or asynchronously.
- void SuspendDisplays(const ConfigurationCallback& callback);
-
- // Reprobes displays to handle changes made while the system was
- // suspended.
- void ResumeDisplays();
-
- // Registers a client for display protection and requests a client id. Returns
- // 0 if requesting failed.
- ContentProtectionClientId RegisterContentProtectionClient();
-
- // Unregisters the client.
- void UnregisterContentProtectionClient(ContentProtectionClientId client_id);
-
- // Queries link status and protection status. |callback| is used to respond
- // to the query.
- void QueryContentProtectionStatus(ContentProtectionClientId client_id,
- int64_t display_id,
- const QueryProtectionCallback& callback);
-
- // Requests the desired protection methods.
- // |protection_mask| is the desired protection methods, which is a bitmask
- // of the ContentProtectionMethod values.
- // Returns true when the protection request has been made.
- void EnableContentProtection(ContentProtectionClientId client_id,
- int64_t display_id,
- uint32_t protection_mask,
- const EnableProtectionCallback& callback);
-
- // Checks the available color profiles for |display_id| and fills the result
- // into |profiles|.
- std::vector<ui::ColorCalibrationProfile> GetAvailableColorCalibrationProfiles(
- int64_t display_id);
-
- // Updates the color calibration to |new_profile|.
- bool SetColorCalibrationProfile(int64_t display_id,
- ui::ColorCalibrationProfile new_profile);
-
- // Enables/disables virtual display.
- int64_t AddVirtualDisplay(const gfx::Size& display_size);
- bool RemoveVirtualDisplay(int64_t display_id);
-
- // Returns true if there is at least one display on.
- bool IsDisplayOn() const;
-
- // Sets the gamma, degamma and correction matrix for |display_id| to the
- // values in |degamma_lut|, |gamma_lut| and |correction_matrix|.
- bool SetColorCorrection(int64_t display_id,
- const std::vector<GammaRampRGBEntry>& degamma_lut,
- const std::vector<GammaRampRGBEntry>& gamma_lut,
- const std::vector<float>& correction_matrix);
-
- private:
- class DisplayLayoutManagerImpl;
-
- // Mapping a client to its protection request.
- typedef std::map<ContentProtectionClientId, ContentProtections>
- ProtectionRequests;
-
- // Updates |pending_*| members and applies the passed-in state. |callback| is
- // invoked (perhaps synchronously) on completion.
- void SetDisplayPowerInternal(chromeos::DisplayPowerState power_state,
- int flags,
- const ConfigurationCallback& callback);
-
- // Configures displays. Invoked by |configure_timer_|.
- void ConfigureDisplays();
-
- // Notifies observers about an attempted state change.
- void NotifyDisplayStateObservers(bool success,
- MultipleDisplayState attempted_state);
-
- // Notifies observers about a power state change.
- void NotifyPowerStateObservers();
-
- // Returns the display state that should be used with |cached_displays_| while
- // in |power_state|.
- MultipleDisplayState ChooseDisplayState(
- chromeos::DisplayPowerState power_state) const;
-
- // Applies display protections according to requests.
- bool ApplyProtections(const ContentProtections& requests);
-
- // If |configuration_task_| isn't initialized, initializes it and starts the
- // configuration task.
- void RunPendingConfiguration();
-
- // Callback for |configuration_taks_|. When the configuration process finishes
- // this is called with the result (|success|) and the updated display state.
- void OnConfigured(bool success,
- const std::vector<DisplaySnapshot*>& displays,
- const gfx::Size& framebuffer_size,
- MultipleDisplayState new_display_state,
- chromeos::DisplayPowerState new_power_state);
-
- // Helps in identifying if a configuration task needs to be scheduled.
- // Return true if any of the |requested_*| parameters have been updated. False
- // otherwise.
- bool ShouldRunConfigurationTask() const;
-
- // Helper functions which will call the callbacks in
- // |in_progress_configuration_callbacks_| and
- // |queued_configuration_callbacks_| and clear the lists after. |success| is
- // the configuration status used when calling the callbacks.
- void CallAndClearInProgressCallbacks(bool success);
- void CallAndClearQueuedCallbacks(bool success);
-
- // Content protection callbacks called by the tasks when they finish. These
- // are responsible for destroying the task, replying to the caller that made
- // the task and starting the a new content protection task if one is queued.
- void OnContentProtectionQueried(
- ContentProtectionClientId client_id,
- int64_t display_id,
- QueryContentProtectionTask::Response response);
- void OnContentProtectionEnabled(ContentProtectionClientId client_id,
- int64_t display_id,
- uint32_t desired_method_mask,
- bool success);
- void OnContentProtectionClientUnregistered(bool success);
-
- // Callbacks used to signal when the native platform has released/taken
- // display control.
- void OnDisplayControlTaken(const DisplayControlCallback& callback,
- bool success);
- void OnDisplayControlRelinquished(const DisplayControlCallback& callback,
- bool success);
-
- // Helper function that sends the actual command.
- // |callback| is called upon completion of the relinquish command.
- // |success| is the result from calling SetDisplayPowerInternal() in
- // RelinquishDisplay().
- void SendRelinquishDisplayControl(const DisplayControlCallback& callback,
- bool success);
-
- StateController* state_controller_;
- SoftwareMirroringController* mirroring_controller_;
- std::unique_ptr<NativeDisplayDelegate> native_display_delegate_;
-
- // Used to enable modes which rely on panel fitting.
- bool is_panel_fitting_enabled_;
-
- // This is detected by the constructor to determine whether or not we should
- // be enabled. If we aren't running on Chrome OS, we can't assume that the
- // Xrandr X11 extension or the Ozone underlying display hotplug system are
- // supported.
- // If this flag is set to false, any attempts to change the display
- // configuration to immediately fail without changing the state.
- bool configure_display_;
-
- // Current configuration state.
- MultipleDisplayState current_display_state_;
- chromeos::DisplayPowerState current_power_state_;
-
- // Pending requests. These values are used when triggering the next display
- // configuration.
- //
- // Stores the user requested state or INVALID if nothing was requested.
- MultipleDisplayState requested_display_state_;
-
- // Stores the requested power state.
- chromeos::DisplayPowerState requested_power_state_;
-
- // The power state used by RunPendingConfiguration(). May be
- // |requested_power_state_| or DISPLAY_POWER_ALL_OFF for suspend.
- chromeos::DisplayPowerState pending_power_state_;
-
- // True if |pending_power_state_| has been changed.
- bool has_pending_power_state_;
-
- // Bitwise-or value of the |kSetDisplayPower*| flags defined above.
- int pending_power_flags_;
-
- // List of callbacks from callers waiting for the display configuration to
- // start/finish. Note these callbacks belong to the pending request, not a
- // request currently active.
- std::vector<ConfigurationCallback> queued_configuration_callbacks_;
-
- // List of callbacks belonging to the currently running display configuration
- // task.
- std::vector<ConfigurationCallback> in_progress_configuration_callbacks_;
-
- std::queue<base::Closure> content_protection_tasks_;
- std::queue<QueryProtectionCallback> query_protection_callbacks_;
- std::queue<EnableProtectionCallback> enable_protection_callbacks_;
-
- // True if the caller wants to force the display configuration process.
- bool force_configure_;
-
- // Most-recently-used display configuration. Note that the actual
- // configuration changes asynchronously.
- DisplayStateList cached_displays_;
-
- // Most-recently-used framebuffer size.
- gfx::Size framebuffer_size_;
-
- base::ObserverList<Observer> observers_;
-
- // The timer to delay configuring displays. This is used to aggregate multiple
- // display configuration events when they are reported in short time spans.
- // See comment for NativeDisplayEventDispatcherX11 for more details.
- base::OneShotTimer configure_timer_;
-
- // Id for next display protection client.
- ContentProtectionClientId next_display_protection_client_id_;
-
- // Display protection requests of each client.
- ProtectionRequests client_protection_requests_;
-
- // Display controlled by an external entity.
- bool display_externally_controlled_;
-
- // True if a TakeControl or RelinquishControl has been called but the response
- // hasn't arrived yet.
- bool display_control_changing_;
-
- // Whether the displays are currently suspended.
- bool displays_suspended_;
-
- // Virtual display control.
- ScopedVector<DisplaySnapshot> virtual_display_snapshots_;
-
- // Last used virtual display id.
- uint8_t last_virtual_display_id_ = 0;
-
- std::unique_ptr<DisplayLayoutManager> layout_manager_;
-
- std::unique_ptr<UpdateDisplayConfigurationTask> configuration_task_;
-
- // This must be the last variable.
- base::WeakPtrFactory<DisplayConfigurator> weak_ptr_factory_;
-
- DISALLOW_COPY_AND_ASSIGN(DisplayConfigurator);
-};
-
-} // namespace ui
-
-#endif // UI_DISPLAY_CHROMEOS_DISPLAY_CONFIGURATOR_H_
« no previous file with comments | « ui/display/chromeos/configure_displays_task_unittest.cc ('k') | ui/display/chromeos/display_configurator.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698