Gráficos de Android: mecanismo Vsync

Tabla de contenido

introducción:

concepto:

Frecuencia de actualización:

cuadros por segundo:

Caton y marcos caídos:

Generación de Vsync:

El proceso de distribución de Vsync:


introducción:


El principio de visualización es actualizar continuamente los datos en el búfer de pantalla y la pantalla puede mostrarlos.

concepto:

Frecuencia de actualización:

La pantalla se actualiza a una frecuencia determinada. El proceso de actualización consiste en escanear progresivamente primero y luego escanear la primera línea del siguiente cuadro de imagen después de escanear los datos de un cuadro para repetir. Este proceso puede formar una frecuencia de actualización de cuadros estable. Generalmente es 60Hz, es decir, la pantalla se actualiza a la velocidad de actualizar 16,6 cuadros de imágenes en 1S. El usuario puede ver una imagen fluida y la velocidad a la que se actualiza la pantalla se denomina velocidad de fotogramas.

cuadros por segundo:

Es para datos de memoria de imágenes. Para el sistema Android, la síntesis y representación de datos de imágenes en la memoria también se almacena en el GraphicBuffer a una determinada velocidad. La velocidad a la que se genera la imagen se denomina velocidad de fotogramas.

Caton y marcos caídos:

La aplicación extrae los datos de la imagen, los almacena en la memoria de video a través de la representación sintética del servicio del sistema y luego los actualiza y lee en la pantalla para actualizar la visualización. Este es el proceso general de visualización.
Luego, si la frecuencia de actualización> frecuencia de cuadros, eso significa que la velocidad de salida de la imagen es menor que la frecuencia de actualización de la pantalla, lo que hará que los datos de la imagen leída sean los mismos datos de la imagen al actualizar, porque la velocidad de salida de la imagen no es suficiente. entonces los datos antiguos solo se pueden leer, así aparece el fenómeno de Caton.
Cuando la frecuencia de actualización <velocidad de fotogramas, significa que se dibujan muchos fotogramas de datos de imagen, pero debido a que su velocidad de actualización no puede mantener el ritmo, no puede leer todos los datos de imagen generados por el servidor en la pantalla y actualizarlos. un fenómeno en el que se pierden algunos datos del cuadro de imagen.

Esta es la causa principal del fenómeno de tartamudeo y la pérdida de cuadros es causada por el problema de sincronización entre la frecuencia de actualización y la velocidad de cuadros. Para resolver este problema, se introduce el mecanismo de Vsync.
¿Cómo sincroniza el mecanismo Vsync específico la velocidad de fotogramas y la frecuencia de actualización?
Utiliza principalmente una señal Vsync fija para sincronizar el trabajo y el flujo de datos de aplicaciones, servicios del sistema y visualización de pantalla. Correspondiente a los enlaces de dibujo, composición y renderizado, y actualización de la visualización.

Generación de Vsync:

Puede ser generado por hardware o software, el dispositivo generado por hardware es HWC y el software se genera mediante simulación de subprocesos VsyncThrerad. Una vez generado el evento Vsync, se controlará y distribuirá a otros dos subprocesos llamados
EventThread-app y EventThread-sf a través de un subproceso llamado DispSyncThread, que se proporcionan a la aplicación del lado de la aplicación y al servidor (SurfaceFlinger) respectivamente. Estos subprocesos de trabajo se crean cuando el servicio SurfaceFlinger inicia e inicializa init. Los subprocesos de EventThread-app y EventThread-sf necesitan realizar algunos cambios de fase en la señal de sincronización para cumplir con la cooperación en la tubería. VsyncThread se crea cuando ningún hardware HWC genera una señal Vsync.

El proceso de distribución de Vsync:

Cuando la señal Vsync es generada por el hardware, se volverá a llamar a mEventHandler.onVSyncReceived para procesar la tarea.
En el software, la operación de suspensión se ejecutará a través del bucle de hilo. Cuando se acabe el tiempo de suspensión, se volverá a llamar a mEventHandler.onVSyncReceived para procesar la tarea.

Cuando llega la señal Vsync, el hilo EventThread se activará y todas las conexiones registradas en EventThread se distribuirán, que se distribuye a través de mSendFd de BitTube. Después de la distribución, mReceivedFd puede recibir datos. Tanto SurfaceFlinger como la aplicación están escuchando este evento mReceivedFd.
. , cuando llegue, podrá responder a este evento para procesar la tarea. Este es el proceso de distribución básico de eventos Vsync.

 

 

Supongo que te gusta

Origin blog.csdn.net/haigand/article/details/132239549
Recomendado
Clasificación