VSYNC

Сигнал VSYNC синхронизирует конвейер отображения. Конвейер отображения состоит из визуализации приложения, композиции SurfaceFlinger и Hardware Composer (HWC), представляющего изображения на дисплее. VSYNC синхронизирует время, когда приложения просыпаются, чтобы начать рендеринг, время, когда SurfaceFlinger просыпается, чтобы составить экран, и цикл обновления дисплея. Эта синхронизация устраняет заикание и улучшает визуальную производительность графики.

HWC генерирует события VSYNC и отправляет их в SurfaceFlinger через обратный вызов:

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

Управления SurfaceFlinger генерирует ли не HWC события Vsync, позвонив setVsyncEnabled . SurfaceFlinger позволяет setVsyncEnabled генерировать события Vsync , чтобы он мог синхронизировать с циклом обновления дисплея. Когда SurfaceFlinger синхронизируется с циклом обновления дисплея, SurfaceFlinger отключает setVsyncEnabled остановить HWC от генерации событий Vsync. Если SurfaceFlinger обнаруживает разницу между фактическим VSYNC и VSYNC, он ранее установленный SurfaceFlinger повторно включает генерацию событий VSYNC.

VSYNC смещение

Приложение синхронизации и SurfaceFlinger обрабатывают циклы на аппаратном VSYNC. На событии ВСИНХА, дисплей начинает показывать кадр N в то время как SurfaceFlinger начинает композитинг окна для кадра N + 1. Ручки приложения в ожидании ввода и генерирует кадр N + 2.

Синхронизация с VSYNC обеспечивает постоянную задержку. Это уменьшает количество ошибок в приложениях и SurfaceFlinger, а также сводит к минимуму смещение и рассогласование дисплеев друг с другом. Это предполагает, что время покадрового просмотра приложения и SurfaceFlinger не сильно различается. Задержка не менее двух кадров.

Чтобы исправить это, вы можете использовать смещения VSYNC, чтобы уменьшить задержку ввода-вывода, сделав сигнал приложения и композиции относительно аппаратного VSYNC. Это возможно, потому что приложение плюс композиция обычно занимает менее 33 мс.

Результатом смещения VSYNC являются три сигнала с одинаковым периодом и фазой смещения:

  • HW_VSYNC_0 - дисплей начинает показывать следующий кадр.
  • VSYNC - приложение считывает информацию и генерирует следующий кадр.
  • SF_VSYNC - SurfaceFlinger начинается композитинга для следующего кадра.

Со смещением VSYNC SurfaceFlinger получает буфер и объединяет кадр, в то время как приложение одновременно обрабатывает ввод и визуализирует кадр.

DispSync

DispSync поддерживает модель периодических аппаратных VSYNC-событий дисплея и использует эту модель для выполнения обратных вызовов при определенных фазовых смещениях от аппаратных VSYNC-событий.

DispSync - это программный контур фазовой синхронизации (PLL), который генерирует сигналы VSYNC и SF_VSYNC, используемые Choreographer и SurfaceFlinger, даже если они не смещены от аппаратного VSYNC.

DispSync flow

Рисунок 1. Поток DispSync

DispSync обладает следующими качествами:

  • Ссылка - HW_VSYNC_0.
  • Выход - КАДРЫ и SF_VSYNC.
  • Обратная связь - Пенсия забора сигнал метки времени от Hardware Composer.

VSYNC / Смещение выхода на пенсию

Временная метка сигнала скрытых ограждений должна соответствовать HW VSYNC, даже на устройствах, которые не используют фазу смещения. В противном случае ошибки кажутся более серьезными, чем они есть на самом деле. Интеллектуальные панели часто имеют дельту, где ограничитель вывода из эксплуатации является концом прямого доступа к памяти (DMA) для отображения памяти, но фактический переключатель дисплея и HW VSYNC появятся на некоторое время позже.

PRESENT_TIME_OFFSET_FROM_VSYNC_NS устанавливается в устройстве BoardConfig.mk Makefile. Он основан на характеристиках контроллера дисплея и панели. Время от отметки времени выхода из эксплуатации до сигнала HW VSYNC измеряется в наносекундах.

Смещения VSYNC и SF_VSYNC

VSYNC_EVENT_PHASE_OFFSET_NS и SF_VSYNC_EVENT_PHASE_OFFSET_NS устанавливаются консервативно на основе прецедентов с высокой нагрузкой, например, композициями частичного GPU при переходе окна или Chrome прокрутки через веб - страницу , содержащую анимацию. Эти смещения позволяют увеличить время рендеринга приложения и длительное время композиции графического процессора.

Заметна задержка, превышающая одну-две миллисекунды. Чтобы минимизировать задержку без значительного увеличения количества ошибок, интегрируйте тщательное автоматическое тестирование ошибок.