cancel
Showing results for 
Search instead for 
Did you mean: 

FPS fluctuations

Kev1970
Explorer
I developed a game targeting GearVR and Go. Like any VR game it's imperative that it hits the screen refresh rate all of the time, in this case 60fps.

During testing and optimisation I noticed that on my Samsung S7 Gear VR device that although my game ran consistently at 60 FPS (super smooth and breathtakingly beautiful it looked too), randomly sometimes there could be stutters or "frame tears". I Identified this as background processes of a mobile phone and sure enough, using the phones' Device Management to clear out background processes and memory hoggers before starting a testing session gave me a better view on the actual performance of my game. Even the Oculus software would cause problems; one time in particular the game was stuttering so much I thought it was about to crash. After some minutes it recovered back to a super smooth 60FPS but when i checked after the session ended I saw that Oculus had Downloaded and installed 5 updated apps at that time while I'd been playing in VR. Disgusted, I immediately switched this option to manual update only (and it never happened again), but it highlighted the general problem perfectly; when in VR, VR is all that matters, everything else needs to shut down.

Since publication I have seen stats indicating that the same issue appears to occur on the Oculus Go, which i'd have thought would have a far more stable performance characteristic but it seems not. It's not like the framerate is generally bad on Go or anything, just that it doesn't always report as 60fps, sometimes it is but often may be 59.5 or 58.9 or suchlike as an average. From my own experience I suspect that if this is accurate then these dropped frames would be causing the player discomfort.

So my question is has anyone else experienced random frame skips on the Oculus Go caused by background processes and is there any remedy, any options to turn off automatic updates and the like when people are playing a game? Perhaps it is a known issue with the Oculus Go due to automatic throttling or boosting?

1 ACCEPTED SOLUTION

Accepted Solutions

Halfspacer
Adventurer
The thing about the stats is that they also take into account loading screens, and sometimes even if players record or cast gameplay. For Cyber Cycle we've averaged just above 70fps since release in October (Targeting 72), with plenty of session dips down to 30 fps (Since that's what recording tends to default to). 
I look at those performance analytics more as broad pointers. I'm not sure if GearVR simply isn't able to gather the same in-depth analytics, but at an average frame rate of 59.69, your performance metrics look perfectly fine to me. 
If you run OVR Metrics Tool (HUD) and it shows a steady 60 fps with no stalled frames, combined with your average frame rate of 59.69fps -- I'd say you can be pretty confident your app is hitting those performance targets. 

View solution in original post

7 REPLIES 7

Halfspacer
Adventurer
Perhaps it is a known issue with the Oculus Go due to automatic throttling or boosting?
Yep! Go will by dynamically adjust the clock level for the CPU and GPU based on app performance, and it isn't always able to spin up in time- so if your app fluctuates a lot in terms of CPU/GPU load, it may cause frame drops. One way to debug this is to set the clock rate manually in code and see if it gives you more reliable results. 

Another common cause of frame drops is garbage collection or expensive calls in a loop. In Unity, for instance, I often see people use calls like GetComponent or Camera.main inside Update(), and that's just asking for trouble on mobile. Another sneaky cause of performance issues is Debug.Log; If run in loops and high numbers, they will affect performance. 

Kev1970
Explorer
One way to debug this is to set the clock rate manually in code and see if it gives you more reliable results. 
Very interesting and thank you for your fast response.

I'd shied away from dictating the clock rates because I didn't want to burn more battery or risk any overheat than was absolutely necessary (ie making systems that did not have background processes suffer for the sake of ones who did) so I preferred to trust the system to do the right thing for each users circumstances.

My interpretation of your suggestion is to manually set the clock rates to "whatever the standard is for GearVR" with the intention of overriding the automatic throttling that may occur on the Oculus Go. Could you confirm that's what you meant?

Other than that I'd say that I was acutely sensitive to framerate in my entire approach to development and did everything I could to not allocate memory, not to use calls like GetComponent or Camera.main inside loops and not to have any Debug.Log statements hanging around. The background processes issue plagued me for so long before I realised what was happening that I ended up becoming obsessed by staying within published limits and testing relentlessly on my system to eradicate any possibility of a frameskip at any time. 

Also it has to be said that I don't even know if this has been a problem for my users since my sales numbers are so low and I have hardly any reviews so far. There's alot of, "reading too much in to meagre data" on my part.

But I do know what frameskips feel like in the headset; not pleasant and piecing together usage time versus framerate and guessing that possible frameskips maybe causing players to stop playing, maybe uninstalling and maybe even requesting refunds which would be tragic. I'd simply assumed that Oculus Go would be the same or better performance across the board compared to a GearVR on an S7 and that even if this had turned out not to be the case then the submission process would tell me during technical review. I'm feeling a bit burned tbh.

One last thing if I may; is Oculus Start membership much of a help do you think?

Halfspacer
Adventurer
I'd simply assumed that Oculus Go would be the same or better performance across the board compared to a GearVR on an S7
It definitely should perform better. I have never experienced or heard of any performance issues linked to background processes on Go.
One last thing if I may; is Oculus Start membership much of a help do you think?
A ton! Oculus Branded whiskey glass aside, the best thing about Start has been the community of fellow Start members. Highly recommend it 🙂

Kev1970
Explorer
2a0xs50dlvzk.jpg

You have now...one colour is a locked 60fps and the other just isnt at all. One is an aging S7 phone purchased in 2016 and the other is a selection of dedicated VR consoles purchased this year or last and made by Oculus themselves. 😕

I guess ill end up trying your cpu/gpu override idea but without a Go to test on it makes me nervous that I may make things worse and its not like ive had any reviews to tell me about it. Again i had assumed if there was any issue then Oculus would have made it known to me during technical review. 

Halfspacer
Adventurer
The thing about the stats is that they also take into account loading screens, and sometimes even if players record or cast gameplay. For Cyber Cycle we've averaged just above 70fps since release in October (Targeting 72), with plenty of session dips down to 30 fps (Since that's what recording tends to default to). 
I look at those performance analytics more as broad pointers. I'm not sure if GearVR simply isn't able to gather the same in-depth analytics, but at an average frame rate of 59.69, your performance metrics look perfectly fine to me. 
If you run OVR Metrics Tool (HUD) and it shows a steady 60 fps with no stalled frames, combined with your average frame rate of 59.69fps -- I'd say you can be pretty confident your app is hitting those performance targets. 

Kev1970
Explorer
Thank you for the reassurance, I take it on board and hope this is the case and will say again that ive not yet had reviews suggesting players are experiencing any comfort issues with frameskips. 

On the other hand though to me one skipped frame is a skipped frame too many and i worked so hard to ensure an ultra smooth experience on gear vr (at the very least when the phones background processes have been subdued) that when i see these fluctuations for the Oculus Go its like an horrific kick in the teeth and I worry some players may be having discomfort when they really shouldnt be. It should be even better for them and not compromised in any way.

As you say though the actual reporting on the Oculus Go maybe of a different basis to that on GearVR which may mean these figures are not like for like and so my concerns for player comfort will turn out to be unfounded. Fingers crossed.

Kev1970
Explorer
Months later and now in possession of an Oculus Go to test on I'd like to update this thread to say that it appears that the stats were unfortunately accurate all along, users were getting frameskips and yes it caused discomfort.

The remedy appears to be that running my 60fps game at 60fps is not enough, I actually have to run it at 72fps to make the frame pacing consistent and smooth on Oculus Go. Currently i'm suspecting a vsync issue in the Oculus libraries to be the cause and the issue does not appear on the GearVR whose screen of course always runs at 60fps and has no 72fps option.