mirror of
https://github.com/gnif/LookingGlass.git
synced 2026-08-09 00:31:31 +00:00
[idd] scheduler: prioritize deadline publication
This commit is contained in:
@@ -979,29 +979,34 @@ void CFrameScheduler::LogStatistics(uint64_t now)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const uint64_t elapsed = now - m_lastLog;
|
const uint32_t clientID = m_schedule.clientID;
|
||||||
const uint64_t acquired = m_acquiredFrames - m_lastLogAcquired;
|
const uint64_t period = m_schedule.period;
|
||||||
const uint64_t skipped = m_skippedFrames - m_lastLogSkipped;
|
const uint64_t workEstimate = m_workEstimate;
|
||||||
const uint64_t published = m_publishedFrames - m_lastLogPublished;
|
const int64_t phaseError = m_lastPhaseError;
|
||||||
const double acquiredRate =
|
const uint64_t elapsed = now - m_lastLog;
|
||||||
static_cast<double>(acquired) * 1000000000.0 / elapsed;
|
const uint64_t acquired = m_acquiredFrames - m_lastLogAcquired;
|
||||||
DEBUG_TRACE("Frame schedule owner %u: %.3f Hz client, %.3f Hz acquired, "
|
const uint64_t skipped = m_skippedFrames - m_lastLogSkipped;
|
||||||
"%.3f ms work, %.3f ms phase; %llu acquired, %llu skipped, "
|
const uint64_t published = m_publishedFrames - m_lastLogPublished;
|
||||||
"%llu published",
|
|
||||||
m_schedule.clientID,
|
|
||||||
1000000000.0 / m_schedule.period,
|
|
||||||
acquiredRate,
|
|
||||||
m_workEstimate / 1000000.0,
|
|
||||||
m_lastPhaseError / 1000000.0,
|
|
||||||
static_cast<unsigned long long>(acquired),
|
|
||||||
static_cast<unsigned long long>(skipped),
|
|
||||||
static_cast<unsigned long long>(published));
|
|
||||||
|
|
||||||
m_lastLog = now;
|
m_lastLog = now;
|
||||||
m_lastLogAcquired = m_acquiredFrames;
|
m_lastLogAcquired = m_acquiredFrames;
|
||||||
m_lastLogSkipped = m_skippedFrames;
|
m_lastLogSkipped = m_skippedFrames;
|
||||||
m_lastLogPublished = m_publishedFrames;
|
m_lastLogPublished = m_publishedFrames;
|
||||||
ReleaseSRWLockExclusive(&m_lock);
|
ReleaseSRWLockExclusive(&m_lock);
|
||||||
|
|
||||||
|
const double acquiredRate =
|
||||||
|
static_cast<double>(acquired) * 1000000000.0 / elapsed;
|
||||||
|
DEBUG_TRACE("Frame schedule owner %u: %.3f Hz client, %.3f Hz acquired, "
|
||||||
|
"%.3f ms work, %.3f ms phase; %llu acquired, %llu skipped, "
|
||||||
|
"%llu published",
|
||||||
|
clientID,
|
||||||
|
1000000000.0 / period,
|
||||||
|
acquiredRate,
|
||||||
|
workEstimate / 1000000.0,
|
||||||
|
phaseError / 1000000.0,
|
||||||
|
static_cast<unsigned long long>(acquired),
|
||||||
|
static_cast<unsigned long long>(skipped),
|
||||||
|
static_cast<unsigned long long>(published));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CFrameScheduler::TryRecordFrameTiming(uint64_t duration)
|
void CFrameScheduler::TryRecordFrameTiming(uint64_t duration)
|
||||||
|
|||||||
@@ -280,6 +280,10 @@ void CSwapChainProcessor::PublisherThread()
|
|||||||
{
|
{
|
||||||
DWORD avTask = 0;
|
DWORD avTask = 0;
|
||||||
HANDLE avTaskHandle = AvSetMmThreadCharacteristicsW(L"Distribution", &avTask);
|
HANDLE avTaskHandle = AvSetMmThreadCharacteristicsW(L"Distribution", &avTask);
|
||||||
|
if (avTaskHandle &&
|
||||||
|
!AvSetMmThreadPriority(avTaskHandle, AVRT_PRIORITY_HIGH))
|
||||||
|
DEBUG_WARN("Failed to raise publisher MMCSS priority: %lu",
|
||||||
|
GetLastError());
|
||||||
|
|
||||||
const HANDLE scheduleEvent = m_devContext->GetFrameScheduleEvent();
|
const HANDLE scheduleEvent = m_devContext->GetFrameScheduleEvent();
|
||||||
HANDLE idleHandles[] =
|
HANDLE idleHandles[] =
|
||||||
@@ -490,7 +494,8 @@ void CSwapChainProcessor::PublisherThread()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
AvRevertMmThreadCharacteristics(avTaskHandle);
|
if (avTaskHandle)
|
||||||
|
AvRevertMmThreadCharacteristics(avTaskHandle);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSwapChainProcessor::SwapChainThread()
|
void CSwapChainProcessor::SwapChainThread()
|
||||||
|
|||||||
Reference in New Issue
Block a user