// 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_VARIABLE_REFRESH_RATE_DISPLAY_H_
#define FLUTTER_SHELL_COMMON_VARIABLE_REFRESH_RATE_DISPLAY_H_

#include <optional>

#include "display.h"
#include "flutter/fml/macros.h"
#include "variable_refresh_rate_reporter.h"

namespace flutter {

/// A Display where the refresh rate can change over time.
class VariableRefreshRateDisplay : public Display {
 public:
  explicit VariableRefreshRateDisplay(
      DisplayId display_id,
      const std::weak_ptr<VariableRefreshRateReporter> refresh_rate_reporter);
  explicit VariableRefreshRateDisplay(
      const std::weak_ptr<VariableRefreshRateReporter> refresh_rate_reporter);
  ~VariableRefreshRateDisplay() = default;

  // |Display|
  double GetRefreshRate() const override;

 private:
  const std::weak_ptr<VariableRefreshRateReporter> refresh_rate_reporter_;

  FML_DISALLOW_COPY_AND_ASSIGN(VariableRefreshRateDisplay);
};

}  // namespace flutter

#endif  // FLUTTER_SHELL_COMMON_VARIABLE_REFRESH_RATE_DISPLAY_H_
