rnmapbox / maps

A Mapbox react native module for creating custom maps
MIT License
2.28k stars 848 forks source link

[Bug]: High CPU usage and crash when Background Modes Location updates is turned on #3700

Open ryansommers opened 3 days ago

ryansommers commented 3 days ago

Mapbox Implementation

Mapbox

Mapbox Version

10.19.0

React Native Version

0.76.0

Platform

iOS

@rnmapbox/maps version

10.1.33

Standalone component to reproduce

import React from 'react';
import Mapbox from '@rnmapbox/maps';

Mapbox.setAccessToken('TOKEN');

class App extends React.Component {

  render() {
    return (
      <Mapbox.MapView style={{flex: 1}}>
        <Mapbox.Camera followUserLocation followZoomLevel={16} />
      </Mapbox.MapView>
    )
  }
}

export default App;

Observed behavior and steps to reproduce

When Background Modes: Current location is enabled in Xcode, Mapbox’s com.mapbox.common.location.sharedRunLoop goes to 100% CPU as soon as it starts. This is causing significant battery drain and crashes when the app is in the background as the system shuts the app down due to high CPU usage.

Expected behavior

com.mapbox.common.location.sharedRunLoop doesn’t use so much CPU

Notes / preliminary analysis

No changes to Example app code @rnmapbox/maps/example

Occasionally the issue seems to be timing dependent, like it happens more consistently the earlier Mapbox is loaded. If that’s the case in your testing, update example/src/App.js’s render method to the standalone component above.

Additional links and references

No response

ryansommers commented 2 days ago

Wanted to add: this same behavior happens when starting navigation with Mapbox Navigation but not using Mapbox Maps in any way, so I'm guessing it's some bit of shared location code both are using.

ryansommers commented 2 days ago

Downgrading to rnmapbox 10.1.31 seems to fix the issue.