Ich habe lange gedacht, dass es einen Abbruchmechanismus in der Pixel-Pipeline gibt. Der Anwendungsfall ist folgender:
- Sie ändern einen Modulparameter,
- die Vorschaubilder (die zentrale Dunkelraumvorschau und das Thumbnail im linken Bereich, das auch für Histogramm und Farbwähler verwendet wird) rechnen ihre Pipeline neu, um diese Änderung zu berücksichtigen,
- eines der Vorschaubilder endet mit dem Rendern vor dem anderen, und das Ergebnis ist offensichtlich nicht das, was Sie wollten,
- Sie ändern erneut den Modulparameter, ohne darauf zu warten, dass die Neuberechnung abgeschlossen ist.
In diesem Fall möchten Sie alle aktiven Pipelines beenden, weil deren Ausgabe nicht verwendet wird, und alles sofort mit neuen Parametern neu berechnen. Außer Darktable tut das nicht, es lässt die Pipeline beenden, bevor sie neu startet, und angesichts der Kommentare im Quellcode scheint es sich um eine relativ neue Regression zu handeln und nicht um das ursprünglich beabsichtigte Verhalten.
Ich habe diese Funktion in Ansel (neu)implementiert, aber es ist knifflig, da wir mit verschiedenen Threads (GUI, Bearbeitungshistorie und Pipeline auf CPU/OpenCL) zu tun haben und sie ordnungsgemäß synchronisieren müssen.
Wenn dies schief geht, können Sie korrekte Vorschaubilder aus konsistenten Cache-Zuständen erleben. Dies ist nur ein GUI-Problem und die Abschwächungsstrategie besteht darin, zum globalen Menü -> Ausführen -> Alle Caches ungültig machen zu gehen.
Um zu debuggen, können Sie Ansel mit Folgendem starten:
1$ ansel -d perf
Wenn Sie mit Schiebereglern und Kombofeldern in der GUI interagieren (z.B. hier im Belichtungsmodul), erhalten Sie:
1100,407003 [dev_process_all] Sending killswitch signal on running pipelines took 0,000 secs (0,000 CPU)
2100,509816 [dev_pixelpipe] took 0,011 secs (0,023 CPU) processed `exposure` on GPU, blended on GPU [full]
3100,510498 [dev_pixelpipe] took 0,019 secs (0,035 CPU) processed `exposure` on GPU, blended on GPU [preview]
4100,533228 [dev_pixelpipe] took 0,023 secs (0,061 CPU) processed `lens correction` on GPU, blended on GPU [full]
5100,558939 [dev_pixelpipe] took 0,026 secs (0,129 CPU) processed `tone equalizer` on CPU, blended on CPU [full]
6100,563703 [dev_pixelpipe] took 0,005 secs (0,008 CPU) processed `unbreak input profile` on GPU, blended on GPU [full]
7...
Das normale Verhalten besteht darin, dass die Zeile [dev_process_all] sending killswitch signal
zur Zeit Ihrer Interaktion erscheinen sollte und von einer Neuberechnung gefolgt werden sollte, die beim Modul beginnt, mit dem Sie interagiert haben (nicht dem vorherigen, nicht dem nachfolgenden), bis zum Ende (Anzeigecodierungsmodul).
Translated from English by : ChatGPT. In case of conflict, inconsistency or error, the English version shall prevail.