Bands in Filter and Parametric EQ drag at about 30 fps in a large project #394

Closed
opened 2026-10-10 19:15:17 +02:00 by meleki · 1 comment
Owner

Wunsch des Users (2026-10-10): Beim Bearbeiten der Bänder in Filter und Parametric EQ läuft der Editor mit etwa 30 statt 60 fps.

Gemessen auf stein2 an einer Kopie von Garden of Sacrifices (162 Assets), Band im EQ-Node gezogen, 250 Mausbewegungen pro Sekunde, 3 s:

  • Jeder Vorschau-Frame (FramePreview → state.preview() → Ereignis project) kostet in den Listenern etwa 17 ms.
  • Davon entfallen ~7,6 ms auf die versteckte Szenenansicht (SceneViewport.redraw, zeichnet die ganze Szene neu, obwohl der Sound-FX-Tab vorne ist) und ~4,8 ms auf preloadProjectFiles (Datenwalk über alle Assets und Bake-Prüfung).
  • Im kleinen Fixture-Projekt fällt das kaum auf (~4,7 ms je Frame).

Betrifft jeden Drag mit FramePreview, also auch die Knöpfe der Geräte im Graphen.

Vorschlag: Was man während eines Drag-Frames nicht sieht, wartet auf den Befehl am Ende des Drags. Die versteckte Szenenansicht holt beim Zeigen nach (wie schon im Play-Modus seit #265).

Wunsch des Users (2026-10-10): Beim Bearbeiten der Bänder in Filter und Parametric EQ läuft der Editor mit etwa 30 statt 60 fps. Gemessen auf stein2 an einer Kopie von *Garden of Sacrifices* (162 Assets), Band im EQ-Node gezogen, 250 Mausbewegungen pro Sekunde, 3 s: - Jeder Vorschau-Frame (`FramePreview` → `state.preview()` → Ereignis `project`) kostet in den Listenern etwa **17 ms**. - Davon entfallen ~7,6 ms auf die **versteckte Szenenansicht** (`SceneViewport.redraw`, zeichnet die ganze Szene neu, obwohl der Sound-FX-Tab vorne ist) und ~4,8 ms auf **`preloadProjectFiles`** (Datenwalk über alle Assets und Bake-Prüfung). - Im kleinen Fixture-Projekt fällt das kaum auf (~4,7 ms je Frame). Betrifft jeden Drag mit `FramePreview`, also auch die Knöpfe der Geräte im Graphen. Vorschlag: Was man während eines Drag-Frames nicht sieht, wartet auf den Befehl am Ende des Drags. Die versteckte Szenenansicht holt beim Zeigen nach (wie schon im Play-Modus seit #265).
Author
Owner

Erledigt mit cb31832, Wiki 5a21c02.

Ursache

Jeder Frame eines Drags meldet „Projekt geändert“, und alle Listener laufen mit, auch die, deren Arbeit während des Drags niemand sieht. Gemessen an einer Kopie von „Garden of Sacrifices“ (162 Assets, Band im Parametric EQ, 250 Mausbewegungen pro Sekunde): 17 ms pro Frame. Davon ~7,6 ms die Szenenansicht im Hintergrund, die die ganze Szene neu zeichnet, und ~4,8 ms das Vorladen der Dateien, das alle Assets und Bakes durchgeht. Im kleinen Testprojekt sind es nur ~4,7 ms, deshalb ist es bisher nicht aufgefallen.

Was gebaut ist

  • FramePreview markiert seinen eigenen Frame, abfragbar über isDragFrame().
  • Die Szenenansicht hinter einem anderen Tab überspringt so einen Frame und zeichnet beim nächsten Zeigen neu, wie sie es im Play-Modus seit #265 schon tut.
  • preloadProjectFiles überspringt ihn ebenfalls.
  • Der Befehl, der den Drag beendet, meldet sich selbst, und ein Drag ohne Änderung endet mit einem normalen Preview. Beide holen also am Ende nach.
  • Das gilt für jeden Drag über FramePreview, auch für die Knöpfe der Geräte im Graphen.

Messung

pro Drag-Frame vorher nachher
Listener gesamt 17 ms 7,4 ms
Szenenansicht im Hintergrund (3 s) 814 ms 53 ms
Vorladen der Dateien (3 s) 514 ms 0,4 ms

Den Rest brauchen vor allem die sichtbaren Panels Hierarchy (~3 ms) und Assets (~1,3 ms). Die bleiben, weil man sie sieht.

Tests

Unit frame-preview, play-throttle → 29 Tests grün (1 neu)
e2e 34 (atx)                      → ALL PASSED, 136 Checks
Gate (atx)                        → CHECK EXIT 0, 288 Dateien, 4417 Tests
  • Gegenprobe: Ohne die Markierung wird genau der neue Test rot.

Nicht geprüft:

  • ob es auf deinem PC wirklich 60 fps sind. Gemessen ist auf stein2 (i5-7500T).
  • die übrigen e2e-Module, die bei verdeckter Szene ziehen, und der CI-Lauf zu 8c53ce0 (nicht abgewartet).
Erledigt mit cb31832, Wiki 5a21c02. ## Ursache Jeder Frame eines Drags meldet „Projekt geändert“, und alle Listener laufen mit, auch die, deren Arbeit während des Drags niemand sieht. Gemessen an einer Kopie von „Garden of Sacrifices“ (162 Assets, Band im Parametric EQ, 250 Mausbewegungen pro Sekunde): **17 ms pro Frame**. Davon ~7,6 ms die Szenenansicht im Hintergrund, die die ganze Szene neu zeichnet, und ~4,8 ms das Vorladen der Dateien, das alle Assets und Bakes durchgeht. Im kleinen Testprojekt sind es nur ~4,7 ms, deshalb ist es bisher nicht aufgefallen. ## Was gebaut ist - `FramePreview` markiert seinen eigenen Frame, abfragbar über `isDragFrame()`. - Die **Szenenansicht hinter einem anderen Tab** überspringt so einen Frame und zeichnet beim nächsten Zeigen neu, wie sie es im Play-Modus seit #265 schon tut. - **`preloadProjectFiles`** überspringt ihn ebenfalls. - Der Befehl, der den Drag beendet, meldet sich selbst, und ein Drag ohne Änderung endet mit einem normalen Preview. Beide holen also am Ende nach. - Das gilt für jeden Drag über `FramePreview`, auch für die Knöpfe der Geräte im Graphen. ## Messung | pro Drag-Frame | vorher | nachher | |---|---|---| | Listener gesamt | 17 ms | 7,4 ms | | Szenenansicht im Hintergrund (3 s) | 814 ms | 53 ms | | Vorladen der Dateien (3 s) | 514 ms | 0,4 ms | Den Rest brauchen vor allem die sichtbaren Panels Hierarchy (~3 ms) und Assets (~1,3 ms). Die bleiben, weil man sie sieht. ## Tests ``` Unit frame-preview, play-throttle → 29 Tests grün (1 neu) e2e 34 (atx) → ALL PASSED, 136 Checks Gate (atx) → CHECK EXIT 0, 288 Dateien, 4417 Tests ``` - Gegenprobe: Ohne die Markierung wird genau der neue Test rot. **Nicht geprüft:** - ob es auf deinem PC wirklich 60 fps sind. Gemessen ist auf stein2 (i5-7500T). - die übrigen e2e-Module, die bei verdeckter Szene ziehen, und der CI-Lauf zu 8c53ce0 (nicht abgewartet).
admin added this to the Development project 2026-10-10 20:05:28 +02:00
admin moved this to Next in Development on 2026-10-10 20:05:47 +02:00
admin moved this to Done in Development on 2026-10-10 20:05:52 +02:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: meleki/feuerwerk#394