using Ryujinx.Common.Logging;
using System;
using System.Threading;
namespace Ryujinx.Graphics.Device
{
///
/// Synchronization manager interface.
///
public interface ISynchronizationManager
{
///
/// Increment the value of a syncpoint with a given id.
///
/// The id of the syncpoint
/// Thrown when id >= MaxHardwareSyncpoints
/// The incremented value of the syncpoint
uint IncrementSyncpoint(uint id);
///
/// Get the value of a syncpoint with a given id.
///
/// The id of the syncpoint
/// Thrown when id >= MaxHardwareSyncpoints
/// The value of the syncpoint
uint GetSyncpointValue(uint id);
///
/// Wait on a syncpoint with a given id at a target threshold.
/// The callback will be called once the threshold is reached and will automatically be unregistered.
///
/// The id of the syncpoint
/// The target threshold
/// The timeout
/// Thrown when id >= MaxHardwareSyncpoints
/// True if timed out
bool WaitOnSyncpoint(uint id, uint threshold, TimeSpan timeout);
}
}