VSYNC

Le signal VSYNC synchronise le pipeline d'affichage. Le pipeline d'affichage se compose du rendu de l'application, de la composition SurfaceFlinger et du compositeur matériel (HWC) présentant des images à l'écran. VSYNC synchronise l'heure à laquelle les applications se réveillent pour commencer le rendu, l'heure à laquelle SurfaceFlinger se réveille pour composer l'écran et le cycle d'actualisation de l'affichage. Cette synchronisation élimine le bégaiement et améliore les performances visuelles des graphiques.

Le HWC génère des événements VSYNC et envoie les événements à SurfaceFlinger via le rappel :

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

Contrôles SurfaceFlinger si le HWC génère ou non des événements VSYNC en appelant à setVsyncEnabled . SurfaceFlinger permet setVsyncEnabled de générer des événements VSYNC il peut se synchroniser avec le cycle de rafraîchissement de l'écran. Lorsque SurfaceFlinger est synchronisé sur le cycle de rafraîchissement d'affichage, désactive SurfaceFlinger setVsyncEnabled pour arrêter le HWC de générer des événements VSYNC. Si SurfaceFlinger détecte une différence entre le VSYNC réel et le VSYNC, il a précédemment établi que SurfaceFlinger réactive la génération d'événements VSYNC.

Décalage VSYNC

L'application de synchronisation et les boucles de rendu SurfaceFlinger vers le matériel VSYNC. Sur un événement VSYNC, l'affichage commence à montrer l' image N tandis que SurfaceFlinger commence fenêtres compositing pour la trame N + 1. Les poignées d'application dans l' attente d' entrée et génère la trame N + 2.

La synchronisation avec VSYNC offre une latence constante. Il réduit les erreurs dans les applications et SurfaceFlinger et minimise les affichages déphasés et déphasés les uns par rapport aux autres. Cela suppose que les temps par image de l'application et de SurfaceFlinger ne varient pas considérablement. La latence est d'au moins deux trames.

Pour remédier à cela, vous pouvez utiliser des décalages VSYNC pour réduire la latence d'entrée à affichage en créant un signal d'application et de composition par rapport au matériel VSYNC. Cela est possible car app plus composition prend généralement moins de 33 ms.

Le résultat du décalage VSYNC est trois signaux avec la même période et la même phase de décalage :

  • HW_VSYNC_0 - Affichage commence à montrer image suivante.
  • VSYNC - App lit l' entrée et génère image suivante.
  • SF_VSYNC - SurfaceFlinger commence compositing pour image suivante.

Avec le décalage VSYNC, SurfaceFlinger reçoit le tampon et compose le cadre tandis que l'application traite simultanément l'entrée et restitue le cadre.

Synchronisation d'affichage

DispSync maintient un modèle des événements VSYNC matériels périodiques d'un affichage et utilise ce modèle pour exécuter des rappels à des décalages de phase spécifiques à partir des événements VSYNC matériels.

DispSync est une boucle à verrouillage de phase logicielle (PLL) qui génère les signaux VSYNC et SF_VSYNC utilisés par Choreographer et SurfaceFlinger, même s'ils ne sont pas décalés par rapport au VSYNC matériel.

Flux DispSync

Figure 1. écoulement DispSync

DispSync a les qualités suivantes :

  • Référence - HW_VSYNC_0.
  • Sortie - VSYNC et SF_VSYNC.
  • Commentaires - Retire horodatages signal de clôture de matériel Composer.

VSYNC/Retirer le décalage

L'horodatage du signal des clôtures retirées doit correspondre à HW VSYNC, même sur les appareils qui n'utilisent pas la phase de décalage. Sinon, les erreurs semblent être plus graves qu'elles ne le sont. Les panneaux intelligents ont souvent un delta où la clôture de retrait est la fin de l'accès direct à la mémoire (DMA) pour afficher la mémoire, mais le commutateur d'affichage réel et HW VSYNC sont quelque temps plus tard.

PRESENT_TIME_OFFSET_FROM_VSYNC_NS est situé dans le dispositif BoardConfig.mk makefile. Il est basé sur le contrôleur d'affichage et les caractéristiques du panneau. Le temps entre l'horodatage de la clôture de retrait et le signal HW VSYNC est mesuré en nanosecondes.

Décalages VSYNC et SF_VSYNC

VSYNC_EVENT_PHASE_OFFSET_NS et SF_VSYNC_EVENT_PHASE_OFFSET_NS sont mis en valeur , fondée sur les cas d'utilisation à charge élevée, tels que la composition de GPU partielle pendant la transition de la fenêtre de défilement ou Chrome à travers une page Web contenant des animations. Ces décalages permettent un long temps de rendu de l'application et un long temps de composition GPU.

Plus d'une milliseconde ou deux de latence est perceptible. Pour minimiser la latence sans augmenter considérablement le nombre d'erreurs, intégrez des tests d'erreurs automatisés approfondis.