Durante muito tempo, eu achei que houvesse algum mecanismo de kill-switch no pipeline de pixels. O caso de uso é o seguinte:
- você está alterando um parâmetro de módulo,
- as prévias (a da sala escura central e a miniatura no painel esquerdo, também usada para o histograma e os seletores de cor) recalculam seu pipeline para levar em conta essa alteração,
- uma das prévias termina de renderizar antes da outra, e o resultado obviamente não é o que você queria,
- você altera novamente o parâmetro de módulo, sem esperar que o recálculo termine.
Nesse caso, você quer encerrar todos os pipelines ativos porque sua saída não será usada, e começar a recalcular tudo imediatamente com os novos parâmetros. Só que o Darktable não faz isso, ele deixa o pipeline terminar antes de reiniciá-lo, e olhando os comentários no código-fonte, parece ser uma regressão bastante recente e não o comportamento originalmente pretendido.
Eu (re)implementei esse recurso no Ansel, mas é complicado porque estamos lidando com diferentes threads (GUI, histórico de edição e pipeline na CPU/OpenCL) e precisamos sincronizá-los adequadamente.
Se isso der errado, você pode ter prévias corrompidas por estados de cache inconsistentes. Isso é um problema apenas da GUI, e a estratégia de mitigação é ir ao menu global -> Run -> Invalidate all caches.
Para depurar, você pode iniciar o Ansel com:
1$ ansel -d perfAo interagir com controles deslizantes e caixas de combinação na GUI (por exemplo, aqui no módulo de exposição), você obterá:
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...O comportamento normal é que a linha [dev_process_all] sending killswitch signal deve aparecer no momento da sua interação, e deve ser seguida por um recálculo começando no módulo com o qual você interagiu (não o anterior, não o posterior), até o fim (módulo de codificação de exibição).
Translated from English by : Claude. In case of conflict, inconsistency or error, the English version shall prevail.