emilk/egui

Track repaint causes

Open

#3.931 geöffnet am 1. Feb. 2024

Auf GitHub ansehen
 (1 Kommentar) (2 Reaktionen) (1 zugewiesene Person)Rust (2.037 Forks)batch import
good first issue

Repository-Metriken

Stars
 (29.051 Stars)
PR-Merge-Metriken
 (Durchschn. Merge 11T 20h) (47 gemergte PRs in 30 T)

Beschreibung

Sometimes an egui application is repainting spuriously, and it can be hard to figure out why.

In particular: did someone call request_repaint, and if so, whom and why? There should be an API for that (ctx.why_did_we_repaint() -> Option<String> or something).

There are a few potential solutions: A) capture the callstack of each call to request_repaint B) capture the file:line of the function that called request_repaint using Location::caller() C) require a debug-string when calling request_repaint

A) will create a lot of noise (and a dependency on backtrace), so it is not very appealing. B) is pretty good, but seeing egui/src/context.rs:507 is not very informative C) is nice, but requires a breaking change, and clashing strings can make it hard to debug (e.g. several calls to request_repaint("animation").

I think a combination of B and C makes sense.

To avoid breaking changes we can deprecate request_repaint and create a new request_refresh or request_update or something that takes a impl Into<String> with the explanation for why there was a repaint. These strings are stored per viewport for two frames.

Contributor Guide