Ik heb heel lang gedacht dat er een of ander noodstopmechanisme op de pixelpipeline zat. Het gebruiksscenario is het volgende:
- je verandert een moduleparameter,
- de voorbeeldweergaven (die in het midden van de donkere kamer en de miniatuur in het linkerpaneel, ook gebruikt voor het histogram en de kleurenkiezers) herberekenen hun pipeline om rekening te houden met die verandering,
- een van de voorbeeldweergaven is klaar met renderen vóór de andere, en het resultaat is duidelijk niet wat je wilde,
- je verandert de moduleparameter opnieuw, zonder te wachten tot de herberekening klaar is.
In dat geval wil je alle actieve pipelines afbreken, omdat hun uitvoer toch niet gebruikt zal worden, en meteen alles opnieuw beginnen te berekenen met de nieuwe parameters. Alleen doet Darktable dat niet, het laat de pipeline eerst afronden voordat die opnieuw wordt gestart, en gezien de commentaren in de broncode lijkt het een vrij recente regressie te zijn en niet het oorspronkelijk bedoelde gedrag.
Ik heb deze functie (opnieuw) geïmplementeerd in Ansel, maar het is lastig omdat we te maken hebben met verschillende threads (GUI, bewerkingsgeschiedenis en pipeline op CPU/OpenCL) en we ze correct moeten synchroniseren.
Als dit misgaat, kun je vervormde voorbeeldweergaven ervaren als gevolg van inconsistente cachetoestanden. Dit is alleen een GUI-probleem, en de manier om dit te verhelpen is naar het globale menu -> Run -> Invalidate all caches te gaan.
Om te debuggen kun je Ansel starten met:
1$ ansel -d perfWanneer je in de GUI met schuifregelaars en keuzelijsten werkt (bijvoorbeeld hier in de belichtingsmodule), krijg je:
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...Normaal gedrag is dat de regel [dev_process_all] sending killswitch signal moet verschijnen op het moment van je interactie, en gevolgd moet worden door een herberekening die begint bij de module waarmee je interacteerde (niet die ervoor, niet die erna), tot aan het einde (de module voor schermcodering).
Translated from English by : Claude. In case of conflict, inconsistency or error, the English version shall prevail.