NWACus / avy

Mobile-Native Viewing of NAC Avalanche Forecasts
MIT License
11 stars 7 forks source link

Low-Powered Android Phones Drop Frames Frequently #658

Open stevekuznetsov opened 8 months ago

stevekuznetsov commented 8 months ago

With the performance overlay up, my Samsung Galaxy A13 (Exynos 850 - 6 cores @2GHz, 3GB RAM) drops 10-20 frames on every navigation, and the JS thread drops from 60FPS to 30 or so.

Similarly, on startup it takes a good while for background tasks to complete. In both cases, input processing is lagged until the JS thread catches up. I think this may be what @floatplane reported recently on his Android and may be some of the slowness @charlotteguard experiences on Android, but notably is not the issue where the rest of the app is responsive, but navigation is not firing.

stevekuznetsov commented 8 months ago

Some low-hanging fruit may be logging. The docs specifically call out console.log and we log to the console in release builds right now. Using only the Bunyan sink for the log file in release builds should be fairly straightforward.

stevekuznetsov commented 8 months ago

520 is tangentially related

stevekuznetsov commented 8 months ago

Sadly it looks like using the sampling profiler will be a lot of work: https://github.com/expo/expo/issues/17307

At least on my workstation, I can't run profiling from the Chrome Dev Tools - recording a profile seems to work, but loading it into the tool to view it hangs forever and makes the rest of the Dev Tools panel unresponsive. This might be some permutation of this issue: https://github.com/facebook/hermes/issues/1187

stevekuznetsov commented 8 months ago

It looks like the "JavaScript Profiler" tab in Chrome Dev Tools does work - and I wonder if that is using the Hermes Sampling Profiler? Time to figure out source maps.

stevekuznetsov commented 8 months ago

Looks like we have some possibility of getting symbolicated profiles and even doing so for release builds: https://github.com/facebook/hermes/issues/760#issuecomment-1888644262

stevekuznetsov commented 8 months ago

Unfortunately, the react-native-release-profiler requires us to eject.

stevekuznetsov commented 6 months ago
$ npx react-devtools

Works like a charm. Had trouble getting $ npx react-native start --experimental-debugger to work through expo.

I'm really not seeing anything crazy.