Дампы SurfaceFlinger предоставляют снимок SurfaceFlinger в определенное время. Трассировки SurfaceFlinger содержат хронологическую последовательность состояний, которые предоставляют ценную информацию о том, как окно выглядит на экране, и определяют, какое окно получает сенсорные ответы в определенных местах. Эта информация необходима для устранения неполадок, таких как «приложение не реагирует на мои касания» или «я заметил мерцание во время просмотра видео» .
Средство просмотра SurfaceFlinger от Winscope отображает эту информацию для трассировок, собранных с использованием активного режима или сгенерированных из трассировки транзакций при создании отчета об ошибке (по умолчанию конфигурация Droidfood), а также для дампов.
Дополнительную информацию о сборе трассировок см. в разделе SurfaceFlinger (слои) .
Рисунок 1. Анализ следов SurfaceFlinger.
В левой части экрана представлен 3D-вид слоев. Прямоугольный вид учитывает границы слоев, z-порядок, непрозрачность, относительный Z и скругленные углы.
Иерархия чипов
В центральном сегменте вкладки отображается иерархия слоев с микросхемами для получения дополнительной информации, например, родительско-дочерних отношений между слоями, как показано ниже:
- V : Определяет видимые слои.
- RelZParent : идентифицирует слои с дочерним элементом RelZ .
- RelZ : идентифицирует слои с RelZParent и отображает их в z-порядке в качестве иерархии.
- HWC : определяет слои, созданные Hardware Composer.
- GPU : определяет слои, состоящие из графического процессора.
В правой части экрана представлен список курируемых свойств , а также прото-дамп всех доступных свойств слоя. Для получения дополнительной информации о функциях раздела прото-дамп см. Свойства .
Кураторские свойства
Для упрощения отладки средство просмотра SurfaceFlinger предоставляет тщательно подобранный список свойств, представляющий наиболее часто используемую информацию в более организованном формате:
Рисунок 2. Свойства SurfaceFlinger.
В этот список входят следующие категории.
Видимость
Этот блок содержит информацию о видимости слоя и объяснение, почему он не виден. Он включает:
Флаги: управляют видимостью, например, HIDDEN
и OPAQUE
.
Причина невидимости: Объяснение того, почему слой или поверхность невидимы на экране, если применимо, например, скрыты самими собой или своим родительским элементом или не имеют буфера для отрисовки.
Закрыт , частично закрыт или покрыт:
- Закрытый: Текущий слой рассчитывается как видимый, но поверх него рисуется другой непрозрачный слой, что делает текущий слой невидимым. Слой над слоем Закрытый является непрозрачным, то есть либо установлен его флаг
OPAQUE
, либо формат пикселей не содержит альфа или альфа не установлена для слоя. - Частично закрыто: Текущий слой частично виден, так как непрозрачный слой, нарисованный поверх него, не полностью его покрывает. Слой над слоем Partially Occluded непрозрачен, то есть установлен флаг
OPAQUE
, или формат пикселей не содержит альфа или альфа не установлена на слое. Covered: Текущий слой полностью или частично покрыт непрозрачным слоем и может быть виден на экране. Слой над Covered не является непрозрачным, то есть флаг
OPAQUE
не установлен или формат пикселей содержит альфа или альфа установлена на слое. Однако для трассировок SurfaceFlinger Covered отображается как видимый, для слоев под SurfaceFlinger:Рисунок 3. Покрытый слой на SurfaceFlinger.
Геометрия и эффекты
В этом разделе описывается запрошенная и вычисленная геометрия и эффекты для текущего слоя.
Раздел Requested показывает свойства, которые задаются на слое. В отличие от этого, раздел Calculated показывает свойства, которые применяются к слою. Это различие обусловлено тем, что геометрия и эффекты передаются вниз по иерархии и наследуются от родительских элементов.
На рисунке 2 слой запрашивает установку Радиуса угла в 0 пикселей. Однако один из его родительских слоев устанавливает Радиус угла в 97,419 пикселей, что является примененным значением:
Буфер
Следующие свойства отображают информацию о наличии буфера у слоя, его размере и преобразовании.
- Номер кадра: порядковый номер, начиная с момента создания приложения.
- Кадр назначения: используется для масштабирования буфера до границ, определенных кадром назначения.
Иерархия
Следующие свойства описывают, как определяется иерархия слоев:
- z-порядок: В иерархии слоев z-порядок определяет относительное расположение слоя по отношению к его родственным слоям. Слой со значением z 0 располагается над своим родителем. Если несколько слоев имеют одинаковое значение z, слой с более высоким идентификатором слоя помещается сверху.
- относительный родитель: Указывает относительный родительский слой в z-порядке. Дочерний элемент не наследует никаких свойств от своего относительного родителя, за исключением скрытого флага.
Вход
Следующие свойства содержат информацию о сенсорной области и фокусе:
- Обрезка области касания с элементом: используйте границы слоя, чтобы обрезать область касания.
- Заменить область касания обрезкой: использовать обрезку текущего слоя в качестве области касания.