Sound Tab Panning #360

Closed
opened 2026-10-08 21:42:58 +02:00 by admin · 1 comment

Es gehen die fps stark runter beim panning im Sound Tab, vorallem wenn es mehrere clips gibt.

Es gehen die fps stark runter beim panning im Sound Tab, vorallem wenn es mehrere clips gibt.
admin added the high-priority label 2026-10-08 21:42:58 +02:00
admin added this to the Development project 2026-10-08 21:42:58 +02:00
admin moved this to Next in Development on 2026-10-08 21:43:02 +02:00
Owner

Behoben mit cf96442 „Keep the Sound tab smooth while it pans (#360)“. Wiki: 58d2b05 (nur die Zahl der Checks unter Development).

Ursache

Gemessen mit einer Wegwerf-Kopie von cbbf160bb7e8: „Take 1“ mit 4 Clips, 240 Verschiebe-Schritte mit der mittleren Maustaste, headless auf stein2.

  • Die Welle wurde bei jedem Pixel Verschiebung komplett neu gezeichnet, ein Rechteck pro Pixelspalte, jedes mit eigener Füllung. Je breiter das Fenster, desto teurer.
  • Die Sekunden-Labels des Lineals wurden ständig neu gerendert. Sie wurden nach Position vergeben: Rutscht links eine Marke raus, bekommt jedes Label den Text seines Nachbarn. Das waren 694 Text-Renders in 240 Frames.
  • Bei 1280 px Breite blieb es bei 60 fps, bei 2560 px fiel es auf 16 fps.
  • Mehrere Clips machen es schlimmer, der Hauptteil kam aber von Welle und Lineal.

Fix

  • Die Welle wird je eine halbe Breite über den sichtbaren Bereich hinaus gezeichnet. Beim Verschieben wird sie nur bewegt. Neu gezeichnet wird erst bei Zoom, Höhe, Größe oder wenn der Rand verlassen wird.
  • Alle Balken der Welle teilen sich eine Füllung.
  • Jedes Lineal-Label behält die Sekunde, die es schon zeigt.
  • Ein Clip-Name bekommt seinen Stil nur, wenn sich der Stil ändert.
  • Nebeneffekt: Auch beim Abspielen wird nur noch der Playhead neu gezeichnet, nicht die Welle.

Messung

vorher nachher
Main-Thread beim Verschieben, 2560x1440 712 ms/s 373 ms/s
Text-Renders, 2560x1440 694 65
Main-Thread beim Verschieben, 1280x800 429 ms/s 225 ms/s

Übrig bleiben Pixis Render-Durchlauf und die Ereignisverarbeitung, die auch beim bloßen Überfahren anfallen.

Tests

Unit wave-view   → 12 grün (1 neu), Gegenprobe rot
e2e 34 (stein2)  → ALL PASSED – 92 Checks (1 neu)
Gegenprobe e2e   → Labels nach Position: rot (7 statt 1 neu gesetzt)
Gate (stein2)    → 272 Dateien, 4210 Tests grün

melektaus-atx war nicht erreichbar, deshalb liefen alle Tests auf stein2. Den Screenshot nach dem Verschieben habe ich angesehen: Die Welle liegt richtig unter Clips und Lineal.

Nicht geprüft

  • Wie flüssig es an einem echten Bildschirm wirkt. Die fps bei 2560 px lassen sich headless nicht vergleichen, dort bremst die GPU schon beim Überfahren (~21 fps).
  • Der CI-Lauf zu cf96442.
Behoben mit `cf96442` „Keep the Sound tab smooth while it pans (#360)“. Wiki: `58d2b05` (nur die Zahl der Checks unter *Development*). ## Ursache Gemessen mit einer Wegwerf-Kopie von `cbbf160bb7e8`: „Take 1“ mit 4 Clips, 240 Verschiebe-Schritte mit der mittleren Maustaste, headless auf stein2. - **Die Welle wurde bei jedem Pixel Verschiebung komplett neu gezeichnet**, ein Rechteck pro Pixelspalte, jedes mit eigener Füllung. Je breiter das Fenster, desto teurer. - **Die Sekunden-Labels des Lineals wurden ständig neu gerendert.** Sie wurden nach Position vergeben: Rutscht links eine Marke raus, bekommt jedes Label den Text seines Nachbarn. Das waren 694 Text-Renders in 240 Frames. - Bei 1280 px Breite blieb es bei 60 fps, bei 2560 px fiel es auf 16 fps. - Mehrere Clips machen es schlimmer, der Hauptteil kam aber von Welle und Lineal. ## Fix - Die Welle wird je eine halbe Breite über den sichtbaren Bereich hinaus gezeichnet. Beim Verschieben wird sie nur bewegt. Neu gezeichnet wird erst bei Zoom, Höhe, Größe oder wenn der Rand verlassen wird. - Alle Balken der Welle teilen sich eine Füllung. - Jedes Lineal-Label behält die Sekunde, die es schon zeigt. - Ein Clip-Name bekommt seinen Stil nur, wenn sich der Stil ändert. - Nebeneffekt: Auch beim Abspielen wird nur noch der Playhead neu gezeichnet, nicht die Welle. ## Messung | | vorher | nachher | |---|---|---| | Main-Thread beim Verschieben, 2560x1440 | 712 ms/s | 373 ms/s | | Text-Renders, 2560x1440 | 694 | 65 | | Main-Thread beim Verschieben, 1280x800 | 429 ms/s | 225 ms/s | Übrig bleiben Pixis Render-Durchlauf und die Ereignisverarbeitung, die auch beim bloßen Überfahren anfallen. ## Tests ``` Unit wave-view → 12 grün (1 neu), Gegenprobe rot e2e 34 (stein2) → ALL PASSED – 92 Checks (1 neu) Gegenprobe e2e → Labels nach Position: rot (7 statt 1 neu gesetzt) Gate (stein2) → 272 Dateien, 4210 Tests grün ``` `melektaus-atx` war nicht erreichbar, deshalb liefen alle Tests auf stein2. Den Screenshot nach dem Verschieben habe ich angesehen: Die Welle liegt richtig unter Clips und Lineal. ## Nicht geprüft - Wie flüssig es an einem echten Bildschirm wirkt. Die fps bei 2560 px lassen sich headless nicht vergleichen, dort bremst die GPU schon beim Überfahren (~21 fps). - Der CI-Lauf zu `cf96442`.
admin moved this to Done in Development on 2026-10-09 06:51:32 +02:00
Sign in to join this conversation.
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: meleki/feuerwerk#360