SurfaceFlinger

I dump di SurfaceFlinger forniscono uno snapshot di SurfaceFlinger in un momento specifico. Le tracce di SurfaceFlinger presentano una sequenza cronologica di stati che forniscono informazioni preziose su come viene visualizzata una finestra sullo schermo e determinano quale finestra riceve le risposte al tocco in posizioni specifiche. Queste informazioni sono essenziali per risolvere problemi come l'app non risponde al mio tocco o ho riscontrato sfarfallio durante la visione di un video.

Il visualizzatore SurfaceFlinger di Winscope mostra queste informazioni per le tracce raccolte utilizzando la modalità attiva o generate dalla traccia delle transazioni quando viene creato un report bug (per impostazione predefinita, la configurazione Droidfood), nonché per i dump.

Per ulteriori informazioni sulla raccolta delle tracce, consulta la sezione SurfaceFlinger (livelli).

Analisi delle tracce di SurfaceFlinger

Figura 1. Analisi delle tracce di SurfaceFlinger.

Sul lato sinistro dello schermo è presente una visualizzazione 3D dei livelli. La visualizzazione dei rettangoli considera i limiti del livello, l'ordine Z, l'opacità, la Z relativa e gli angoli arrotondati.

Chip gerarchici

Il segmento centrale della scheda mostra la gerarchia dei livelli con chip per ulteriori informazioni, ad esempio le relazioni padre-figlio tra i livelli, come segue:

  • V: identifica i livelli visibili.
  • RelZParent: identifica i livelli con un elemento secondario RelZ.
  • RelZ: identifica i livelli con un RelZParent e disegnati in ordine Z in base alla loro gerarchia.
  • HWC: identifica i livelli composti da Hardware Composer.
  • GPU: identifica i livelli composti dalla GPU.

La parte destra dello schermo mostra un elenco di proprietà selezionate, nonché un proto dump di tutte le proprietà dei livelli disponibili. Per ulteriori informazioni sulle funzionalità della sezione di dump del proto, consulta Proprietà.

Proprietà selezionate

Per semplificare il debug, il visualizzatore SurfaceFlinger fornisce un elenco selezionato di proprietà, presentando le informazioni più utilizzate in un formato più organizzato:

Proprietà di SurfaceFlinger

Figura 2. Proprietà di SurfaceFlinger.

Questo elenco include le seguenti categorie.

Visibilità

Questo blocco contiene informazioni sulla visibilità del livello e una spiegazione del motivo per cui non è visibile. Il servizio include:

Flag:controllano la visibilità, ad esempio HIDDEN e OPAQUE.

Motivo dell'invisibilità:una spiegazione del motivo per cui il livello o la superficie è invisibile sullo schermo, se applicabile, ad esempio perché è nascosto da solo o dal relativo elemento principale oppure perché non ha buffer da disegnare.

Occluso, Parzialmente occluso o Coperto:

  • Occluso:il livello corrente viene calcolato come visibile, ma un altro livello opaco viene disegnato sopra, rendendolo invisibile. Il livello sopra il livello Occluso è opaco, ovvero il relativo flag OPAQUE è impostato oppure il formato pixel non contiene il canale alfa o non è impostato alcun canale alfa sul livello.
  • Parzialmente occluso:il livello corrente è parzialmente visibile perché il livello opaco disegnato sopra non lo copre completamente. Il livello sopra il livello Parzialmente occluso è opaco, ovvero il flag OPAQUE è impostato oppure il formato pixel non contiene alpha o non è impostato alpha sul livello.
  • Coperto:il livello attuale è coperto, interamente o parzialmente, da un livello non opaco e potrebbe essere ancora visibile sullo schermo. Il livello sopra il livello Coperto non è opaco, ovvero il flag OPAQUE non è impostato o il formato pixel contiene alpha o alpha è impostato sul livello. Tuttavia, per le tracce di SurfaceFlinger, un livello Coperto viene visualizzato come visibile, per i livelli sotto SurfaceFlinger:

    Livello coperto su SurfaceFlinger

    Figura 3. Livello coperto su SurfaceFlinger.

Geometria ed effetti

Questa sezione descrive la geometria e gli effetti richiesti e calcolati per il livello corrente.

La sezione Richiesto mostra le proprietà impostate sul livello. Al contrario, la sezione Calcolato mostra le proprietà che vengono applicate al livello. Questa distinzione è dovuta al fatto che la geometria e gli effetti vengono trasmessi nella gerarchia ed ereditati dagli elementi padre.

Nella Figura 2, il livello richiede che il raggio d'angolo sia impostato su 0 px. Tuttavia, uno dei suoi livelli principali imposta il Raggio angolo su 97,419 px, che è il valore applicato:

Buffer

Le seguenti proprietà mostrano informazioni su se il livello ha un buffer, le sue dimensioni e la trasformazione.

  • Numero frame:numero incrementale che inizia quando viene creata un'app.
  • Frame di destinazione:utilizzato per scalare il buffer in base ai limiti definiti dal frame di destinazione.

Gerarchia

Le seguenti proprietà descrivono come viene determinata la gerarchia dei livelli:

  • Ordine z:nella gerarchia dei livelli, l'ordine z determina il posizionamento relativo di un livello rispetto ai suoi elementi fratelli. Un livello con un valore z di 0 è posizionato sopra il livello principale. Se più livelli condividono lo stesso valore z, il livello con l'ID livello più alto viene posizionato in primo piano.
  • relative parent: indica il livello principale relativo nell'ordine Z. Il figlio non eredita alcuna proprietà dal relativo genitore, ad eccezione del flag nascosto.

Input

Le seguenti proprietà contengono informazioni sulla regione toccabile e sul focus:

  • Ritaglia l'area di tocco con l'elemento: utilizza i limiti del livello per ritagliare l'area toccabile.
  • Sostituisci regione tocco con ritaglio:utilizza il ritaglio dei livelli attuali come regione toccabile.