// 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/platform/glfw/glfw_event_loop.h"

#include <GLFW/glfw3.h>

#include <atomic>
#include <utility>

namespace flutter {

GLFWEventLoop::GLFWEventLoop(std::thread::id main_thread_id,
                             const TaskExpiredCallback& on_task_expired)
    : EventLoop(main_thread_id, std::move(on_task_expired)) {}

GLFWEventLoop::~GLFWEventLoop() = default;

void GLFWEventLoop::WaitUntil(const TaskTimePoint& time) {
  const auto now = TaskTimePoint::clock::now();

  // Make sure the seconds are not integral.
  using Seconds = std::chrono::duration<double, std::ratio<1>>;
  const auto duration_to_wait = std::chrono::duration_cast<Seconds>(time - now);

  if (duration_to_wait.count() > 0.0) {
    ::glfwWaitEventsTimeout(duration_to_wait.count());
  } else {
    // Avoid engine task priority inversion by making sure GLFW events are
    // always processed even when there is no need to wait for pending engine
    // tasks.
    ::glfwPollEvents();
  }
}

void GLFWEventLoop::Wake() {
  ::glfwPostEmptyEvent();
}

}  // namespace flutter
