Os despejos do SurfaceFlinger fornecem um snapshot do SurfaceFlinger em um momento específico. Os rastros do SurfaceFlinger têm 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 rastros coletados usando o modo ativo ou gerados pelo rastro de transações ao fazer um relatório de bug (por padrão, a configuração do Droidfood), bem como para despejos.
Consulte SurfaceFlinger (camadas) para mais informações sobre a coleta de rastros.
Figura 1. Análise de rastros do SurfaceFlinger.
O lado esquerdo da tela mostra uma visualização 3D das camadas. A visualização de retângulos considera os limites da camada, a ordem Z, a opacidade, o Z relativo e os 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 mãe-filha entre as camadas, conforme mostrado abaixo:
- V: identifica as camadas visíveis.
- RelZParent: identifica camadas com uma RelZ filha.
- RelZ: identifica camadas com um RelZParent e desenhadas em ordem z como hierarquia.
- 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 dump de protos 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 fornece uma lista selecionada de propriedades, apresentando as informações mais usadas em um formato mais organizado:
Figura 2. Propriedades do SurfaceFlinger.
Esta 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:elas controlam a visibilidade, por exemplo, HIDDEN
e OPAQUE
.
Motivo da invisibilidade:uma explicação de por que a camada ou a superfície está invisível na tela, se aplicável, por exemplo, oculta por si mesma ou pelo elemento pai ou não tem buffer para renderizar.
Oclusão, oclusão parcial ou cobertura:
- Oclusão:a camada atual é calculada como visível, mas outra
camada opaca é desenhada sobre ela, tornando a camada atual invisível. A
camada acima da camada Occluded é opaca, ou seja, a flag
OPAQUE
está definida, ou o formato de pixel não contém alfa ou não há alfa definido na camada. - Parcialmente oculta:a camada atual está parcialmente visível, porque a camada
opaca desenhada sobre ela não a cobre por completo. A camada acima da
Parcialmente Ocludida é 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 é 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 rastros do SurfaceFlinger, uma camada coberta é mostrada como visível para camadas abaixo do 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 que estão sendo definidas na camada. Em contraste, a seção Calculated 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 pai.
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 dela e a transformação.
- Número do frame:número incremental iniciado quando um app é criado.
- Quadro de destino:usado para dimensionar o buffer aos limites definidos pelo quadro de destino.
Hierarquia
As propriedades a seguir descrevem como a hierarquia das camadas é determinada:
- Ordem z:na hierarquia de camadas, a ordem z determina o posicionamento relativo de uma camada em relação às camadas irmãs. Uma camada com um valor z de 0 é posicionada acima do elemento pai. Se várias camadas compartilharem o mesmo valor z, a camada com o ID mais alto será colocada na parte de cima.
- relative parent:indica a camada mãe relativa na ordem z. A criança não herda nenhuma propriedade do pai relativo, exceto a flag oculta.
Entrada
As propriedades a seguir contêm informações sobre a região tátil e o foco:
- Recortar a região de toque com o item:use os limites de camada para cortar a região toqueável.
- Substituir a região de toque por corte:use o corte de camadas atual como a região toqueável.