15

NDK (リビジョン 4) と OpenGL ES 2.0 を使用して、Nexus One 向けのグラフィカルなゲームを作成しています。ここではハードウェアを本当にプッシュしており、ほとんどの部分で問題なく動作しますが、たまに次のログ メッセージで重大なクラッシュが発生します。

W/SharedBufferStack(398): waitForCondition(LockCondition) がタイムアウトしました (identity=9、status=0)。CPU が固定されている可能性があります。再試行します。

システム全体がロックアップし、このメッセージが何度も繰り返され、数分後に再起動するか、手動で再起動する必要があります. Android OS 2.1 アップデート 1 を使用しています。

私は他の何人かの人々がこのバグを見たことを知っています。時にはオーディオに関連しています。私の場合はが原因SharedBufferStackなので、OpenGLの問題だと思います。誰かがこれに遭遇したことがありますか? SharedBufferStackまたは、物事を絞り込むのに役立つ で何が起こっているか知っている人はいますか?

4

5 に答える 5

2

このようなエラーがオーディオ コードで発生する可能性はないと思います。SharedBufferStack は Surface ライブラリでのみ使用されます。ほとんどの場合、これは EGL swapBuffers または SurfaceFlinger 実装のバグであり、バグ トラッカーに報告する必要があります。

于 2010-06-25T07:46:28.567 に答える
1

コードにArrayBlockingQueueCPU may be peggedが含まれているため、LogCatでメッセージを受け取りました。ブロッキングキューがある場合(オーディオバッファの場合のように)、BlockingQueue.take()要素を適切に配置するのに十分なタイミング制御がある場合にのみBlockingQueue.put()を実行してください。または、BlockingQueue.offer()の使用を確認してください。

于 2011-05-22T18:42:38.047 に答える
1

waitForCondition ()はロックアップ (システムのフリーズ) を引き起こします。
しかし、それは根本原因ではありません。これは問題があるようです

オーディオ フレームワーク(あなたの ゲームにはサウンドがありますか?)
- または - GL レンダリング サブシステム

ログに「CPU 固定」メッセージはありますか? これを見てみたいかもしれません:
http://soledadpenades.com/2009/08/25/is-the-cpu-pegged-and-friends/

于 2011-04-14T12:22:24.217 に答える
0

eglSwapBuffers() にドライバーの問題があるようです:

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

1 つの回避策は、 への呼び出しglFinish()の前に を呼び出すことeglSwapBuffers()ですが、これはパフォーマンス ヒットを引き起こします。

于 2012-12-18T05:23:57.637 に答える