SurfaceFlinger

I dump di SurfaceFlinger forniscono un'istantanea di SurfaceFlinger in un momento specifico. Le tracce di SurfaceFlinger includono una sequenza cronologica di stati che forniscono informazioni preziose su come una finestra viene visualizzata 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 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 generato un report di bug (per impostazione predefinita, la configurazione Droidfood), nonché per i dump.

Per ulteriori informazioni sulla raccolta delle tracce, consulta 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à, l'ordine Z relativo e gli angoli arrotondati.

Chip gerarchia

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 gli strati con un elemento figlio RelZ.
  • RelZ: identifica i livelli con un RelZParent e disegnati in ordine z come la loro gerarchia.
  • HWC: identifica i livelli composti dal compositore hardware.
  • GPU: identifica i livelli composti dalla GPU.

Sul lato destro dello schermo è presente un elenco di proprietà selezionate, nonché un dump di proto di tutte le proprietà dei livelli disponibili. Per ulteriori informazioni sulle funzionalità della sezione del dump di proto, consulta Proprietà.

Proprietà selezionate

Per semplificare il debug, lo strumento di visualizzazione SurfaceFlinger fornisce un elenco selezionato di proprietà, che presenta 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: questi 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 nascosto da solo o dal suo elemento principale oppure non ha un buffer da disegnare.

Oscurato, Parzialmente oscurato o Coperto:

  • Ocluso:il livello corrente viene calcolato come visibile, ma sopra viene disegnato un altro livello opaco che lo rende invisibile. Il livello sopra il livello Occluded è opaco, ovvero il relativo flag OPAQUE è impostato oppure il formato del pixel non contiene alpha o non è impostato alcun valore alpha sul livello.
  • Parzialmente occluso:il livello corrente è parzialmente visibile perché il livello opaco sopra di esso non lo copre completamente. Il livello sopra il livello Parzialmente occluso è opaco, ovvero il flag OPAQUE è impostato oppure il formato del pixel non contiene alpha o non è impostato alcun valore alpha sul livello.
  • Coprito:il livello corrente è coperto, interamente o parzialmente, da un livello non opaco e potrebbe essere ancora visibile sullo schermo. Il livello sopra il livello Ricoperto non è opaco, ovvero il flag OPAQUE non è impostato o il formato dei pixel contiene alpha o alpha è impostato sul livello. Tuttavia, per le tracce di SurfaceFlinger, un livello Coperto viene visualizzato come visibile per i livelli al di sotto di 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 Richiesta mostra le proprietà impostate sul livello. Al contrario, la sezione Calcolata mostra le proprietà applicate al livello. Questa distinzione è dovuta al fatto che la geometria e gli effetti vengono trasmessi nella gerarchia e ereditati dagli elementi principali.

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

Buffer

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

  • Numero fotogramma: 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 fratelli. Un livello con un valore z pari a 0 è posizionato sopra il livello principale. Se più livelli condividono lo stesso valore z, il livello con l'ID più alto viene posizionato in alto.
  • relative parent: indica il livello principale relativo nell'ordine Z. La proprietà secondaria non eredita alcuna proprietà dalla relativa proprietà principale, ad eccezione del flag nascosto.

Input

Le seguenti proprietà contengono informazioni sulla regione tocabile e sullo stato attivo:

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