Ho pensato, per moltissimo tempo, che ci fosse qualche meccanismo di kill-switch sulla pipeline dei pixel. Il caso d’uso è il seguente :
- stai modificando il parametro di un modulo,
- le anteprime (quella centrale della camera oscura e la miniatura nel pannello di sinistra, usata anche per l’istogramma e i selettori di colore) ricalcolano la loro pipeline per tenere conto di quella modifica,
- una delle anteprime finisce il rendering prima dell’altra, e il risultato non è ovviamente ciò che volevi,
- modifichi di nuovo il parametro del modulo, senza aspettare che il ricalcolo finisca.
In quel caso, vuoi terminare tutte le pipeline attive perché il loro output non verrà usato, e iniziare immediatamente a ricalcolare tutto con i nuovi parametri. Solo che Darktable non fa questo, lascia che la pipeline finisca prima di riavviarla e, guardando i commenti nel codice sorgente, sembra essere una regressione piuttosto recente e non il comportamento originariamente previsto.
Ho (re)implementato questa funzione in Ansel, ma è complicato perché abbiamo a che fare con thread diversi (GUI, cronologia delle modifiche e pipeline su CPU/OpenCL) e dobbiamo sincronizzarli correttamente.
Se le cose vanno male, potresti riscontrare anteprime distorte a causa di stati della cache incoerenti. Questo è solo un problema della GUI, e la strategia di mitigazione è andare nel menu globale -> Run -> Invalidate all caches.
Per fare il debug, puoi avviare Ansel con :
1$ ansel -d perfInteragendo con cursori e caselle combinate nella GUI (per esempio qui nel modulo di esposizione), otterrai :
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...Il comportamento normale è che la riga [dev_process_all] sending killswitch signal dovrebbe apparire al momento della tua interazione, e dovrebbe essere seguita da un ricalcolo che parte dal modulo con cui hai interagito (non quello prima, non quello dopo), fino alla fine (il modulo di codifica del display).
Translated from English by : Claude. In case of conflict, inconsistency or error, the English version shall prevail.