2010-06-24 46 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可能被钉住”的事情让追查真正问题变得更加恼人。