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