W stosie graficznym między interfejsem HAL kompozytora a usługą SurfaceFlinger znajduje się pamięć podręczna buforów poszczególnych warstw, która zmniejsza narzut związany z wysyłaniem deskryptorów plików za pomocą komunikacji międzyprocesowej. Przed Androidem 14 system nie czyścił tej pamięci podręcznej bufora, gdy GraphicBufferProducer odłączał się od GraphicBufferConsumer SurfaceFlingera, na przykład gdy MediaCodec odłączał się od SurfaceView. Od Androida 14 możesz wymusić wyczyszczenie tej pamięci podręcznej bufora, aby zmniejszyć zużycie pamięci graficznej.
Wybierz jedną z tych opcji:
- W przypadku urządzeń z Androidem 14 lub nowszym musisz wdrożyć nowy interfejs API HAL Composera w wersji 3.2. Ta opcja jest domyślnie włączona i pozwala zaoszczędzić najwięcej pamięci. Urządzenia, które przejdą na Androida 14 lub nowszego, również mogą skorzystać z tej opcji, aby w pełni wykorzystać zalety pamięci.
- W przypadku urządzeń, które są aktualizowane do Androida 14 i w których nie chcesz implementować interfejsu Composer HAL 3.2 API, możesz włączyć opcję zgodności wstecznej. Ta opcja oszczędza prawie tyle pamięci co poprzednia.
W dwóch sekcjach poniżej znajdziesz opis wdrażania każdej z tych opcji.
Wdrażanie interfejsu Composer HAL 3.2 API
Aby w pełni korzystać z pamięci bufora graficznego, musisz:
- Zaktualizuj implementację HAL kompozytora do wersji 3.2.
- Przetwórz
LayerCommand::bufferSlotsToClear, usuwając wpisy z pamięci podręcznej buforów wskazane przez numery gniazd znajdujące się na liście.
Interfejsy API HAL usługi Composer 3.2 związane z pamięcią bufora graficznego, w tym LayerCommand::bufferSlotsToClear, znajdują się w LayerCommand.aidl.
Włącz opcję zgodną wstecznie
Opcja zmniejszenia pamięci zapewniająca zgodność wsteczną zastępuje rzeczywisty bufor w gnieździe pamięci podręcznej buforem zastępczym o rozmiarze 1 x 1. Pozwala to zaoszczędzić pamięć w przypadku wszystkich usuniętych przedziałów, z wyjątkiem bieżącego aktywnego przedziału bufora. Aby uzyskać częściowe korzyści związane z oszczędzaniem pamięci, włącz opcję zgodną wstecznie, ustawiając surface_flinger.clear_slots_with_set_layer_buffer sysprop na true. Ten sysprop znajduje się w property_contextspliku.
Ustawienie tej właściwości systemowej wymaga, aby implementacja HAL kompozytora prawidłowo obsługiwała wiele poleceń setLayerBuffer dla tej samej warstwy w jednym cyklu prezentacji.
Włączenie opcji zgodnej wstecznie ma te skutki:
W przypadku interfejsów HAL AIDL: SurfaceFlinger wysyła wiele instancji
LayerCommanddla pojedynczej warstwy, z których każda zawiera pojedynczy buforBufferCommand. Każdy elementBufferCommandzawiera uchwyt bufora zastępczego o rozmiarze 1x1 i numer miejsca na bufor pamięci podręcznej, który wymaga wyczyszczenia.W przypadku interfejsów HAL HIDL: SurfaceFlinger wysyła wiele poleceń
SELECT_DISPLAY,SELECT_LAYERiSET_BUFFER. Te polecenia zawierają uchwyt bufora zastępczego o rozmiarach 1x1 i numer miejsca na bufor pamięci podręcznej, który wymaga wyczyszczenia.
Opcja zgodna wstecznie może powodować awarię warstwy HAL kompozytora na niektórych urządzeniach. Aby rozwiązać ten problem, możesz zmodyfikować warstwę HAL kompozytora. Kod kontrolujący to działanie znajdziesz tutaj:
Testowanie zużycia pamięci podręcznej bufora graficznego
Testy nie mogą sprawdzić, czy implementacje HAL czyszczą gniazda pamięci podręcznej. Możesz jednak użyć narzędzi do debugowania, aby monitorować wykorzystanie bufora graficznego. Podczas monitorowania możesz zauważyć mniej błędów związanych z brakiem pamięci w sytuacjach, w których wiele różnych filmów jest szybko zatrzymywanych i uruchamianych w YouTube.
Dostępne są testy VTS, które sprawdzają, czy implementacja HAL jest funkcjonalnie zdolna do odbierania nowych wywołań interfejsu API (HAL w wersji 3.2 lub nowszej) lub wielu poleceń setLayerBuffer w przypadku implementacji zgodnej wstecz. Nie należy jednak uznawać tego za wystarczające testy prawidłowego działania, ponieważ niektóre urządzenia przechodzą te testy VTS, ale zawodzą w rzeczywistych scenariuszach użycia.
W przypadku nowych testów VTS zapoznaj się z tymi artykułami: