From e5901fa875de8701bf1d94abad5fd39d3e982df2 Mon Sep 17 00:00:00 2001 From: Atlante45 <clement.brisset@gmail.com> Date: Thu, 29 Dec 2016 11:09:09 -0800 Subject: [PATCH] Make getHardwareStats thread safe --- plugins/oculus/src/OculusDisplayPlugin.cpp | 16 +++++++++++++--- plugins/oculus/src/OculusDisplayPlugin.h | 4 +++- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/plugins/oculus/src/OculusDisplayPlugin.cpp b/plugins/oculus/src/OculusDisplayPlugin.cpp index bad346b1ca..060823a748 100644 --- a/plugins/oculus/src/OculusDisplayPlugin.cpp +++ b/plugins/oculus/src/OculusDisplayPlugin.cpp @@ -22,6 +22,13 @@ const char* OculusDisplayPlugin::NAME { "Oculus Rift" }; static ovrPerfHudMode currentDebugMode = ovrPerfHud_Off; + +OculusDisplayPlugin::OculusDisplayPlugin() { + _appDroppedFrames.store(0); + _compositorDroppedFrames.store(0); +} + + bool OculusDisplayPlugin::internalActivate() { bool result = Parent::internalActivate(); currentDebugMode = ovrPerfHud_Off; @@ -158,15 +165,18 @@ void OculusDisplayPlugin::hmdPresent() { compositorDroppedFrames = frameStats.CompositorDroppedFrameCount; appDroppedFrames = frameStats.AppDroppedFrameCount; } - _hardwareStats["app_dropped_frame_count"] = appDroppedFrames; - _hardwareStats["compositor_dropped_frame_count"] = compositorDroppedFrames; + _appDroppedFrames.store(appDroppedFrames); + _compositorDroppedFrames.store(compositorDroppedFrames); } _presentRate.increment(); } QJsonObject OculusDisplayPlugin::getHardwareStats() const { - return _hardwareStats; + QJsonObject hardwareStats; + hardwareStats["app_dropped_frame_count"] = _appDroppedFrames.load(); + hardwareStats["compositor_dropped_frame_count"] = _compositorDroppedFrames.load(); + return hardwareStats; } bool OculusDisplayPlugin::isHmdMounted() const { diff --git a/plugins/oculus/src/OculusDisplayPlugin.h b/plugins/oculus/src/OculusDisplayPlugin.h index a953e01e2f..e44596d6e9 100644 --- a/plugins/oculus/src/OculusDisplayPlugin.h +++ b/plugins/oculus/src/OculusDisplayPlugin.h @@ -12,6 +12,7 @@ class OculusDisplayPlugin : public OculusBaseDisplayPlugin { using Parent = OculusBaseDisplayPlugin; public: + OculusDisplayPlugin(); ~OculusDisplayPlugin(); const QString getName() const override { return NAME; } @@ -36,6 +37,7 @@ private: gpu::FramebufferPointer _outputFramebuffer; bool _customized { false }; - QJsonObject _hardwareStats; + std::atomic_int _compositorDroppedFrames; + std::atomic_int _appDroppedFrames; };