SurfaceFlinger

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

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

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

SurfaceFlinger trace analysis

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

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

Иерархические чипы

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

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

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

Курируемые объекты недвижимости

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

SurfaceFlinger properties

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

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

Видимость

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

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

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

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

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

    Covered layer on SurfaceFlinger

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

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

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

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

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

Буфер

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

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

Иерархия

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

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

Вход

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

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