mirror of
https://github.com/gnif/LookingGlass.git
synced 2026-08-09 08:41:31 +00:00
[idd] scheduler: republish after owner subscription
Consume subscription notifications from the private owner queues. When any lane gains a subscriber, request a retained-frame publication for the current timing owner so a static desktop cannot leave it waiting.
This commit is contained in:
@@ -779,6 +779,21 @@ void CFrameScheduler::FrameRepublished(const Schedule& schedule,
|
||||
ReleaseSRWLockExclusive(&m_lock);
|
||||
}
|
||||
|
||||
void CFrameScheduler::RequestRepublish()
|
||||
{
|
||||
bool wake = false;
|
||||
AcquireSRWLockExclusive(&m_lock);
|
||||
if (m_scheduling)
|
||||
{
|
||||
++m_republishRequestTicket;
|
||||
wake = true;
|
||||
}
|
||||
ReleaseSRWLockExclusive(&m_lock);
|
||||
|
||||
if (wake)
|
||||
WakePublisher();
|
||||
}
|
||||
|
||||
unsigned CFrameScheduler::GetSecondaryRecipients(
|
||||
const uint32_t * clientIDs, unsigned count, uint32_t frameSerial,
|
||||
uint64_t now, uint32_t * recipients) const
|
||||
|
||||
@@ -157,6 +157,7 @@ public:
|
||||
uint64_t& target) const;
|
||||
void FrameDelivered(const uint32_t * clientIDs, unsigned count,
|
||||
uint32_t frameSerial, uint64_t now);
|
||||
void RequestRepublish();
|
||||
void NotifyPublisher() const { WakePublisher(); }
|
||||
void TryRecordFrameTiming(uint64_t duration);
|
||||
void LogStatistics(uint64_t now);
|
||||
|
||||
@@ -1410,6 +1410,15 @@ void CIndirectDeviceContext::LGMPTimer()
|
||||
if (lgmpHostQueueNewSubs(m_frameQueue))
|
||||
m_frameScheduler.NotifyPublisher();
|
||||
|
||||
bool ownerSubscribed = false;
|
||||
for (unsigned queueIndex = 0;
|
||||
queueIndex < LGMP_Q_FRAME_LEN;
|
||||
++queueIndex)
|
||||
ownerSubscribed |=
|
||||
lgmpHostQueueNewSubs(m_frameOwnerQueue[queueIndex]) != 0;
|
||||
if (ownerSubscribed)
|
||||
m_frameScheduler.RequestRepublish();
|
||||
|
||||
ProcessFrameDeliveries();
|
||||
|
||||
if (lgmpHostQueueNewSubs(m_pointerQueue))
|
||||
|
||||
Reference in New Issue
Block a user