Administración de búfer de fotogramas del cliente

A partir de Android 13, los búferes de fotogramas nuevos, que se usan durante la composición del cliente, se asignan cada vez que cambia la resolución de pantalla. SurfaceFlinger realiza esta asignación en el siguiente ciclo de invalidación después de un cambio de resolución.

Administración del búfer de fotogramas durante los cambios de resolución

Los cambios de resolución ocurren debido a uno de los siguientes dos situaciones:

  • Un evento de conexión en caliente que inicia Hardware Composer (HWC), que ocurre cuando se intercambia desde uno mostrar en una pantalla externa distinta que tiene una resolución predeterminada diferente.

    Durante un evento de conexión en caliente, se liberan los controladores de los búferes de fotogramas anteriores. cuando se anule la asignación de los datos de visualización anteriores.

  • Un cambio de modo de visualización iniciado por SurfaceFlinger, que ocurre cuando la el usuario cambia la resolución con la configuración del usuario o una app cambia la resolución con preferredDisplayModeId.

    Durante un cambio de modo de visualización, los controladores de los búferes de fotogramas del cliente existentes SurfaceFlinger lanza antes de llamar a setActiveConfig o setActiveConfigWithConstraints.

Para evitar problemas catastróficos, como la fragmentación de la memoria, en dispositivos que memoria suficiente para los búferes de fotogramas nuevos y antiguos, que HWC deje de usar los búferes de fotogramas anteriores y libere para estos búferes de fotogramas, como se muestra en los siguientes casos:

Cuando liberas los controladores, se puede anular la asignación de la memoria del búfer de fotogramas antes de la asignación de nuevos búferes de fotogramas que realiza SurfaceFlinger durante el siguiente ciclo de invalidación.

Recomendaciones para la administración del búfer de fotogramas

Si HWC no libera controladores para los búferes de fotogramas anteriores a tiempo, La nueva asignación del búfer de fotogramas tiene lugar antes que el búfer de fotogramas anterior desasignación. Esto puede causar problemas catastróficos cuando falla la nueva asignación. debido a la fragmentación o a otros problemas. Y lo que es peor, si HWC no libera estos controladores en absoluto, de que ocurran cambios.

Para evitar fallas de asignación catastróficas, sigue estas recomendaciones:

  • Si HWC necesita seguir usando los búferes de fotogramas del cliente anterior hasta que el nuevo se proporcionan búferes de fotogramas del cliente, es fundamental reservar suficiente para el búfer de fotogramas nuevo y el antiguo, y tal vez ejecute la desfragmentación en el espacio de memoria del búfer de fotogramas.

  • Asigna un grupo de memoria dedicado para los búferes de fotogramas que sea independiente de el resto de la memoria del búfer gráfico. Esto es importante porque y reasignación de los búferes de fotogramas, un proceso de terceros puede de asignar memoria gráfica. Si el mismo bloque de memoria gráfica que usa el búfer de fotogramas y, si la memoria de gráficos está llena, puede ocupar la memoria gráfica asignada previamente por un búfer de fotogramas, lo que deja una memoria insuficiente para la reasignación del búfer de fotogramas o, posiblemente, la fragmentación del espacio de la memoria.

Cómo probar la administración del búfer de fotogramas

Se recomienda a los OEM que prueben la administración adecuada de la memoria del búfer de fotogramas del cliente de resolución especiales para su dispositivo, descritos de la siguiente manera:

  • Para eventos de conexión en caliente, solo tienes que desconectar y volver a conectar dos pantallas diferentes con resoluciones diferentes.

  • Para los interruptores de modo, usa el CTS ModeSwitchingTestActivity Prueba del verificador para iniciar un cambio de modo y probar el comportamiento de la memoria del búfer de fotogramas. Con esta prueba, se pueden identificar visualmente los problemas difíciles de detectar programáticamente.