SurfaceFlinger

Дампы SurfaceFlinger содержат снимок SurfaceFlinger на определенный момент времени. Трассировки SurfaceFlinger содержат хронологическую последовательность состояний, которая позволяет понять, как окно появляется на экране и какое окно реагирует на касания в определенных местах. Эта информация поможет вам устранить неполадки, например, если приложение не реагирует на прикосновения или при просмотре видео экран мерцает.

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

Подробнее о сборе трассировок…

Анализ трассировки SurfaceFlinger

Рисунок 1. Анализ трассировки SurfaceFlinger.

В левой части экрана представлено трехмерное изображение слоев. В представлении прямоугольников учитываются границы слоя, порядок наложения по оси Z, непрозрачность, относительное положение по оси Z и закругленные углы.

Чипы иерархии

В центральной части вкладки показана иерархия слоев с чипами, на которых приведена дополнительная информация, например родительско-дочерние связи между слоями:

  • V – видимые слои.
  • RelZParent – определяет слои с дочерним элементом RelZ.
  • RelZ – определяет слои с RelZParent, которые отрисовываются в порядке по оси Z в соответствии с их иерархией.
  • HWC – слои, созданные Hardware Composer.
  • Графический процессор. Показывает слои, созданные графическим процессором.

В правой части экрана находится список свойств, а также дамп протокола всех доступных свойств слоя. Подробнее о свойствах раздела proto dump…

Рекомендуемые объекты

Чтобы упростить отладку, в SurfaceFlinger Viewer есть список свойств, в котором наиболее часто используемая информация представлена в более удобном формате:

Свойства SurfaceFlinger

Рисунок 2. Свойства SurfaceFlinger.

В этот список входят следующие категории:

Доступ

В этом блоке содержится информация о видимости слоя и объяснение того, почему он не виден. В рамках сервиса мы предлагаем:

  • Флаги. Они управляют видимостью, например HIDDEN и OPAQUE.

  • Причина невидимости. Объяснение того, почему слой или поверхность не видны на экране, например скрыты сами по себе или родительским элементом или не имеют буфера для отрисовки.

  • Закрыто, Частично закрыто или Закрыто:

    • Перекрыто. Текущий слой считается видимым, но поверх него нарисован другой непрозрачный слой, из-за чего текущий слой не виден. Слой над Occluded непрозрачный, то есть либо установлен флаг OPAQUE, либо формат пикселей не содержит альфа-канал, либо альфа-канал не задан для слоя.
    • Частично перекрыт. Текущий слой частично виден, поскольку непрозрачный слой, нарисованный поверх него, не полностью его закрывает. Слой над Частично закрытым непрозрачный, то есть установлен флаг OPAQUE, или формат пикселей не содержит альфа-канал, или альфа-канал не задан на слое.
    • Закрыто. Текущий слой полностью или частично закрыт непрозрачным слоем и может быть виден на экране. Слой над слоем Covered не является непрозрачным, то есть флаг OPAQUE не задан или формат пикселей содержит альфа-канал или альфа-канал задан на слое. Однако для трассировок SurfaceFlinger слой Covered отображается как видимый для слоев ниже SurfaceFlinger:

      Слой, закрытый другим слоем в SurfaceFlinger

      Рисунок 3. Слой, закрытый SurfaceFlinger.

Геометрия и эффекты

В этом разделе описаны запрошенная и вычисленная геометрия, а также эффекты для текущего слоя.

В разделе Requested (Запрошено) показаны свойства, заданные для слоя. В разделе Вычислено показаны свойства, которые применяются к слою. Это связано с тем, что геометрия и эффекты передаются по иерархии и наследуются от родительских элементов.

На рисунке 2 слой запрашивает, чтобы радиус скругления углов был установлен на 0 пкс. Однако на одном из родительских слоев для параметра Радиус скругления задано значение 97, 419 пкс, которое и применяется.

Буфер

Ниже перечислены свойства, в которых указано, есть ли у слоя буфер, его размер и преобразование:

  • Номер фрейма. Порядковый номер, который присваивается фрейму при создании приложения.
  • Целевой кадр. Используется для масштабирования буфера до границ, заданных целевым кадром.

Иерархия

Иерархия слоев определяется следующими свойствами:

  • Порядок наложения. В иерархии слоев порядок наложения определяет относительное позиционирование слоя по отношению к элементам того же уровня. Слой со значением z, равным 0, располагается над родительским слоем. Если у нескольких слоев одинаковое значение Z-индекса, слой с более высоким идентификатором будет расположен выше.
  • relative parent – относительный родительский слой в порядке наложения. Дочерний объект не наследует от родительского объекта никаких свойств, кроме флага "Скрытый".

Ввод

Ниже перечислены свойства, содержащие информацию о сенсорной области и фокусе:

  • Обрезать область касания по границам объекта. Область касания будет обрезана по границам слоя.
  • Заменить область касания на кадрирование. Использовать текущее кадрирование слоев в качестве области касания.