【问题标题】:Nexus One / Android "CPU may be pegged" bugNexus One / Android“CPU 可能被固定”错误
【发布时间】:2010-06-24 17:16:59
【问题描述】:

我正在使用 NDK(修订版 4)和 OpenGL ES 2.0 为 Nexus One 编写图形密集型游戏。我们真的在这里推动了硬件,并且在大多数情况下它运行良好,除了偶尔我会因以下日志消息而严重崩溃:

W/SharedBufferStack(398):waitForCondition(LockCondition) 超时 (身份=9,状态=0)。 CPU可能是挂钩的。再试一次。

整个系统锁定,一遍又一遍地重复此消息,并且将在几分钟后重新启动,或者我们必须手动重新启动它。我们使用的是 Android OS 2.1,更新 1。

我知道其他一些人已经看到了这个错误,有时与音频有关。在我的情况下,它是由SharedBufferStack 引起的,所以我猜这是一个 OpenGL 问题。有没有人遇到过这个,并且更好地修复它?或者有谁知道SharedBufferStack 发生了什么来帮助我缩小范围?

【问题讨论】:

  • 您是否有机会在 logcat 输出中看到“FAILED BINDER TRANSACTION”?
  • 两个月前我遇到了同样的问题,我找到了解决方法(不是真正的解决方法),但忘记了它发生在哪里。我正在浏览网络,所以应该至少有一个可用的解决方案/解决方法。
  • @Shade:你还记得解决方法本身的任何内容吗?
  • 我很确定这与此处观察到的问题相同。我将尝试浏览我的一些代码。如果我幸运的话,我会在这里发帖。
  • 请用英文保存 cmets。否则其他人很难做出贡献。

标签: android android-ndk nexus-one


【解决方案1】:

我不相信音频代码中会出现这样的错误,SharedBufferStack 仅用于 Surface 库。这很可能是 EGL swapBuffers 或 SurfaceFlinger 实现中的一个错误,您应该将其提交给bug tracker

【讨论】:

  • 看看TheCodeArtist发布的链接,你会发现这个错误确实可能发生在音频代码中。
【解决方案2】:

我在 LogCat 上收到了 CPU may be pegged 消息,因为我的代码中有 ArrayBlockingQueue。如果您有任何阻塞队列(就像音频缓冲区的情况一样),请确保 BlockingQueue.put() 只有当您有足够的时间控制以正确地为 BlockingQueue.take() 元素腾出空间时。或者,看看使用BlockingQueue.offer()

【讨论】:

    【解决方案3】:

    waitForCondition() 导致锁定(系统冻结)。
    但这不是根本原因。这似乎是一个问题

    音频框架(你的游戏有声音吗?)
    -或-
    GL 渲染子系统

    日志中有任何“与 CPU 挂钩”的消息吗? 您可能想看看这个:
    http://soledadpenades.com/2009/08/25/is-the-cpu-pegged-and-friends/

    【讨论】:

    • 该链接讨论了 AudioTrack。但是,我的问题源于 MediaPlayer。
    【解决方案4】:

    eglSwapBuffers() 似乎存在驱动问题:

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

    一种解决方法是在调用eglSwapBuffers() 之前调用glFinish(),但这会导致性能下降。

    【讨论】:

      【解决方案5】:

      FWIW,我最近在三星 Galaxy S 上使用 GL ES 2 在 Android 2.3.4 上开发时遇到了这个问题。

      对我来说,问题是我的 glDrawArrays 调用中的一个错误 - 我正在渲染超出缓冲区的末尾,即我传入的“计数”大于实际计数。有趣的是,该调用没有引发异常,但它会间歇性地导致您描述的问题。此外,我最终渲染的缓冲区看起来不对,所以我知道有些不对劲。 “CPU可能被固定”的事情只是让追查真正的问题变得更加烦人。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-02-23
        • 2012-04-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-29
        相关资源
        最近更新 更多