MCPcopy Create free account
hub / github.com/GameTechDev/PresentMon / QueryEtwStatus

Method QueryEtwStatus

PresentData/PresentMonTraceSession.cpp:679–713  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

677}
678
679bool PMTraceSession::QueryEtwStatus(EtwStatus* status) const
680{
681 if (mSessionHandle == 0) {
682 return false;
683 }
684
685 TraceProperties sessionProps = {};
686 sessionProps.Wnode.BufferSize = (ULONG) sizeof(TraceProperties);
687 sessionProps.LoggerNameOffset = offsetof(TraceProperties, mSessionName);
688
689 auto queryStatus = ControlTraceW(mSessionHandle, nullptr, &sessionProps, EVENT_TRACE_CONTROL_QUERY);
690 if (queryStatus != ERROR_SUCCESS) {
691 return false;
692 }
693
694 // Update cached status
695 mCachedEtwStatus.mEtwBuffersInUse = sessionProps.NumberOfBuffers - sessionProps.FreeBuffers;
696 mCachedEtwStatus.mEtwTotalBuffers = sessionProps.NumberOfBuffers;
697 mCachedEtwStatus.mEtwEventsLost = sessionProps.EventsLost;
698 mCachedEtwStatus.mEtwBuffersLost = sessionProps.LogBuffersLost + sessionProps.RealTimeBuffersLost;
699 mCachedEtwStatus.mNumOverflowedPresents = mPMConsumer->mNumOverflowedPresents;
700
701 if (sessionProps.NumberOfBuffers > 0) {
702 mCachedEtwStatus.mEtwBufferFillPct = 100.0 * mCachedEtwStatus.mEtwBuffersInUse / sessionProps.NumberOfBuffers;
703 } else {
704 mCachedEtwStatus.mEtwBufferFillPct = 0.0;
705 }
706
707 // Copy to output if provided
708 if (status != nullptr) {
709 *status = mCachedEtwStatus;
710 }
711
712 return true;
713}
714
715void PMTraceSession::ProcessEtwEventLatencyStats(uint64_t eventQpcTimestamp)
716{

Callers 2

OutputEtwStatusFunction · 0.80
wmainFunction · 0.80

Calls

no outgoing calls

Tested by

no test coverage detected