SurfaceFlinger

Os despejos do SurfaceFlinger fornecem um snapshot do SurfaceFlinger em um momento específico. Os rastreamentos do SurfaceFlinger apresentam uma sequência cronológica de estados que fornecem insights valiosos sobre como uma janela aparece na tela e determina qual janela recebe respostas de toque em locais específicos. Essas informações são essenciais para solucionar problemas como o app não está respondendo ao meu toque ou a tela ficou piscando enquanto eu assistia um vídeo.

O visualizador SurfaceFlinger do Winscope mostra essas informações para rastreamentos coletados usando o modo ativo ou gerados pelo rastreamento de transações ao criar um relatório de bug (por padrão, a configuração Droidfood), bem como para dumps.

Consulte SurfaceFlinger (camadas) para mais informações sobre a coleta de rastreamentos.

Análise de rastreamento do SurfaceFlinger

Figura 1. Análise de rastreamento do SurfaceFlinger.

O lado esquerdo da tela mostra uma visualização 3D das camadas. A visualização de rects considera limites de camada, ordem Z, opacidade, Z relativo e cantos arredondados.

Ícones de hierarquia

O segmento central da guia mostra a hierarquia de camadas com ícones para mais informações, como as relações pai-filho entre camadas, da seguinte forma:

  • V: identifica camadas visíveis.
  • RelZParent: identifica camadas com um filho RelZ.
  • RelZ: identifica camadas com um RelZParent e desenhadas em ordem Z como a hierarquia delas.
  • HWC: identifica camadas compostas pelo Hardware Composer.
  • GPU: identifica camadas compostas pela GPU.

O lado direito da tela mostra uma lista de propriedades selecionadas, além de um despejo de proto de todas as propriedades de camada disponíveis. Para mais informações sobre os recursos da seção de despejo de proto, consulte Propriedades.

Propriedades selecionadas

Para facilitar a depuração, o visualizador do SurfaceFlinger oferece uma lista selecionada de propriedades, apresentando as informações mais usadas em um formato mais organizado:

Propriedades do SurfaceFlinger

Figura 2. Propriedades do SurfaceFlinger.

Essa lista inclui as seguintes categorias:

Visibilidade

Esse bloco contém informações sobre a visibilidade da camada e uma explicação de por que ela não está visível. Além disso, o YouTube Music inclui:

Flags:controlam a visibilidade, por exemplo, HIDDEN e OPAQUE.

Motivo da invisibilidade:uma explicação de por que a camada ou superfície está invisível na tela, se aplicável. Por exemplo, oculta por si mesma ou pelo elemento pai, ou sem buffer para renderizar.

Oculto, Parcialmente oculto ou Coberto:

  • Ocluída:a camada atual é calculada como visível, mas outra camada opaca é desenhada sobre ela, tornando a camada atual invisível. A camada acima da Occluded é opaca. Ou seja, a flag OPAQUE está definida, ou o formato de pixel não contém alfa, ou nenhum alfa está definido na camada.
  • Parcialmente ocluída:a camada atual está parcialmente visível porque a camada opaca desenhada sobre ela não a cobre totalmente. A camada acima da Parcialmente ocluída é opaca, ou seja, a flag OPAQUE está definida, ou o formato de pixel não contém alfa ou nenhum alfa está definido na camada.
  • Coberta:a camada atual está coberta, total ou parcialmente, por uma camada não opaca e ainda pode estar visível na tela. A camada acima da Coberta não é opaca. Ou seja, a flag OPAQUE não está definida ou o formato de pixel contém alfa ou alfa está definido na camada. No entanto, para rastreamentos do SurfaceFlinger, uma camada Covered é mostrada como visível para camadas abaixo do SurfaceFlinger:

    Camada coberta no SurfaceFlinger

    Figura 3. Camada coberta no SurfaceFlinger.

Geometria e efeitos

Esta seção descreve a geometria e os efeitos solicitados e calculados para a camada atual.

A seção Solicitado mostra as propriedades definidas na camada. Em contraste, a seção Calculado mostra as propriedades que estão sendo aplicadas à camada. Essa distinção ocorre porque a geometria e os efeitos são transmitidos pela hierarquia e herdados dos elementos principais.

Na Figura 2, a camada solicita que o Raio do canto seja definido como 0 px. No entanto, uma das camadas principais define o Raio do canto como 97,419 px, que é o valor aplicado:

Buffer

As propriedades a seguir mostram informações sobre se a camada tem um buffer, o tamanho e a transformação dela.

  • Número do frame:número incremental que começa quando um app é criado.
  • Frame de destino:usado para dimensionar o buffer de acordo com os limites definidos pelo frame de destino.

Hierarquia

As propriedades a seguir descrevem como a hierarquia de camadas é determinada:

  • Ordem Z:na hierarquia de camadas, a ordem Z determina o posicionamento relativo de uma camada em relação às outras. Uma camada com um valor Z de 0 é posicionada acima do elemento pai. Se várias camadas compartilharem o mesmo valor de z, a camada com o ID mais alto será colocada na parte de cima.
  • Parente relativo:indica a camada parente relativa na ordem Z. A criança não herda nenhuma propriedade do parente responsável, exceto a flag "hidden".

Entrada

As propriedades a seguir contêm informações sobre a região sensível ao toque e o foco:

  • Cortar região de toque com item:use limites de camada para cortar a região de toque.
  • Substituir região de toque por corte:usa o corte das camadas atuais como região de toque.