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

#include "chromecast/graphics/cast_vsync_settings.h"

namespace chromecast {
namespace {
base::LazyInstance<CastVSyncSettings> g_instance = LAZY_INSTANCE_INITIALIZER;
}  // namespace

// static
CastVSyncSettings* CastVSyncSettings::GetInstance() {
  return g_instance.Pointer();
}

base::TimeDelta CastVSyncSettings::GetVSyncInterval() const {
  return interval_;
}

void CastVSyncSettings::SetVSyncInterval(base::TimeDelta interval) {
  if (interval_ == interval)
    return;
  interval_ = interval;
  FOR_EACH_OBSERVER(Observer, observers_,
                    OnVSyncIntervalChanged(interval));
}

void CastVSyncSettings::AddObserver(Observer* observer) {
  observers_.AddObserver(observer);
}

void CastVSyncSettings::RemoveObserver(Observer* observer) {
  observers_.RemoveObserver(observer);
}

// Default to 60fps until set otherwise
CastVSyncSettings::CastVSyncSettings()
    : interval_(base::TimeDelta::FromMicroseconds(16666)) {}

CastVSyncSettings::~CastVSyncSettings() = default;

}  // namespace chromecast
