Please sign in to comment.
Initial implementation of requestIdleCallback on Android
Summary: This is a follow up of the work by brentvatne in #5052. This addresses the feedback by astreet. - Uses ReactChoreographer with a new callback type - Callback dispatch logic moved to JS - Only calls into JS when needed, when there are pending callbacks, it even removes the Choreographer listener when no JS context listen for idle events. ** Test plan ** Tested by running a background task that burns all remaining idle time (see new UIExplorer example) and made sure that UI and JS fps stayed near 60 on a real device (Nexus 6) with dev mode disabled. Also tried adding a JS driven animation and it stayed smooth. Tested that native only calls into JS when there are pending idle callbacks. Also tested that timers are executed before idle callback. ``` requestIdleCallback(() => console.log(1)); setTimeout(() => console.log(2), 100); burnCPU(1000); // 2 // 1 ``` I did *not* test with webworkers but it should work as I'm using executor tokens. Closes #8569 Differential Revision: D3558869 Pulled By: astreet fbshipit-source-id: 61fa82eb26001d2b8c2ea69c35bf3eb5ce5454ba
- Loading branch information...
Showing with 437 additions and 29 deletions.
- +2 −0 .eslintrc
- +102 −0 Examples/UIExplorer/js/TimerExample.js
- +1 −1 ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java
- +2 −2 ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerImpl.java
- +5 −0 ReactAndroid/src/main/java/com/facebook/react/common/SystemClock.java
- +3 −4 ReactAndroid/src/main/java/com/facebook/react/modules/core/JSTimersExecution.java
- +162 −14 ReactAndroid/src/main/java/com/facebook/react/modules/core/Timing.java
- +6 −0 ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactChoreographer.java
- +56 −4 ReactAndroid/src/test/java/com/facebook/react/modules/timing/TimingModuleTest.java
- +13 −0 flow/global.js
Oops, something went wrong.