Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

VSYNC

La señal VSYNC sincroniza la canalización de visualización. La canalización de la pantalla consta de la representación de la aplicación, la composición de SurfaceFlinger y el Compositor de hardware (HWC) que presenta imágenes en la pantalla. VSYNC sincroniza la hora en que las aplicaciones se activan para comenzar a renderizar, la hora en que SurfaceFlinger se activa para componer la pantalla y el ciclo de actualización de la pantalla. Esta sincronización elimina el tartamudeo y mejora el rendimiento visual de los gráficos.

El HWC genera eventos VSYNC y envía los eventos a SurfaceFlinger a través de la devolución de llamada:

typedef void (*HWC2_PFN_VSYNC)(hwc2_callback_data_t callbackData,
        hwc2_display_t display, int64_t timestamp);

Controles SurfaceFlinger si el HWC genera eventos VSYNC llamando a setVsyncEnabled . SurfaceFlinger permite setVsyncEnabled para generar eventos VSYNC por lo que puede sincronizarse con el ciclo de actualización de la pantalla. Cuando SurfaceFlinger está sincronizado con el ciclo de visualización de actualización, desables SurfaceFlinger setVsyncEnabled para detener la HWC de generar eventos VSYNC. Si SurfaceFlinger detecta una diferencia entre el VSYNC real y el VSYNC, estableció previamente que SurfaceFlinger vuelve a habilitar la generación de eventos VSYNC.

Desplazamiento VSYNC

La aplicación de sincronización y SurfaceFlinger procesan bucles en el hardware VSYNC. En un evento VSYNC, la pantalla comienza mostrando la trama N, mientras que SurfaceFlinger comienza de composición ventanas para la trama N + 1. Las asas de aplicaciones en espera de entrada y genera la trama N + 2.

La sincronización con VSYNC ofrece una latencia constante. Reduce los errores en las aplicaciones y SurfaceFlinger y minimiza las pantallas que entran y salen de fase entre sí. Esto supone que los tiempos por fotograma de la aplicación y SurfaceFlinger no varían mucho. La latencia es de al menos dos fotogramas.

Para remediar esto, puede emplear compensaciones VSYNC para reducir la latencia de entrada a pantalla haciendo que la aplicación y la señal de composición sean relativas al hardware VSYNC. Esto es posible porque la aplicación más la composición suele tardar menos de 33 ms.

El resultado del desplazamiento VSYNC son tres señales con el mismo período y fase de desplazamiento:

  • HW_VSYNC_0 - Pantalla comienza a mostrar cuadro siguiente.
  • VSYNC - App lee la entrada y genera siguiente fotograma.
  • SF_VSYNC - SurfaceFlinger comienza de composición para el próximo marco.

Con el desplazamiento VSYNC, SurfaceFlinger recibe el búfer y compone el marco mientras la aplicación procesa simultáneamente la entrada y procesa el marco.

DispSync

DispSync mantiene un modelo de los eventos VSYNC periódicos basados ​​en hardware de una pantalla y utiliza ese modelo para ejecutar devoluciones de llamada en desplazamientos de fase específicos de los eventos VSYNC de hardware.

DispSync es un bucle de bloqueo de fase de software (PLL) que genera las señales VSYNC y SF_VSYNC utilizadas por Choreographer y SurfaceFlinger, incluso si no se desplaza desde el hardware VSYNC.

Flujo de DispSync

Flujo de la Figura 1. DispSync

DispSync tiene las siguientes cualidades:

  • Referencia - HW_VSYNC_0.
  • Salida - VSYNC y SF_VSYNC.
  • Comentarios - Retirar las marcas de tiempo de señal cerca de hardware Compositor.

VSYNC / Compensación de retiro

La marca de tiempo de la señal de las vallas retiradas debe coincidir con HW VSYNC, incluso en dispositivos que no utilizan la fase de compensación. De lo contrario, los errores parecen ser más graves de lo que son. Los paneles inteligentes a menudo tienen un delta donde la barrera de retiro es el final del acceso directo a la memoria (DMA) para mostrar la memoria, pero el cambio de pantalla real y HW VSYNC es un tiempo posterior.

PRESENT_TIME_OFFSET_FROM_VSYNC_NS se encuentra en el dispositivo de BoardConfig.mk makefile. Se basa en el controlador de pantalla y las características del panel. El tiempo desde la marca de tiempo de retirada de la cerca hasta la señal HW VSYNC se mide en nanosegundos.

Desplazamientos VSYNC y SF_VSYNC

VSYNC_EVENT_PHASE_OFFSET_NS y SF_VSYNC_EVENT_PHASE_OFFSET_NS se fijan convencionalmente basan en casos de uso de alta carga, como la composición GPU parcial durante la transición de la ventana o Chrome desplazamiento a través de una página web que contiene animaciones. Estas compensaciones permiten un tiempo de renderizado de la aplicación prolongado y un tiempo de composición de GPU prolongado.

Se nota más de uno o dos milisegundos de latencia. Para minimizar la latencia sin aumentar significativamente el recuento de errores, integre pruebas de errores automatizadas exhaustivas.