Skip to content
  • Janic Duplessis's avatar
    Initial implementation of requestIdleCallback on Android · 18394fb1
    Janic Duplessis authored
    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.
    ...
    18394fb1