Added reprojection ratio to statistics page.
This commit is contained in:
@@ -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 {
|
||||||
|
|||||||
@@ -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
@@ -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) {
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user