bool DisplayRefreshMonitorManager::scheduleAnimation(DisplayRefreshMonitorClient* client)
{
    if (!client->hasDisplayID())
        return false;

    DisplayRefreshMonitor* monitor = ensureMonitorForClient(client);

    client->setIsScheduled(true);
    return monitor->requestRefreshCallback();
}
bool DisplayRefreshMonitorManager::scheduleAnimation(DisplayRefreshMonitorClient& client)
{
    if (!client.hasDisplayID())
        return false;

    DisplayRefreshMonitor* monitor = createMonitorForClient(client);
    if (!monitor)
        return false;

    client.setIsScheduled(true);
    return monitor->requestRefreshCallback();
}
void DisplayRefreshMonitorManager::displayDidRefresh(DisplayRefreshMonitor& monitor)
{
    if (!monitor.shouldBeTerminated())
        return;

    size_t monitorIndex = m_monitors.find(&monitor);
    if (monitorIndex != notFound)
        m_monitors.remove(monitorIndex);
}
void DisplayRefreshMonitor::handleDisplayRefreshedNotificationOnMainThread(void* data)
{
    DisplayRefreshMonitor* monitor = static_cast<DisplayRefreshMonitor*>(data);
    monitor->displayDidRefresh();
}
void DisplayRefreshMonitor::refreshDisplayOnMainThread(void* data)
{
    DisplayRefreshMonitor* monitor = static_cast<DisplayRefreshMonitor*>(data);
    monitor->notifyClients();
}