|  | // Copyright 2013 The Flutter 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 FLUTTER_SHELL_COMMON_DISPLAY_H_ | 
|  | #define FLUTTER_SHELL_COMMON_DISPLAY_H_ | 
|  |  | 
|  | #include <optional> | 
|  |  | 
|  | #include "flutter/fml/macros.h" | 
|  | #include "flutter/shell/common/variable_refresh_rate_reporter.h" | 
|  |  | 
|  | namespace flutter { | 
|  |  | 
|  | /// Unique ID per display that is stable until the Flutter application restarts. | 
|  | /// See also: `flutter::Display` | 
|  | typedef uint64_t DisplayId; | 
|  |  | 
|  | /// To be used when the display refresh rate is unknown. | 
|  | static constexpr double kUnknownDisplayRefreshRate = 0; | 
|  |  | 
|  | /// Display refers to a graphics hardware system consisting of a framebuffer, | 
|  | /// typically a monitor or a screen. This class holds the various display | 
|  | /// settings. | 
|  | class Display { | 
|  | public: | 
|  | //------------------------------------------------------------------------------ | 
|  | /// @brief Construct a new Display object in case where the display id of the | 
|  | /// display is known. In cases where there is more than one display, every | 
|  | /// display is expected to have a display id. | 
|  | /// | 
|  | Display(DisplayId display_id, double refresh_rate) | 
|  | : display_id_(display_id), refresh_rate_(refresh_rate) {} | 
|  |  | 
|  | //------------------------------------------------------------------------------ | 
|  | /// @brief Construct a new Display object when there is only a single display. | 
|  | /// When there are multiple displays, every display must have a display id. | 
|  | /// | 
|  | explicit Display(double refresh_rate) | 
|  | : display_id_({}), refresh_rate_(refresh_rate) {} | 
|  |  | 
|  | virtual ~Display() = default; | 
|  |  | 
|  | // Get the display's maximum refresh rate in the unit of frame per second. | 
|  | // Return `kUnknownDisplayRefreshRate` if the refresh rate is unknown. | 
|  | virtual double GetRefreshRate() const; | 
|  |  | 
|  | /// Returns the `DisplayId` of the display. | 
|  | std::optional<DisplayId> GetDisplayId() const { return display_id_; } | 
|  |  | 
|  | private: | 
|  | std::optional<DisplayId> display_id_; | 
|  | double refresh_rate_; | 
|  |  | 
|  | FML_DISALLOW_COPY_AND_ASSIGN(Display); | 
|  | }; | 
|  |  | 
|  | }  // namespace flutter | 
|  |  | 
|  | #endif  // FLUTTER_SHELL_COMMON_DISPLAY_H_ |