2010-06-24 69 views
15

我正在使用NDK(版本4)和OpenGL ES 2.0爲Nexus One編寫一個圖形激烈的遊戲。我們真正推動硬件在這裏,並在大多數情況下它暫時奏效,但每一次,我收到了嚴重的崩潰與此日誌消息:Nexus One/Android「CPU可能被固定」bug

W/SharedBufferStack(398):waitForCondition(LockCondition )超時 (身份= 9​​,狀態= 0)。 CPU可能與掛鉤。再試一次。

整個系統都會鎖定,一遍又一遍地重複此消息,並會在幾分鐘後重新啓動,或者我們必須手動重新啓動它。我們正在使用Android操作系統2.1,更新1.

我知道其他一些人已經看到了這個bug,有時與音頻有關。在我的情況下,它是由SharedBufferStack造成的,所以我猜這是一個OpenGL問題。有沒有人遇到過這個問題,而且更好的解決了它?或者是否有人知道SharedBufferStack發生了什麼事情來幫助我縮小範圍?

+0

在logcat輸出中,您是否看到「FAILED BINDER TRANSACTION」? – fadden 2010-06-24 19:20:13

+0

兩個月前我遇到了同樣的問題,我發現了一個解決方法(不是真正的解決方法),但忘記了它發生的地方。我正在環顧網絡,所以應該至少有一個解決方案/解決方法可用。 – Shade 2010-06-26 09:25:51

+0

@Shade:你還記得解決方法嗎? – ognian 2010-06-26 16:12:12

回答

2

我不相信音頻代碼中會出現這樣的錯誤,SharedBufferStack僅用於Surface庫。很可能這是EGL swapBuffers或SurfaceFlinger實現中的一個錯誤,您應該將其提交到bug tracker

+0

看看TheCodeArtist發佈的鏈接,你會發現這個錯誤確實可能發生在音頻代碼中。 – 2012-11-28 22:21:11

1

waitForCondition()導致鎖定(系統凍結)。
但它不是根本原因。這似乎是一個問題與

音頻框架(UR遊戲有聲音?)
- 或 -
GL渲染子系統

日誌中的任何「CPU掛鉤」消息? 你可能想看看這個:
http://soledadpenades.com/2009/08/25/is-the-cpu-pegged-and-friends/

+0

該鏈接講述AudioTrack。但是,我的問題源於MediaPlayer。 – 2012-11-28 22:20:18

0

FWIW,我最近打這個問題上,而對我來說是三星Galaxy S.

問題使用GL ES 2.0在Android 2.3.4開發是我調用glDrawArrays的錯誤叫 - 我被渲染過去的結束緩衝區的數量,即我傳入的「計數」大於實際計數。有趣的是,這個調用沒有拋出異常,但它會間歇性地導致你描述的問題。而且,我最終渲染的緩衝區看起來不對,所以我知道有什麼東西沒有了。「CPU可能被釘住」的事情讓追查真正問題變得更加惱人。