2012-04-17 9 views
38

Jakiś czas temu natknąłem się na problem z eglSwapBuffers zamrażania telefon z następującym komunikatem wyświetlane w dzienniku urządzenia:Android zamrożenie w OpenGL | ES (.. CPU może być powiązany próbuje ponownie)

W/SharedBufferStack(1110): waitForCondition(LockCondition) timed out (identity=28, status=0). CPU may be pegged. trying again. 

Widziałem dyskusję na ten temat w Internecie, ale jedynym rozwiązaniem, które znalazłem, było wywołanie glFinish po eglSwapBuffers. To rozwiązanie powoduje jednak spadek liczby klatek na sekundę o 10-20, co jest dalekie od akceptowalnego.

Zagadnienia zostały otwarte i można znaleźć here

Ktoś powiedział, że z wykorzystaniem tekstur kwadratowych wyeliminować ten problem. Przez kwadrat początkowo myślałem, że chodzi mu o teksturę "mocy dwóch", ale po upewnieniu się, że nie używam żadnych tekstur o braku mocy i nie pozbyłem się problemu, zacząłem myśleć, że mógł on faktycznie oznaczać tekstury z dopasowaniem Szerokość i wysokość?

Testuję na HTC Desire z systemem Android 2.3.3. Ktoś skomentował, że przyszłe wersje powinny rozwiązać ten problem, ale 2.3.3 jest zainstalowany na tylu urządzeniach, że nie możemy go zignorować.

W każdym razie, ktoś ma jakieś przemyślenia na ten temat? Jesteśmy bardzo blisko wysyłki tytułu, a ten problem zagraża harmonogramowi.

+2

Prawdopodobnie jest to błąd ze sterownika. – robermorales

+1

Ta osoba ma problem z innym gl swapbufersami, i jest proponowane łagodzenie w komentarzach: http://stackoverflow.com/questions/12939705/sdl-gl-swapbuffers-is-intermently-slow - może to pomóc. .. – Yakk

+1

spróbuj dumpsys SurfaceFlinger i zobacz, co raport eglSwapbuffers() ... porównuje do twoich pomiarów. – Shark

Odpowiedz

1

Natrafiłem też na ten problem. Kiedyś ponownie instalowałem Aplikację i działało to dla mnie. Jeśli nie, po prostu zrestartuj swoje urządzenie. Ten problem dotyczy wewnętrznego problemu z OpenGLES. Możesz polecić ten link: Android "cpu may be pegged" bug