O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.
Esta página foi traduzida pela API Cloud Translation.
Switch to English

VSYNC

O sinal VSYNC sincroniza o pipeline de exibição. O pipeline de exibição consiste na renderização do aplicativo, composição do SurfaceFlinger e o Hardware Composer (HWC) apresentando imagens na exibição. O VSYNC sincroniza o tempo que os aplicativos despertam para iniciar a renderização, o tempo que o SurfaceFlinger acorda para compor a tela e o ciclo de atualização da tela. Essa sincronização elimina falhas e melhora o desempenho visual dos gráficos.

O HWC gera eventos VSYNC e os envia para SurfaceFlinger por meio do retorno de chamada:

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

SurfaceFlinger controla se o HWC gera ou não eventos VSYNC chamando setVsyncEnabled . O SurfaceFlinger permite que setVsyncEnabled gere eventos VSYNC para que possa sincronizar com o ciclo de atualização da tela. Quando SurfaceFlinger é sincronizado com o ciclo de atualização da tela, SurfaceFlinger desativa setVsyncEnabled para parar o HWC de gerar eventos VSYNC. Se o SurfaceFlinger detectar uma diferença entre o VSYNC real e o VSYNC, o SurfaceFlinger previamente estabelecido reativa a geração de eventos VSYNC.

Deslocamento VSYNC

O aplicativo de sincronização e o SurfaceFlinger renderizam loops para o hardware VSYNC. Em um evento VSYNC, o display começa a mostrar o quadro N enquanto o SurfaceFlinger começa a compor as janelas para o quadro N + 1 . O aplicativo lida com a entrada pendente e gera o quadro N + 2 .

A sincronização com VSYNC oferece latência consistente. Ele reduz erros em aplicativos e no SurfaceFlinger e minimiza a oscilação e a defasagem dos monitores. Isso pressupõe que os tempos de aplicativo e SurfaceFlinger por quadro não variam muito. A latência é de pelo menos dois quadros.

Para remediar isso, você pode empregar compensações VSYNC para reduzir a latência de entrada para exibição, tornando app e sinal de composição relativo ao hardware VSYNC. Isso é possível porque o aplicativo mais a composição geralmente leva menos de 33 ms.

O resultado do deslocamento VSYNC são três sinais com o mesmo período e fase de deslocamento:

  • HW_VSYNC_0 - O display começa a mostrar o próximo quadro.
  • VSYNC - O aplicativo lê a entrada e gera o próximo quadro.
  • SF_VSYNC - SurfaceFlinger começa a composição para o próximo quadro.

Com o deslocamento VSYNC, SurfaceFlinger recebe o buffer e compõe o quadro enquanto o aplicativo simultaneamente processa a entrada e renderiza o quadro.

DispSync

DispSync mantém um modelo dos eventos VSYNC baseados em hardware periódicos de um monitor e usa esse modelo para executar retornos de chamada em deslocamentos de fase específicos dos eventos VSYNC de hardware.

DispSync é um loop de bloqueio de fase de software (PLL) que gera os sinais VSYNC e SF_VSYNC usados ​​pelo Choreographer e SurfaceFlinger, mesmo se não for compensado pelo VSYNC de hardware.

Fluxo DispSync

Figura 1. Fluxo DispSync

DispSync tem as seguintes qualidades:

  • Referência - HW_VSYNC_0.
  • Saída - VSYNC e SF_VSYNC.
  • Feedback - Retire os carimbos de data / hora do sinal fence do Hardware Composer.

VSYNC / Deslocamento de aposentadoria

O carimbo de data / hora do sinal das cercas retiradas deve corresponder a HW VSYNC, mesmo em dispositivos que não usam a fase de deslocamento. Caso contrário, os erros parecem ser mais graves do que são. Os painéis inteligentes geralmente têm um delta onde a barreira de retirada é o fim do acesso direto à memória (DMA) para exibir a memória, mas a chave de exibição real e HW VSYNC é algum tempo depois.

PRESENT_TIME_OFFSET_FROM_VSYNC_NS é definido no BoardConfig.mk makefile do dispositivo. Baseia-se no controlador de exibição e nas características do painel. O tempo desde o registro de data e hora da cerca de retirada até o sinal HW VSYNC é medido em nanossegundos.

Deslocamentos VSYNC e SF_VSYNC

VSYNC_EVENT_PHASE_OFFSET_NS e SF_VSYNC_EVENT_PHASE_OFFSET_NS são definidos de forma conservadora com base em casos de uso de alta carga, como composição de GPU parcial durante a transição de janela ou a rolagem do Chrome por uma página da web contendo animações. Esses deslocamentos permitem um longo tempo de renderização do aplicativo e um longo tempo de composição da GPU.

Mais de um milissegundo ou dois de latência é perceptível. Para minimizar a latência sem aumentar significativamente a contagem de erros, integre o teste de erro automatizado Thorogh.