mirror of
https://github.com/gnif/LookingGlass.git
synced 2026-08-22 15:11:31 +00:00
[idd] transport: track asynchronous frame readiness
This commit is contained in:
@@ -701,13 +701,12 @@ bool CFrameScheduler::TryFrameSubmitted(const Schedule& schedule,
|
||||
publication.deadlineSerial = schedule.deadlineSerial;
|
||||
publication.frameSerial = frameSerial;
|
||||
publication.deadline = schedule.deadline;
|
||||
publication.committed = true;
|
||||
registered = true;
|
||||
}
|
||||
return registered;
|
||||
}
|
||||
|
||||
void CFrameScheduler::FramePublished(const Schedule& schedule,
|
||||
void CFrameScheduler::FrameCommitted(const Schedule& schedule,
|
||||
uint32_t frameSerial, uint64_t now, bool periodic)
|
||||
{
|
||||
CSRWExclusiveLock lock(m_lock);
|
||||
@@ -721,6 +720,25 @@ void CFrameScheduler::FramePublished(const Schedule& schedule,
|
||||
if (publication)
|
||||
publication->committed = true;
|
||||
|
||||
if (periodic)
|
||||
{
|
||||
AdvanceCurrentDeadline();
|
||||
AdvanceDeadline(now);
|
||||
}
|
||||
Client * client = FindClient(m_schedule.clientID);
|
||||
if (client)
|
||||
client->nextDelivery = m_nextDeadline;
|
||||
}
|
||||
}
|
||||
|
||||
void CFrameScheduler::FramePublished(const Schedule& schedule,
|
||||
uint32_t frameSerial)
|
||||
{
|
||||
CSRWExclusiveLock lock(m_lock);
|
||||
if (m_scheduling && schedule.clientID == m_schedule.clientID &&
|
||||
schedule.generation == m_schedule.generation &&
|
||||
schedule.epoch == m_schedule.epoch)
|
||||
{
|
||||
if (schedule.forceTicket > m_forceAckTicket)
|
||||
m_forceAckTicket = schedule.forceTicket;
|
||||
if (schedule.republishTicket > m_republishAckTicket)
|
||||
@@ -735,26 +753,16 @@ void CFrameScheduler::FramePublished(const Schedule& schedule,
|
||||
client->deliveredFrameValid = true;
|
||||
}
|
||||
++m_publishedFrames;
|
||||
if (periodic)
|
||||
{
|
||||
AdvanceCurrentDeadline();
|
||||
AdvanceDeadline(now);
|
||||
}
|
||||
if (client)
|
||||
client->nextDelivery = m_nextDeadline;
|
||||
}
|
||||
}
|
||||
|
||||
void CFrameScheduler::FrameRetained(const Schedule& schedule,
|
||||
uint64_t now, bool periodic)
|
||||
void CFrameScheduler::FrameRetained(const Schedule& schedule)
|
||||
{
|
||||
bool wake = false;
|
||||
CSRWExclusiveLock lock(m_lock);
|
||||
if (m_scheduling && schedule.clientID == m_schedule.clientID &&
|
||||
schedule.generation == m_schedule.generation &&
|
||||
schedule.epoch == m_schedule.epoch &&
|
||||
schedule.deadlineSerial == m_deadlineSerial &&
|
||||
schedule.deadline == m_nextDeadline)
|
||||
schedule.epoch == m_schedule.epoch)
|
||||
{
|
||||
if (schedule.forceTicket > m_forceAckTicket)
|
||||
m_forceAckTicket = schedule.forceTicket;
|
||||
@@ -766,16 +774,6 @@ void CFrameScheduler::FrameRetained(const Schedule& schedule,
|
||||
++m_republishRequestTicket;
|
||||
wake = true;
|
||||
}
|
||||
|
||||
if (periodic)
|
||||
{
|
||||
AdvanceCurrentDeadline();
|
||||
AdvanceDeadline(now);
|
||||
}
|
||||
|
||||
Client * client = FindClient(m_schedule.clientID);
|
||||
if (client)
|
||||
client->nextDelivery = m_nextDeadline;
|
||||
}
|
||||
lock.Unlock();
|
||||
|
||||
@@ -783,6 +781,11 @@ void CFrameScheduler::FrameRetained(const Schedule& schedule,
|
||||
WakePublisher();
|
||||
}
|
||||
|
||||
void CFrameScheduler::FrameFailed()
|
||||
{
|
||||
ForceFrame();
|
||||
}
|
||||
|
||||
bool CFrameScheduler::TryFrameCompleted(const Schedule& schedule,
|
||||
uint32_t frameSerial, uint64_t completedAt)
|
||||
{
|
||||
|
||||
@@ -172,10 +172,11 @@ public:
|
||||
void FrameMissed(const Schedule& schedule, uint64_t now, bool periodic);
|
||||
void FrameSuperseded();
|
||||
bool TryFrameSubmitted(const Schedule& schedule, uint32_t frameSerial);
|
||||
void FramePublished(const Schedule& schedule, uint32_t frameSerial,
|
||||
void FrameCommitted(const Schedule& schedule, uint32_t frameSerial,
|
||||
uint64_t now, bool periodic);
|
||||
void FrameRetained(const Schedule& schedule, uint64_t now,
|
||||
bool periodic);
|
||||
void FramePublished(const Schedule& schedule, uint32_t frameSerial);
|
||||
void FrameRetained(const Schedule& schedule);
|
||||
void FrameFailed();
|
||||
void FrameRepublished(const Schedule& schedule, uint32_t frameSerial);
|
||||
bool TryFrameCompleted(const Schedule& schedule, uint32_t frameSerial,
|
||||
uint64_t completedAt);
|
||||
|
||||
Reference in New Issue
Block a user