Ref T280, FSX/P3D also measure time of inner SimConnectProc to see if SimConnect_CallDispatch has any influence

This commit is contained in:
Klaus Basan
2018-06-18 02:17:13 +02:00
parent 4a46974cb5
commit d864789890
3 changed files with 20 additions and 7 deletions

View File

@@ -257,9 +257,9 @@ namespace BlackSimPlugin
QString CSimulatorFsxCommon::getStatisticsSimulatorSpecific() const QString CSimulatorFsxCommon::getStatisticsSimulatorSpecific() const
{ {
static const QString specificInfo("dispatch (cur/max): %1ms %2ms %3 %4 simData#: %5"); static const QString specificInfo("dispatch (cur/max): %1ms (%2ms) %3ms (%4ms) %5 %6 simData#: %7");
return specificInfo. return specificInfo.
arg(m_dispatchTimeMs).arg(m_dispatchMaxTimeMs). arg(m_dispatchTimeMs).arg(m_dispatchProcTimeMs).arg(m_dispatchMaxTimeMs).arg(m_dispatchProcMaxTimeMs).
arg(CSimConnectUtilities::simConnectReceiveIdToString(m_dispatchMaxTimeReceiveId), arg(CSimConnectUtilities::simConnectReceiveIdToString(m_dispatchMaxTimeReceiveId),
CSimConnectDefinitions::requestToString(m_dispatchMaxTimeRequest)). CSimConnectDefinitions::requestToString(m_dispatchMaxTimeRequest)).
arg(m_requestSimObjectDataCount); arg(m_requestSimObjectDataCount);
@@ -267,7 +267,6 @@ namespace BlackSimPlugin
bool CSimulatorFsxCommon::requestElevation(const ICoordinateGeodetic &reference, const CCallsign &callsign) bool CSimulatorFsxCommon::requestElevation(const ICoordinateGeodetic &reference, const CCallsign &callsign)
{ {
Q_UNUSED(callsign);
if (this->isShuttingDownOrDisconnected()) { return false; } if (this->isShuttingDownOrDisconnected()) { return false; }
if (reference.isNull()) { return false; } if (reference.isNull()) { return false; }
@@ -317,7 +316,9 @@ namespace BlackSimPlugin
void CSimulatorFsxCommon::resetAircraftStatistics() void CSimulatorFsxCommon::resetAircraftStatistics()
{ {
m_dispatchMaxTimeMs = -1; m_dispatchMaxTimeMs = -1;
m_dispatchProcMaxTimeMs = -1;
m_dispatchTimeMs = -1; m_dispatchTimeMs = -1;
m_dispatchProcTimeMs = -1;
m_requestSimObjectDataCount = 0; m_requestSimObjectDataCount = 0;
m_dispatchLastReceiveId = SIMCONNECT_RECV_ID_NULL; m_dispatchLastReceiveId = SIMCONNECT_RECV_ID_NULL;
m_dispatchMaxTimeReceiveId = SIMCONNECT_RECV_ID_NULL; m_dispatchMaxTimeReceiveId = SIMCONNECT_RECV_ID_NULL;
@@ -963,7 +964,8 @@ namespace BlackSimPlugin
const HRESULT hr = SimConnect_CallDispatch(m_hSimConnect, m_dispatchProc, this); const HRESULT hr = SimConnect_CallDispatch(m_hSimConnect, m_dispatchProc, this);
// statistics // statistics
m_dispatchTimeMs = QDateTime::currentMSecsSinceEpoch() - start; const qint64 end = QDateTime::currentMSecsSinceEpoch();
m_dispatchTimeMs = end - start;
if (m_dispatchMaxTimeMs < m_dispatchTimeMs) if (m_dispatchMaxTimeMs < m_dispatchTimeMs)
{ {
m_dispatchMaxTimeMs = m_dispatchTimeMs; m_dispatchMaxTimeMs = m_dispatchTimeMs;

View File

@@ -426,6 +426,8 @@ namespace BlackSimPlugin
int m_dispatchErrors = 0; //!< number of dispatched failed, \sa dispatch int m_dispatchErrors = 0; //!< number of dispatched failed, \sa dispatch
qint64 m_dispatchTimeMs = -1; qint64 m_dispatchTimeMs = -1;
qint64 m_dispatchMaxTimeMs = -1; qint64 m_dispatchMaxTimeMs = -1;
qint64 m_dispatchProcTimeMs = -1;
qint64 m_dispatchProcMaxTimeMs = -1;
SIMCONNECT_RECV_ID m_dispatchLastReceiveId = SIMCONNECT_RECV_ID_NULL; //!< last receive id from dispatching SIMCONNECT_RECV_ID m_dispatchLastReceiveId = SIMCONNECT_RECV_ID_NULL; //!< last receive id from dispatching
SIMCONNECT_RECV_ID m_dispatchMaxTimeReceiveId = SIMCONNECT_RECV_ID_NULL; //!< receive id corresponding to max.time SIMCONNECT_RECV_ID m_dispatchMaxTimeReceiveId = SIMCONNECT_RECV_ID_NULL; //!< receive id corresponding to max.time
CSimConnectDefinitions::Request m_dispatchLastRequest = CSimConnectDefinitions::RequestEndMarker; //!< request id if any CSimConnectDefinitions::Request m_dispatchLastRequest = CSimConnectDefinitions::RequestEndMarker; //!< request id if any

View File

@@ -36,6 +36,7 @@ namespace BlackSimPlugin
// IMPORTANT: // IMPORTANT:
// all tasks called in this function (ie all called functions) must perform fast or shall be called asynchronously // all tasks called in this function (ie all called functions) must perform fast or shall be called asynchronously
const qint64 procTimeStart = QDateTime::currentMSecsSinceEpoch();
CSimulatorFsxCommon *simulatorFsxP3D = static_cast<CSimulatorFsxCommon *>(pContext); CSimulatorFsxCommon *simulatorFsxP3D = static_cast<CSimulatorFsxCommon *>(pContext);
const SIMCONNECT_RECV_ID recvId = static_cast<SIMCONNECT_RECV_ID>(pData->dwID); const SIMCONNECT_RECV_ID recvId = static_cast<SIMCONNECT_RECV_ID>(pData->dwID);
simulatorFsxP3D->m_dispatchLastReceiveId = recvId; simulatorFsxP3D->m_dispatchLastReceiveId = recvId;
@@ -102,10 +103,10 @@ namespace BlackSimPlugin
} }
case SystemEventPause: case SystemEventPause:
{ {
const bool p = event->dwData ? true : false; const bool paused = event->dwData ? true : false;
if (simulatorFsxP3D->m_simPaused != p) if (simulatorFsxP3D->m_simPaused != paused)
{ {
simulatorFsxP3D->m_simPaused = p; simulatorFsxP3D->m_simPaused = paused;
simulatorFsxP3D->emitSimulatorCombinedStatus(); simulatorFsxP3D->emitSimulatorCombinedStatus();
} }
break; break;
@@ -354,6 +355,14 @@ namespace BlackSimPlugin
default: default:
break; break;
} // main switch } // main switch
// performance stats
const qint64 procTimeEnd = QDateTime::currentMSecsSinceEpoch();
simulatorFsxP3D->m_dispatchProcTimeMs = procTimeEnd - procTimeStart;
if (simulatorFsxP3D->m_dispatchProcTimeMs > simulatorFsxP3D->m_dispatchProcMaxTimeMs)
{
simulatorFsxP3D->m_dispatchProcMaxTimeMs = simulatorFsxP3D->m_dispatchProcTimeMs;
}
} // method } // method
} // namespace } // namespace
} // namespace } // namespace