Skip to content
Snippets Groups Projects
Forked from The Tor Project / Applications / Tor Browser
Source project has a limited visibility.
  • Robert Mader's avatar
    529f433f
    Bug 1645528 - Connect nsRefreshDrivers in content processes with a... · 529f433f
    Robert Mader authored
    Bug 1645528 - Connect nsRefreshDrivers in content processes with a widget-local vsync source r=mattwoodrow,emilio
    
    To allow `requestAnimationFrame()` and similar things to run at monitor
    speed if there is only a window-specific vsyncsource available.
    This is the case for Wayland and, in the future, EGL/X11. Other backends
    may opt for window specific vsyncsources as well at some point.
    
    The idea is to, instead of using global vsync objects, expose a vsyncsource
    from nsWindow and use it for refresh drivers. For the content process, move
    VsyncChild to BrowserChild, so for each Browserchild there is only one
    VsyncChild to which all refresh drivers connect.
    
    IPC in managed either by PBrowser or PBackground. Right now, PBrowser is
    only used on Wayland, as both PBrowser and the Wayland vsyncsource run
    on the main thread. Other backends keep using the background thread for
    now.
    
    While at it, make it so that we constantly update the refresh rate. This
    is necessary for Wayland, but also on other platforms variable refresh rates
    are increasingly common. Do that by transimitting the vsync rate `SendNotify()`.
    
    How to test:
     - run the Wayland backend
     - enable `widget.wayland_vsync.enabled`
     - optionally: disable `privacy.reduceTimerPrecision`
     - run `vsynctester.com` or `testufo.com`
    
    Expected results:
    Instead of fixed 60Hz, things should update at monitor refresh rate -
    e.g. 144Hz
    
    Original patch by Kenny Levinsen.
    
    Depends on D98254
    
    Differential Revision: https://phabricator.services.mozilla.com/D93173
    529f433f
    History
    Bug 1645528 - Connect nsRefreshDrivers in content processes with a...
    Robert Mader authored
    Bug 1645528 - Connect nsRefreshDrivers in content processes with a widget-local vsync source r=mattwoodrow,emilio
    
    To allow `requestAnimationFrame()` and similar things to run at monitor
    speed if there is only a window-specific vsyncsource available.
    This is the case for Wayland and, in the future, EGL/X11. Other backends
    may opt for window specific vsyncsources as well at some point.
    
    The idea is to, instead of using global vsync objects, expose a vsyncsource
    from nsWindow and use it for refresh drivers. For the content process, move
    VsyncChild to BrowserChild, so for each Browserchild there is only one
    VsyncChild to which all refresh drivers connect.
    
    IPC in managed either by PBrowser or PBackground. Right now, PBrowser is
    only used on Wayland, as both PBrowser and the Wayland vsyncsource run
    on the main thread. Other backends keep using the background thread for
    now.
    
    While at it, make it so that we constantly update the refresh rate. This
    is necessary for Wayland, but also on other platforms variable refresh rates
    are increasingly common. Do that by transimitting the vsync rate `SendNotify()`.
    
    How to test:
     - run the Wayland backend
     - enable `widget.wayland_vsync.enabled`
     - optionally: disable `privacy.reduceTimerPrecision`
     - run `vsynctester.com` or `testufo.com`
    
    Expected results:
    Instead of fixed 60Hz, things should update at monitor refresh rate -
    e.g. 144Hz
    
    Original patch by Kenny Levinsen.
    
    Depends on D98254
    
    Differential Revision: https://phabricator.services.mozilla.com/D93173