SurfaceFlinger

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

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

Дополнительные сведения о сборе трассировки см. в разделе SurfaceFlinger (слои) .

SurfaceFlinger trace analysis

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

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

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

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

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

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

Кураторские объекты

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

SurfaceFlinger properties

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

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

Видимость

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

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

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

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

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

    Covered layer on SurfaceFlinger

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

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

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

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

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

Буфер

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

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

Иерархия

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

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

Вход

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

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