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`.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Es gehen die fps stark runter beim panning im Sound Tab, vorallem wenn es mehrere clips gibt.
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.Fix
Messung
Übrig bleiben Pixis Render-Durchlauf und die Ereignisverarbeitung, die auch beim bloßen Überfahren anfallen.
Tests
melektaus-atxwar 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
cf96442.