SurfaceFlinger

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

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

Дополнительную информацию о сборе трассировок см. в разделе SurfaceFlinger (слои) .

SurfaceFlinger trace analysis

Рисунок 1. Анализ следов SurfaceFlinger.

В левой части экрана представлен 3D-вид слоев. Прямоугольный вид учитывает границы слоев, z-порядок, непрозрачность, относительный Z и скругленные углы.

Иерархия чипов

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

  • V : Определяет видимые слои.
  • RelZParent : идентифицирует слои с дочерним элементом RelZ .
  • RelZ : идентифицирует слои с RelZParent и отображает их в z-порядке в качестве иерархии.
  • HWC : определяет слои, созданные Hardware Composer.
  • GPU : определяет слои, состоящие из графического процессора.

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

Кураторские свойства

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

SurfaceFlinger properties

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

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

Видимость

Этот блок содержит информацию о видимости слоя и объяснение, почему он не виден. Он включает:

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

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

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

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

    Covered layer on SurfaceFlinger

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

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

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

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

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

Буфер

Следующие свойства отображают информацию о наличии буфера у слоя, его размере и преобразовании.

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

Иерархия

Следующие свойства описывают, как определяется иерархия слоев:

  • z-порядок: В иерархии слоев z-порядок определяет относительное расположение слоя по отношению к его родственным слоям. Слой со значением z 0 располагается над своим родителем. Если несколько слоев имеют одинаковое значение z, слой с более высоким идентификатором слоя помещается сверху.
  • относительный родитель: Указывает относительный родительский слой в z-порядке. Дочерний элемент не наследует никаких свойств от своего относительного родителя, за исключением скрытого флага.

Вход

Следующие свойства содержат информацию о сенсорной области и фокусе:

  • Обрезка области касания с элементом: используйте границы слоя, чтобы обрезать область касания.
  • Заменить область касания обрезкой: использовать обрезку текущего слоя в качестве области касания.