Add stutter tracking for Oculus

This commit is contained in:
Brad Davis 2016-11-11 10:12:41 -08:00
parent c7d68aa9cf
commit 162f24decd
5 changed files with 18 additions and 8 deletions

View file

@ -710,3 +710,7 @@ void HmdDisplayPlugin::compositeExtra() {
HmdDisplayPlugin::~HmdDisplayPlugin() {
qDebug() << "Destroying HmdDisplayPlugin";
}
float HmdDisplayPlugin::stutterRate() const {
return _stutterRate.rate();
}

View file

@ -44,6 +44,8 @@ public:
return false;
}
float stutterRate() const override;
protected:
virtual void hmdPresent() = 0;
virtual bool isHmdMounted() const = 0;
@ -108,8 +110,9 @@ protected:
QMap<uint32_t, FrameInfo> _frameInfos;
FrameInfo _currentPresentFrameInfo;
FrameInfo _currentRenderFrameInfo;
RateCounter<> _stutterRate;
bool _disablePreview{ true };
bool _disablePreview { true };
private:
ivec4 getViewportForSourceSize(const uvec2& size) const;
float getLeftCenterPixel() const;

View file

@ -146,6 +146,16 @@ void OculusDisplayPlugin::hmdPresent() {
if (!OVR_SUCCESS(result)) {
logWarning("Failed to present");
}
static int droppedFrames = 0;
ovrPerfStats perfStats;
ovr_GetPerfStats(_session, &perfStats);
for (int i = 0; i < perfStats.FrameStatsCount; ++i) {
const auto& frameStats = perfStats.FrameStats[i];
int delta = frameStats.CompositorDroppedFrameCount - droppedFrames;
_stutterRate.increment(delta);
droppedFrames = frameStats.CompositorDroppedFrameCount;
}
}
_presentRate.increment();
}

View file

@ -708,7 +708,3 @@ bool OpenVrDisplayPlugin::isKeyboardVisible() {
int OpenVrDisplayPlugin::getRequiredThreadCount() const {
return Parent::getRequiredThreadCount() + (_threadedSubmit ? 1 : 0);
}
float OpenVrDisplayPlugin::stutterRate() const {
return _stutterRate.rate();
}

View file

@ -58,8 +58,6 @@ public:
// Possibly needs an additional thread for VR submission
int getRequiredThreadCount() const override;
float stutterRate() const override;
protected:
bool internalActivate() override;
void internalDeactivate() override;
@ -79,7 +77,6 @@ private:
vr::HmdMatrix34_t _lastGoodHMDPose;
mat4 _sensorResetMat;
bool _threadedSubmit { true };
RateCounter<> _stutterRate;
CompositeInfo::Array _compositeInfos;
size_t _renderingIndex { 0 };