Oculus Quest's framerate < Oculus Go's framerate for the same App

Hello everyone,

I developped an app for Oculus Go recently, using Unity and the OVR Plugin, and now I’m trying to port it to the Oculus Quest. The Oculus Go App was a bit laggy because there was a lot of world space UI, so I found ways to make it run smoothly at 60 fps.
When developping it for the Quest, I had to recreate a matching InputManager so it could work well, and I changed OVRManager’s target device from Go to Quest.
But when I build the app, it runs at maximum 40 fps on the Quest, even though it was really smooth on the Go.

Comparing both Profilers on my PC, I can’t manage to find any difference : it looks like a lot of CPU usage is taken by EventSystem ( because of World space UI), Camera Rendering and OVRManager.Update() (which obviously can’t be too altered (the raycasting part takes the most time)).
Of course this is because my PC isn’t using all the resources of the scene since VR isn’t activated, but to my knowledge there is still no way to connect the Unity profiler to an Android Oculus device.

Here is the Go App Profiler :

And here is the Quest’s :

Behaviour script Update takes even less time on the Quest because I managed to optimize some things.

So basically I want to know why the application takes way more resources on the Quest than on the Go. It can’t only be the 6 DOF component.

Any suggestion is welcome, Thank you !

You should check android runtime app profiling result.
Editor’s profiling is different from apk build’s one.

Here is the flow to check android profiling.

  1. Build APK with develoment build mode.
  2. connect to device with cable
  3. install your APK to device : adb install [your apk file name]
  4. create tunnel : adb forward tcp:34999 localabstract:Unity-[YourBundleIdentifier]
  5. In unity profiler window, switch to “Android Player(ADB@127.0.0.1:34999)”
  6. Run your apk on your device

After that, you can compare the performance.

cheers.

1 Like

Why are there allocations on a VR app?

WOW Thank you so much, I’ve been trying to find a way to live debug Quest and Go for days ! Guess I didn’t search well enough…
This will help me a lot. Now with live debugging I can see the same pattern about Camera Rendering and Behaviour Update, but the PostLateUpdate is taking 74% of the time (XR.WaitForGPU).
This is linked to VSync of course but I disabled it in the code, using

Application.targetFramerate = -1;

Is it something deeply linked to the device that I can’t control ?

Here is the live profiler :

5344890--539502--questAppLiveprofiler.png

Ok the fact that my FPS were halved was due to the GPU being a bit too busy. From what I understood, disabling VSync in Unity is useless when building an app for the Quest because it does apply it anyways in the device.

Basically if a frame did not finish computing when it is supposed to be rendered, the GPU will wait for the end of the next frame to render, which, in fact, renders 1 frame out of 2 if it happens continuously.

So I used the OVR Performance Lint Tool to see what was taking time on my GPU and fixed what needed to be fixed. Now I have a smooth 90 fps build.

Quite surprised that VSync would litteraly cut my framerate in 2, but hey, that’s how it works I guess.
Hope this helps if someone has a similar issue.

2 Likes

Yes, that is indeed how it works, but I’m still curious: what was taking GPU time for you, and how did you fix it?

A bunch of Quality Settings that were not adapted to Android basically, such as texture compression format or realtime global illumination.
I actually just looked at the OVR Performance Lint Tool. If the OVR plugin is imported you can access it in
Oculus > Tools > OVR Performance Lint Tool, and it will suggest changes that might improve CPU/GPU in VR.

1 Like

Sweet thanks for this I will check it also.