Dane SurfaceFlinger w formie zrzutów ekranu stanowią migawkę stanu usługi w określonym momencie. Ścieżki SurfaceFlinger zawierają chronologiczną sekwencję stanów, które dostarczają cennych informacji o tym, jak okno pojawia się na ekranie, oraz określają, które okno reaguje na dotyk w określonych miejscach. Te informacje są niezbędne do rozwiązania problemów takich jak aplikacja nie reaguje na dotyk czy miganie podczas oglądania filmu.
Wyświetlacz SurfaceFlinger w Winscope wyświetla te informacje w przypadku śladów zebranych w trybie aktywnym lub wygenerowanych na podstawie śledzenia transakcji podczas tworzenia raportu o błędzie (domyślnie konfiguracja Droidfood), a także w przypadku zrzutów.
Więcej informacji o zbieraniu śladów znajdziesz w artykule SurfaceFlinger (warstwy).
Rysunek 1. Analiza śladu SurfaceFlinger.
Po lewej stronie ekranu widok warstw w 3D. Widok prostokątów uwzględnia granice warstwy, kolejność nakładania, przezroczystość, względną wartość Z i zaokrąglone rogi.
Elementy hierarchii
Główna część karty zawiera hierarchię warstw z elementami, które zawierają więcej informacji, np. relacje nadrzędny–podrzędny między warstwami:
- V: identyfikuje widoczne warstwy.
- RelZParent: identyfikuje warstwy z elementem podrzędnym RelZ.
- RelZ: identyfikuje warstwy z RelZParent i rysowane w kolejności z- zgodnie z ich hierarchią.
- HWC: identyfikuje warstwy utworzone przez narzędzie do tworzenia komponentów sprzętowych.
- GPU: identyfikuje warstwy utworzone przez procesor graficzny.
Po prawej stronie ekranu znajduje się lista wybranych właściwości oraz protodump wszystkich dostępnych właściwości warstwy. Więcej informacji o funkcjach sekcji proto dump znajdziesz w sekcji Właściwości.
Wybrane usługi
Aby ułatwić debugowanie, przeglądarka SurfaceFlinger udostępnia uporządkowaną listę właściwości, prezentując najczęściej używane informacje w bardziej uporządkowanym formacie:
Rysunek 2. Właściwości SurfaceFlinger.
Ta lista zawiera te kategorie:
Widoczność
Blok ten zawiera informacje o widoczności warstwy oraz wyjaśnienie, dlaczego nie jest ona widoczna. Usługa ta obejmuje:
Flagi: określają widoczność, np. HIDDEN
i OPAQUE
.
Przyczyna braku widoczności: wyjaśnienie, dlaczego warstwa lub powierzchnia jest niewidoczna na ekranie (jeśli to możliwe), np. jest ukryta przez siebie lub przez rodzica albo nie ma bufora do wyświetlenia.
Zasłonięty, częściowo zasłonięty lub zakryty:
- Zasłonięty: bieżąca warstwa jest obliczana jako widoczna, ale inna nieprzejrzysta warstwa jest narysowana na jej wierzchu, co powoduje, że bieżąca warstwa staje się niewidoczna. Warstwa powyżej warstwy Zasłonięta jest nieprzejrzysta, co oznacza, że albo ustawiona jest jej flaga
OPAQUE
, albo format pikseli nie zawiera alfa kanału lub nie jest ustawiony w warstwie. - Częściowo zasłonięty: bieżąca warstwa jest częściowo widoczna, ponieważ warstwa nieprzejrzysta narysowana na jej wierzchu nie zakrywa jej całkowicie. Warstwa nad warstwą Częściowo zasłonięta jest nieprzejrzysta, co oznacza, że ustawiony jest parametr
OPAQUE
, format pikseli nie zawiera alfa kanału lub na warstwie nie ustawiono alfa kanału. Pokryta: bieżąca warstwa jest w całości lub częściowo pokryta przez nieprzezroczystą warstwę i może być nadal widoczna na ekranie. Warstwa nad warstwą Pokryte nie jest nieprzejrzysta, co oznacza, że flaga
OPAQUE
nie jest ustawiona lub format pikseli zawiera alfa lub alfa jest ustawiona na warstwie. Jednak w przypadku dzienników SurfaceFlinger warstwa Zakryta jest widoczna w przypadku warstw poniżej SurfaceFlingera:Rysunek 3. Zasłonięta warstwa w SurfaceFlinger.
Geometria i efekty
W tej sekcji opisano geometrię i efekty zażądane i obliczone dla bieżącej warstwy.
Sekcja Wymagane zawiera właściwości ustawione na warstwie. Natomiast sekcja Obliczone zawiera właściwości stosowane do warstwy. Ta różnica wynika z tego, że geometria i efekty są przekazywane w hierarchii i dziedziczone z elementów nadrzędnych.
Na rysunku 2 warstwa wymaga ustawienia promienia narożnika na 0 pikseli. Jednak jeden z nadrzędnych warstw ma ustawioną wartość promienia narożnika równą 97, 419 piksela, która jest stosowaną wartością:
Bufor
Te właściwości wyświetlają informacje o tym, czy warstwa ma bufor, jego rozmiar i transformację.
- Numer kadru: liczba rosnąca od momentu utworzenia aplikacji.
- Ramka docelowa: służy do skalowania bufora do granic określonych przez ramkę docelową.
Hierarchia
Te właściwości opisują sposób określania hierarchii warstw:
- z-order: w hierarchii warstw kolejność z-określa względne położenie warstwy w stosunku do jej sióstr. Warstwa o wartości z-równej 0 jest umieszczona nad elementem nadrzędnym. Jeśli kilka warstw ma tę samą wartość z-, warstwa o wyższym identyfikatorze warstwy jest umieszczana na górze.
- relatywna warstwa nadrzędna: wskazuje względną warstwę nadrzędną w układzie współrzędnych z. Usługa podrzędna nie dziedziczy żadnych właściwości od swojego elementu nadrzędnego, z wyjątkiem flagi ukrytej.
Urządzenie wejściowe
Te właściwości zawierają informacje o obszarze dotykowym i obszarze fokusu:
- Przycinanie obszaru dotykowego za pomocą elementu: użyj ograniczeń warstwy, aby przyciąć obszar dotykowy.
- Zastąpienie obszaru dotykowego przycinaniem: jako obszar dotykowy użyj przycięcia bieżących warstw.