Ошибка Nexus One / Android "CPU может быть привязана" - PullRequest
15 голосов
/ 24 июня 2010

Я пишу графически насыщенную игру для Nexus One, используя NDK (редакция 4) и OpenGL ES 2.0.Мы действительно продвигаем здесь оборудование, и по большей части оно работает хорошо, за исключением того, что время от времени я получаю серьезный сбой с этим сообщением журнала:

W / SharedBufferStack (398):Тайм-аут waitForCondition (LockCondition) (идентификатор = 9, статус = 0).Процессор может быть привязан.повторная попытка.

Вся система блокируется, повторяет это сообщение снова и снова и через несколько минут перезапускается, или мы должны перезагрузить его вручную.Мы используем Android OS 2.1, обновление 1.

Я знаю, что несколько других людей видели эту ошибку, иногда в связи со звуком.В моем случае это вызвано SharedBufferStack, поэтому я предполагаю, что это проблема OpenGL.Кто-нибудь сталкивался с этим, а еще лучше исправил?Или кто-нибудь знает, что происходит с SharedBufferStack, чтобы помочь мне сузить круг?

Ответы [ 5 ]

2 голосов
/ 25 июня 2010

Я не верю, что такая ошибка может возникнуть в аудиокоде, SharedBufferStack используется только в библиотеках Surface.Скорее всего, это ошибка в реализации EGL swapBuffers или SurfaceFlinger, и вы должны отправить ее в средство отслеживания ошибок .

1 голос
/ 22 мая 2011

Я получил CPU may be pegged сообщений в LogCat, потому что в моем коде было ArrayBlockingQueue . Если у вас есть какая-либо очередь блокировки (как, кажется, имеет место с аудио-буферами), убедитесь, что BlockingQueue.put () , только если у вас достаточно контроля времени, чтобы правильно BlockingQueue.take () элементов, чтобы освободить место для этого. Или еще, посмотрите на использование BlockingQueue.offer () .

1 голос
/ 14 апреля 2011

waitForCondition () вызывает блокировку (заморозка системы).
Но это не первопричина. Кажется, это проблема с

Аудио-фреймворк (в игре есть звуки?)
-или-
GL-подсистема рендеринга .

Есть ли в журнале сообщения с привязкой к процессору? Возможно, вы захотите взглянуть на это:
http://soledadpenades.com/2009/08/25/is-the-cpu-pegged-and-friends/

0 голосов
/ 20 июля 2014

FWIW, я недавно столкнулся с этой проблемой при разработке под Android 2.3.4 с использованием GL ES 2 на Samsung Galaxy S.

Для меня проблема заключалась в ошибке в моем вызове glDrawArrays - я выполнял рконец буфера, то есть "количество", которое я передавал, было больше, чем фактическое количество.Интересно, что этот вызов не вызвал исключение, но он периодически приводил к проблеме, которую вы описали.Кроме того, буфер, который я закончил рендерингом, выглядел неправильно, поэтому я знал, что что-то не так.То, что «CPU может быть привязан», только раздражало отследить реальную проблему.

0 голосов
/ 18 декабря 2012

Кажется, есть проблема с драйвером для eglSwapBuffers ():

http://code.google.com/p/android/issues/detail?id=20833&q=cpu%20may%20be%20pegged&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars

Один из способов - вызвать glFinish(), предшествующий вашему звонку на eglSwapBuffers(), однако это вызоветхит производительности.

...