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;
 };