He pensado, durante mucho tiempo, que había algún mecanismo de interruptor de apagado en la canalización de píxeles. El caso de uso es el siguiente:
- estás cambiando un parámetro del módulo,
- las vistas previas (la central del cuarto oscuro y la miniatura en el panel izquierdo, también utilizada para el histograma y selectores de color) recomputan su canalización para tener en cuenta ese cambio,
- una de las vistas previas termina de renderizar antes que la otra, y el resultado es obviamente no lo que querías,
- cambias nuevamente el parámetro del módulo, sin esperar a que termine la recomputación.
En ese caso, quieres eliminar todas las canalizaciones activas porque su salida no se utilizará y comenzar a recomputar todo de inmediato con los nuevos parámetros. Excepto que Darktable no hace eso, deja que la canalización termine antes de reiniciarla, y al observar los comentarios en el código fuente, parece ser una regresión bastante reciente y no el comportamiento originalmente previsto.
He (re)implementado esta función en Ansel, pero es complicado porque estamos tratando con diferentes hilos (interfaz gráfica, historial de edición y canalización en CPU/OpenCL) y necesitamos sincronizarlos adecuadamente.
Si esto sale mal, puedes experimentar vistas previas desordenadas por estados de caché inconsistentes. Este es solo un problema de la interfaz gráfica, y la estrategia de mitigación es ir al menú global -> Ejecutar -> Invalidar todos los cachés.
Para depurar, puedes iniciar Ansel con:
1$ ansel -d perf
Al interactuar con deslizadores y combinadores en la interfaz gráfica (por ejemplo, aquí en el módulo de exposición), obtendrás:
1100,407003 [dev_process_all] enviar señal de interruptor de apagado en canalizaciones en ejecución tomó 0,000 segs (0,000 CPU)
2100,509816 [dev_pixelpipe] tomó 0,011 segs (0,023 CPU) procesó `exposure` en GPU, mezclado en GPU [completo]
3100,510498 [dev_pixelpipe] tomó 0,019 segs (0,035 CPU) procesó `exposure` en GPU, mezclado en GPU [previsualización]
4100,533228 [dev_pixelpipe] tomó 0,023 segs (0,061 CPU) procesó `corrección de lente` en GPU, mezclado en GPU [completo]
5100,558939 [dev_pixelpipe] tomó 0,026 segs (0,129 CPU) procesó `ecualizador de tonos` en CPU, mezclado en CPU [completo]
6100,563703 [dev_pixelpipe] tomó 0,005 segs (0,008 CPU) procesó `perfil de entrada sin romper` en GPU, mezclado en GPU [completo]
7...
El comportamiento normal es que la línea [dev_process_all] enviar señal de interruptor de apagado
debería aparecer en el momento de tu interacción, y debería ser seguida por una recomputación que comience en el módulo con el que interactuaste (no el anterior, no el siguiente), hasta el final (módulo de codificación de visualización).
Translated from English by : ChatGPT. In case of conflict, inconsistency or error, the English version shall prevail.