// 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.

#include "flutter/shell/common/variable_refresh_rate_display.h"
#include "flutter/fml/logging.h"

static double GetInitialRefreshRate(
    const std::weak_ptr<flutter::VariableRefreshRateReporter>&
        refresh_rate_reporter) {
  if (auto reporter = refresh_rate_reporter.lock()) {
    return reporter->GetRefreshRate();
  }
  return 0;
}

namespace flutter {

VariableRefreshRateDisplay::VariableRefreshRateDisplay(
    DisplayId display_id,
    const std::weak_ptr<VariableRefreshRateReporter>& refresh_rate_reporter)
    : Display(display_id, GetInitialRefreshRate(refresh_rate_reporter)),
      refresh_rate_reporter_(refresh_rate_reporter) {}

VariableRefreshRateDisplay::VariableRefreshRateDisplay(
    const std::weak_ptr<VariableRefreshRateReporter>& refresh_rate_reporter)
    : Display(GetInitialRefreshRate(refresh_rate_reporter)),
      refresh_rate_reporter_(refresh_rate_reporter) {}

double VariableRefreshRateDisplay::GetRefreshRate() const {
  return GetInitialRefreshRate(refresh_rate_reporter_);
}

}  // namespace flutter
