Added reprojection ratio to statistics page.

This commit is contained in:
2017-02-11 23:54:55 +01:00
parent 9b05d7ffd4
commit 22af8b9633
5 changed files with 110 additions and 45 deletions
+13
View File
@@ -253,6 +253,18 @@ MyStackViewPage {
} }
} }
RowLayout {
MyText {
text: "Reprojection Ratio:"
}
MyText {
id: summaryTotalRatioText
Layout.fillWidth: true
horizontalAlignment: Text.AlignRight
text: "0"
}
}
Item { Item {
Layout.fillHeight: true Layout.fillHeight: true
Layout.fillWidth: true Layout.fillWidth: true
@@ -434,6 +446,7 @@ MyStackViewPage {
summaryDroppedFramesText.text = StatisticsTabController.droppedFrames summaryDroppedFramesText.text = StatisticsTabController.droppedFrames
summaryReprojectedFramesText.text = StatisticsTabController.reprojectedFrames summaryReprojectedFramesText.text = StatisticsTabController.reprojectedFrames
summaryTimedOutText.text = StatisticsTabController.timedOut summaryTimedOutText.text = StatisticsTabController.timedOut
summaryTotalRatioText.text = (StatisticsTabController.totalReprojectedRatio*100.0).toFixed(1) + "%"
} }
Timer { Timer {
+40
View File
@@ -95,6 +95,25 @@ MyStackViewPage {
columns: 3 columns: 3
Layout.topMargin: 32 Layout.topMargin: 32
MyText {
text: "Presented Frames:"
}
MyText {
id: statsPresentedFramesText
text: "000"
Layout.fillWidth: true
horizontalAlignment: Text.AlignRight
Layout.rightMargin: 10
}
MyPushButton {
text: "Reset"
onClicked: {
StatisticsTabController.presentedFramesResetClicked()
}
}
MyText { MyText {
text: "Dropped Frames:" text: "Dropped Frames:"
} }
@@ -151,6 +170,25 @@ MyStackViewPage {
StatisticsTabController.timedOutResetClicked() StatisticsTabController.timedOutResetClicked()
} }
} }
MyText {
text: "Reprojection Ratio:"
}
MyText {
id: statstotalRatioText
text: "0.0"
Layout.fillWidth: true
horizontalAlignment: Text.AlignRight
Layout.rightMargin: 10
}
MyPushButton {
text: "Reset"
onClicked: {
StatisticsTabController.totalRatioResetClicked()
}
}
} }
Item { Item {
Layout.fillHeight: true Layout.fillHeight: true
@@ -166,9 +204,11 @@ MyStackViewPage {
} }
statsLeftControllerSpeedText.text = " " + StatisticsTabController.leftControllerMaxSpeed.toFixed(1) + " m/s" statsLeftControllerSpeedText.text = " " + StatisticsTabController.leftControllerMaxSpeed.toFixed(1) + " m/s"
statsRightControllerSpeedText.text = " " + StatisticsTabController.rightControllerMaxSpeed.toFixed(1) + " m/s" statsRightControllerSpeedText.text = " " + StatisticsTabController.rightControllerMaxSpeed.toFixed(1) + " m/s"
statsPresentedFramesText.text = StatisticsTabController.presentedFrames
statsDroppedFramesText.text = StatisticsTabController.droppedFrames statsDroppedFramesText.text = StatisticsTabController.droppedFrames
statsReprojectionFramesText.text = StatisticsTabController.reprojectedFrames statsReprojectionFramesText.text = StatisticsTabController.reprojectedFrames
statsTimedOutText.text = StatisticsTabController.timedOut statsTimedOutText.text = StatisticsTabController.timedOut
statstotalRatioText.text = (StatisticsTabController.totalReprojectedRatio*100.0).toFixed(1) + "%"
} }
Timer { Timer {
+13 -20
View File
@@ -299,26 +299,6 @@ void OverlayController::OnTimeoutPumpEvents() {
if (!vr::VRSystem()) if (!vr::VRSystem())
return; return;
// tell OpenVR to make some events for us
/*for( vr::TrackedDeviceIndex_t unDeviceId = 1; unDeviceId < vr::k_unControllerStateAxisCount; unDeviceId++ ) {
if( vr::VROverlay()->HandleControllerOverlayInteractionAsMouse( m_ulOverlayHandle, unDeviceId ) ) {
break;
}
}*/
vr::TrackedDevicePose_t devicePoses[vr::k_unMaxTrackedDeviceCount];
vr::VRSystem()->GetDeviceToAbsoluteTrackingPose(vr::TrackingUniverseStanding, 0.0f, devicePoses, vr::k_unMaxTrackedDeviceCount);
fixFloorTabController.eventLoopTick(devicePoses);
statisticsTabController.eventLoopTick(devicePoses);
moveCenterTabController.eventLoopTick(vr::VRCompositor()->GetTrackingSpace());
steamVRTabController.eventLoopTick();
chaperoneTabController.eventLoopTick();
settingsTabController.eventLoopTick();
reviveTabController.eventLoopTick();
audioTabController.eventLoopTick();
utilitiesTabController.eventLoopTick();
accessibilityTabController.eventLoopTick(vr::VRCompositor()->GetTrackingSpace());
vr::VREvent_t vrEvent; vr::VREvent_t vrEvent;
while (vr::VROverlay()->PollNextOverlayEvent(m_ulOverlayHandle, &vrEvent, sizeof(vrEvent))) { while (vr::VROverlay()->PollNextOverlayEvent(m_ulOverlayHandle, &vrEvent, sizeof(vrEvent))) {
switch (vrEvent.eventType) { switch (vrEvent.eventType) {
@@ -396,6 +376,19 @@ void OverlayController::OnTimeoutPumpEvents() {
} }
} }
vr::TrackedDevicePose_t devicePoses[vr::k_unMaxTrackedDeviceCount];
vr::VRSystem()->GetDeviceToAbsoluteTrackingPose(vr::TrackingUniverseStanding, 0.0f, devicePoses, vr::k_unMaxTrackedDeviceCount);
fixFloorTabController.eventLoopTick(devicePoses);
statisticsTabController.eventLoopTick(devicePoses);
moveCenterTabController.eventLoopTick(vr::VRCompositor()->GetTrackingSpace());
steamVRTabController.eventLoopTick();
chaperoneTabController.eventLoopTick();
settingsTabController.eventLoopTick();
reviveTabController.eventLoopTick();
audioTabController.eventLoopTick();
utilitiesTabController.eventLoopTick();
accessibilityTabController.eventLoopTick(vr::VRCompositor()->GetTrackingSpace());
if (m_ulOverlayThumbnailHandle != vr::k_ulOverlayHandleInvalid) { if (m_ulOverlayThumbnailHandle != vr::k_ulOverlayHandleInvalid) {
while (vr::VROverlay()->PollNextOverlayEvent(m_ulOverlayThumbnailHandle, &vrEvent, sizeof(vrEvent))) { while (vr::VROverlay()->PollNextOverlayEvent(m_ulOverlayThumbnailHandle, &vrEvent, sizeof(vrEvent))) {
switch (vrEvent.eventType) { switch (vrEvent.eventType) {
+34 -20
View File
@@ -16,12 +16,15 @@ void StatisticsTabController::initStage2(OverlayController * parent, QQuickWindo
void StatisticsTabController::eventLoopTick(vr::TrackedDevicePose_t* devicePoses) { void StatisticsTabController::eventLoopTick(vr::TrackedDevicePose_t* devicePoses) {
vr::Compositor_CumulativeStats pStats; vr::Compositor_CumulativeStats pStats;
vr::VRCompositor()->GetCumulativeStats(&pStats, sizeof(vr::Compositor_CumulativeStats)); vr::VRCompositor()->GetCumulativeStats(&pStats, sizeof(vr::Compositor_CumulativeStats));
if (pStats.m_nPid != compositorStatsPid) { if (pStats.m_nPid != m_cumStats.m_nPid) {
m_cumStats = pStats;
m_droppedFramesOffset = 0; m_droppedFramesOffset = 0;
m_reprojectedFramesOffset = 0; m_reprojectedFramesOffset = 0;
m_timedOutOffset = 0; m_timedOutOffset = 0;
compositorStatsPid = pStats.m_nPid; m_totalRatioPresentedOffset = 0;
m_totalRatioReprojectedOffset = 0;
} }
m_cumStats = pStats;
auto& m = devicePoses->mDeviceToAbsoluteTracking.m; auto& m = devicePoses->mDeviceToAbsoluteTracking.m;
@@ -170,22 +173,30 @@ float StatisticsTabController::leftControllerMaxSpeed() const {
return m_leftControllerMaxSpeed; return m_leftControllerMaxSpeed;
} }
unsigned StatisticsTabController::presentedFrames() const {
return m_cumStats.m_nNumFramePresents - m_presentedFramesOffset;
}
unsigned StatisticsTabController::droppedFrames() const { unsigned StatisticsTabController::droppedFrames() const {
vr::Compositor_CumulativeStats pStats; return m_cumStats.m_nNumDroppedFrames - m_droppedFramesOffset;
vr::VRCompositor()->GetCumulativeStats(&pStats, sizeof(vr::Compositor_CumulativeStats));
return pStats.m_nNumDroppedFrames - m_droppedFramesOffset;
} }
unsigned StatisticsTabController::reprojectedFrames() const { unsigned StatisticsTabController::reprojectedFrames() const {
vr::Compositor_CumulativeStats pStats; return m_cumStats.m_nNumReprojectedFrames - m_reprojectedFramesOffset;
vr::VRCompositor()->GetCumulativeStats(&pStats, sizeof(vr::Compositor_CumulativeStats));
return pStats.m_nNumReprojectedFrames - m_reprojectedFramesOffset;
} }
unsigned StatisticsTabController::timedOut() const { unsigned StatisticsTabController::timedOut() const {
vr::Compositor_CumulativeStats pStats; return m_cumStats.m_nNumTimedOut - m_timedOutOffset;
vr::VRCompositor()->GetCumulativeStats(&pStats, sizeof(vr::Compositor_CumulativeStats)); }
return pStats.m_nNumTimedOut - m_timedOutOffset;
float StatisticsTabController::totalReprojectedRatio() const {
float totalFrames = (float)(m_cumStats.m_nNumFramePresents - m_totalRatioPresentedOffset);
float reprojectedFrames = (float)(m_cumStats.m_nNumReprojectedFrames - m_totalRatioReprojectedOffset);
if (totalFrames != 0.0f) {
return reprojectedFrames / totalFrames;
} else {
return 0.0;
}
} }
void StatisticsTabController::statsDistanceResetClicked() { void StatisticsTabController::statsDistanceResetClicked() {
@@ -211,22 +222,25 @@ void StatisticsTabController::statsRightControllerSpeedResetClicked() {
} }
} }
void StatisticsTabController::presentedFramesResetClicked() {
m_presentedFramesOffset = m_cumStats.m_nNumFramePresents;
}
void StatisticsTabController::droppedFramesResetClicked() { void StatisticsTabController::droppedFramesResetClicked() {
vr::Compositor_CumulativeStats pStats; m_droppedFramesOffset = m_cumStats.m_nNumDroppedFrames;
vr::VRCompositor()->GetCumulativeStats(&pStats, sizeof(vr::Compositor_CumulativeStats));
m_droppedFramesOffset = pStats.m_nNumDroppedFrames;
} }
void StatisticsTabController::reprojectedFramesResetClicked() { void StatisticsTabController::reprojectedFramesResetClicked() {
vr::Compositor_CumulativeStats pStats; m_reprojectedFramesOffset = m_cumStats.m_nNumReprojectedFrames;
vr::VRCompositor()->GetCumulativeStats(&pStats, sizeof(vr::Compositor_CumulativeStats));
m_reprojectedFramesOffset = pStats.m_nNumReprojectedFrames;
} }
void StatisticsTabController::timedOutResetClicked() { void StatisticsTabController::timedOutResetClicked() {
vr::Compositor_CumulativeStats pStats; m_timedOutOffset = m_cumStats.m_nNumTimedOut;
vr::VRCompositor()->GetCumulativeStats(&pStats, sizeof(vr::Compositor_CumulativeStats)); }
m_timedOutOffset = pStats.m_nNumTimedOut;
void StatisticsTabController::totalRatioResetClicked() {
m_totalRatioPresentedOffset = m_cumStats.m_nNumFramePresents;
m_totalRatioReprojectedOffset = m_cumStats.m_nNumReprojectedFrames;
} }
} // namespace advconfig } // namespace advconfig
+10 -5
View File
@@ -18,9 +18,11 @@ class StatisticsTabController : public QObject {
Q_PROPERTY(float hmdRotations READ hmdRotations) Q_PROPERTY(float hmdRotations READ hmdRotations)
Q_PROPERTY(float leftControllerMaxSpeed READ leftControllerMaxSpeed) Q_PROPERTY(float leftControllerMaxSpeed READ leftControllerMaxSpeed)
Q_PROPERTY(float rightControllerMaxSpeed READ rightControllerMaxSpeed) Q_PROPERTY(float rightControllerMaxSpeed READ rightControllerMaxSpeed)
Q_PROPERTY(int presentedFrames READ presentedFrames)
Q_PROPERTY(int droppedFrames READ droppedFrames) Q_PROPERTY(int droppedFrames READ droppedFrames)
Q_PROPERTY(int reprojectedFrames READ reprojectedFrames) Q_PROPERTY(int reprojectedFrames READ reprojectedFrames)
Q_PROPERTY(int timedOut READ timedOut) Q_PROPERTY(int timedOut READ timedOut)
Q_PROPERTY(float totalReprojectedRatio READ totalReprojectedRatio)
private: private:
OverlayController* parent; OverlayController* parent;
@@ -34,21 +36,20 @@ private:
unsigned lastPosTimer = 0; unsigned lastPosTimer = 0;
float lastHmdPos[3]; float lastHmdPos[3];
bool lastHmdPosValid = false; bool lastHmdPosValid = false;
unsigned compositorStatsPid = 0;
float m_hmdRotation = 0.0f; float m_hmdRotation = 0.0f;
double m_hmdDistanceMoved = 0.0; double m_hmdDistanceMoved = 0.0;
float m_leftControllerMaxSpeed = 0.0f; float m_leftControllerMaxSpeed = 0.0f;
float m_rightControllerMaxSpeed = 0.0f; float m_rightControllerMaxSpeed = 0.0f;
vr::Compositor_CumulativeStats m_cumStats;
unsigned m_presentedFramesOffset = 0;
unsigned m_droppedFramesOffset = 0; unsigned m_droppedFramesOffset = 0;
unsigned m_reprojectedFramesOffset = 0; unsigned m_reprojectedFramesOffset = 0;
unsigned m_timedOutOffset = 0; unsigned m_timedOutOffset = 0;
unsigned m_totalRatioPresentedOffset = 0;
unsigned m_totalRatioReprojectedOffset = 0;
public: public:
void initStage1(); void initStage1();
@@ -61,18 +62,22 @@ public:
float rightControllerMaxSpeed() const; float rightControllerMaxSpeed() const;
float leftControllerMaxSpeed() const; float leftControllerMaxSpeed() const;
unsigned presentedFrames() const;
unsigned droppedFrames() const; unsigned droppedFrames() const;
unsigned reprojectedFrames() const; unsigned reprojectedFrames() const;
unsigned timedOut() const; unsigned timedOut() const;
float totalReprojectedRatio() const;
public slots: public slots:
void statsDistanceResetClicked(); void statsDistanceResetClicked();
void statsRotationResetClicked(); void statsRotationResetClicked();
void statsLeftControllerSpeedResetClicked(); void statsLeftControllerSpeedResetClicked();
void statsRightControllerSpeedResetClicked(); void statsRightControllerSpeedResetClicked();
void presentedFramesResetClicked();
void droppedFramesResetClicked(); void droppedFramesResetClicked();
void reprojectedFramesResetClicked(); void reprojectedFramesResetClicked();
void timedOutResetClicked(); void timedOutResetClicked();
void totalRatioResetClicked();
}; };