-
Notifications
You must be signed in to change notification settings - Fork 1.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Run App::update
even when hidden
#5112
Comments
App::update
even when in background threadApp::update
even when in background tab
App::update
even when in background tabApp::update
even when hidden
Probably you shouldn't do that. Correct me if I'm wrong, but it seems there a battle of two opinions. When egui starts updating in background, someone complain why application consumes CPU when it hidden. Then egui stops updating in background and another people asks why his code didn't run when app not on the screen. It seems to me that there was a several iterations of this issue at the time present. egui is a GUI library. The GUI code should not drive the application logic. Period. If you need other activities except GUI, create another thread and do it there as frequently as you want. |
It will only update if someone calls
That's difficult on web (no easy access to threads). It also introduces the need for users to add locks to the data in their |
### What * Part of #7378 ### Issues found * #7425 * emilk/egui#5114 * #7427 ## How to test #### Test setup - build the viewer * `pixi run rerun-build` * `pixi run rerun-build-web` #### Test matrix * Run `cargo r -p test_ui_wakeup` and test: * That the viewer wakes up in the background when it's alt-tabbed * That the viewer wakes up when minimized (it should log "Received a message from…") * Run `cargo r -p test_ui_wakeup -- --serve` and test: * The viewer wakes up when browser is alt-tabbed away * Switch to a different browser tab, send a few messages, switch back. The messages should be there (this is not a conclusive test, as the messages might have been received on tab select) ## Tested ### Web * [x] ✅ Browser alt-tabbed * [x] ❌ Web background tab * Has never _properly_ worked. Is blocked on emilk/egui#5112 * It catches up when we switch back to the tab though ### Linux * [x] ✅X11 alt-tabbed * [x] ✅ X11 minimized * [x] ✅ Wayland alt-tabbed * [x] ❌ Wayland minimized (Hyprland placed on non-visible workspace) * [x] ✅ X-Wayland alt-tabbed * [x] ✅ X-Wayland minimized (Hyprland placed on non-visible workspace) ### Mac * [x] ✅ Native alt-tabbed * [x] ✅ Native minimized ### Windows * [x] ✅ Native alt-tabbed * [x] ✅ Native minimized ### Checklist * [x] I have read and agree to [Contributor Guide](https://github.com/rerun-io/rerun/blob/main/CONTRIBUTING.md) and the [Code of Conduct](https://github.com/rerun-io/rerun/blob/main/CODE_OF_CONDUCT.md) * [x] I've included a screenshot or gif (if applicable) * [x] I have tested the web demo (if applicable): * Using examples from latest `main` build: [rerun.io/viewer](https://rerun.io/viewer/pr/7422?manifest_url=https://app.rerun.io/version/main/examples_manifest.json) * Using full set of examples from `nightly` build: [rerun.io/viewer](https://rerun.io/viewer/pr/7422?manifest_url=https://app.rerun.io/version/nightly/examples_manifest.json) * [x] The PR title and labels are set such as to maximize their usefulness for the next release's CHANGELOG * [x] If applicable, add a new check to the [release checklist](https://github.com/rerun-io/rerun/blob/main/tests/python/release_checklist)! * [x] If have noted any breaking changes to the log API in `CHANGELOG.md` and the migration guide - [PR Build Summary](https://build.rerun.io/pr/7422) - [Recent benchmark results](https://build.rerun.io/graphs/crates.html) - [Wasm size tracking](https://build.rerun.io/graphs/sizes.html) To run all checks from `main`, comment on the PR with `@rerun-bot full-check`. --------- Co-authored-by: Antoine Beyeler <[email protected]>
If the eframe web app is in hidden (e.g. is in a background tab in the browser), then any call to
request_repaint
will be ignored, and not result in a call toApp::update
.That's because eframe checks if
request_repaint
has been called fromrequestAnimationFrame
callback, which is not called if the application is hidden.Solution
If the web page is hidden, then calling
request_repaint
should schedule asetTimer(…)
callback to callApp::update()
(must done via a setTimer delay, or we could haveApp::update
callrequest_repaint
which in turn callsApp::update
.We also need some guards to make sure that multiple calls to
request_repaint
in a row only results in one call toApp::update
, for instance via this pseudo-code:Related
App::tick
#5113The text was updated successfully, but these errors were encountered: