Referência da estrutura vr_module
#include <
vr.h
>
Campos de dados |
|
struct hw_module_t | comum |
void(* | init )(struct vr_module *module) |
void(* | set_vr_mode )(struct vr_module *module, bool enabled) |
void * | reservado [8-2] |
Descrição detalhada
Implemente esse HAL para receber callbacks quando um aplicativo de realidade virtual (RV) estiver sendo usado. Os aplicativos de RV têm uma série de requisitos especiais de exibição e desempenho, incluindo:
- Latência baixa do sensor: a latência total de ponta a ponta da IMU, do acelerômetro e do giroscópio para um callback visível pelo app precisa ser extremamente baixa (normalmente, menos de 5 ms). Isso é necessário para o suporte ao sensor HIFI.
- Baixa latência de exibição: a latência total de ponta a ponta das chamadas de renderização da GPU até a atualização real da tela precisa ser a mais baixa possível. Isso é feito usando o SurfaceFlinger em um modo de buffer único e garantindo que as chamadas de exibição sejam sincronizadas corretamente com a detecção de tela. Esse comportamento é exposto por uma extensão EGL para aplicativos. Confira abaixo as extensões EGL necessárias para isso.
- Tela de baixa persistência: as configurações de persistência da tela precisam ser definidas o mais baixo possível, mantendo um brilho razoável. Para uma tela típica com 60 Hz, os pixels precisam ser iluminados por menos de 3,5 ms para serem considerados de baixa persistência. Isso evita o efeito fantasma durante os movimentos em uma configuração de RV e precisa ser ativado no HAL lights.h quando BRIGHTNESS_MODE_LOW_PERSISTENCE estiver definido.
- Desempenho consistente da GPU e da CPU: quando uma carga de trabalho mista de GPU/CPU é fornecida para um aplicativo de RV com bursts de trabalho em intervalos regulares várias vezes por frame, a programação da CPU precisa garantir que o trabalho da linha de renderização do aplicativo seja executado de forma consistente em 1ms após a programação e concluído antes do final da janela de exibição. Para isso, um único núcleo de CPU precisa ser reservado exclusivamente para a linha de renderização do aplicativo de RV em execução no modo de RV e disponibilizado no cpuset "top-app". Da mesma forma, uma CPU, GPU e clockrate de barramento adequados precisam ser mantidos para garantir que a carga de trabalho de renderização seja concluída no tempo alocado para renderizar cada frame quando a flag POWER_HINT_SUSTAINED_PERFORMANCE tiver sido definida no power.h HAL enquanto estiver no modo de RV quando o dispositivo não estiver sendo limitado termicamente.
- As extensões EGL necessárias precisam estar presentes: todas as configurações de GPU necessárias para permitir os recursos acima são necessárias, incluindo as extensões EGL: EGL_ANDROID_create_native_client_buffer, EGL_ANDROID_front_buffer_auto_refresh, EGL_EXT_protected_content, EGL_KHR_mutable_render_buffer, EGL_KHR_reusable_sync e EGL_KHR_wait_sync.
- Relatório térmico preciso: as temperaturas e os limites térmicos precisos precisam ser informados no HAL thermal.h . Especificamente, a temperatura da pele atual precisa ser informada com precisão para DEVICE_TEMPERATURE_SKIN, e o vr_throttling_threshold informado para esse dispositivo precisa informar com precisão o limite de temperatura acima do qual o regulador térmico do dispositivo limita a CPU, a GPU e/ou as frequências de bus abaixo do mínimo necessário para um desempenho consistente (consulte o ponto anterior).
Em geral, espera-se que os fornecedores que implementam esse HAL usem set_vr_mode como uma dica para ativar o ajuste de desempenho específico da RV necessário para qualquer um dos requisitos acima e ativar os recursos do dispositivo ideais para os modos de exibição de RV. A chamada set_vr_mode pode simplesmente não fazer nada se nenhuma otimização estiver disponível ou for necessária para atender aos requisitos acima.
Nenhum método nesse HAL será chamado simultaneamente pelo framework do Android.
Documentação do campo
struct hw_module_t common |
Métodos comuns do módulo. Ela precisa ser o primeiro membro de vr_module , já que os usuários dessa estrutura podem transmitir um hw_module_t para um ponteiro vr_module em contextos em que se sabe que o hw_module_t faz referência a um vr_module .
void(* init)(struct vr_module *module) |
Método de conveniência para a implementação do HAL configurar qualquer estado necessário na inicialização do ambiente de execução. Ele é chamado uma vez pelo VrManagerService durante a fase de inicialização. Nenhum método desse HAL será chamado antes da inicialização.
void(* set_vr_mode)(struct vr_module *module, bool enabled) |
Defina o estado do modo de RV. Os possíveis estados do parâmetro ativado são: "false": o modo de RV está desativado, desative todas as configurações específicas de RV. "true": o modo de RV está ativado, ative todas as configurações específicas de RV.
Isso é chamado sempre que o sistema Android entra ou sai do modo de RV. Isso geralmente ocorre quando o usuário muda para ou de um aplicativo de RV que está fazendo renderização estereoscópica.
A documentação desse struct foi gerada com base no seguinte arquivo:
- hardware/libhardware/include/hardware/ vr.h