【问题标题】:Adreno 420 driver bug on Android 5.1Android 5.1 上的 Adreno 420 驱动程序错误
【发布时间】:2015-05-11 13:52:38
【问题描述】:

只是想分享一个经验,我必须看看是否有人遇到过这样的问题,他们是否找到了原因,更重要的是他们是如何解决的。

问题非常简单:在 Nexus 6(作为 Adreno 420 GPU)上调试本机代码时,eglSwapBuffer 在使用 Android 5.1(5.0 运行良好)时在某些情况下可能会崩溃。 由于我无法重现它,因此我无法告诉您出了什么问题。根据文档,elgSwapBuffer 在内部调用 glFlush;因此,如果我在突然调用 eglSwapBuffer 之前调用 glFlush ,它会完美运行。 我的猜测是驱动程序没有正确刷新,因此在交换缓冲区时崩溃。

有这方面的cmet吗?

干杯, D

【问题讨论】:

  • 如果你不能重现问题,你怎么能说它工作得很好?
  • 在此崩溃发生时检查内存限制,并在此处发布崩溃日志。如果您认为这是一个罕见的问题,请使用 crashlytics、崩溃日志等工具。当应用程序通过电子邮件或工具崩溃时,它们会为您提供日志。
  • @ChrisStratton 对。我可以在应用程序的流程中重现。但正如您所料,交换缓冲区是一个非常常见的命令。您可能会争辩说我遗漏了导致问题的某些东西,如果不止一个设备/gpu 受此影响,这将是一个有效点,但事实并非如此。完美我的意思是停止崩溃,就这么简单。
  • @Iqbal 除了 Android SDK(或 NDK?)附带的 monitor.bat 之外,没有尝试过其他任何东西。遗憾的是,那里没有记录任何非常有用的信息。
  • 哦,好的。以后请集成我提到的工具之一,这些工具对跟踪日志非常有帮助。

标签: android c++ opengl-es-2.0


【解决方案1】:

我遇到了同样的问题,我可以重现它。这很明显是因为渲染过程中的深层嵌套循环导致堆栈内存不足。

Android Lollipop 5.1: Fatal signal 11 (SIGSEGV), code 2, fault addr 0x9e985ff8 in tid 4093 (RenderThread) / when using lot of nine patch graphics

我已经向谷歌问题跟踪器报告了它:

https://code.google.com/p/android/issues/detail?id=163100

更新:与此同时,我找到了解决此问题的方法。这绝对不是一个长期的解决方案,但就目前而言,它只是阻止我的应用程序崩溃的最佳方法。

我为特定的图形层禁用了 GPU 渲染。它会稍微减慢绘图速度,但并不重要。

所以噩梦暂时结束了,但我仍然认为,这个问题必须在驱动程序本身上解决。不可能在 5.0.2 及更低版本上完美运行的东西,立即停止在 5.1 上运行。

【讨论】:

    【解决方案2】:

    我在 N6 上也看到了一些奇怪的行为,虽然我不能排除应用程序错误,但在我看来,Adreno 驱动程序应该受到责备。

    具体来说,在横向模式下,我们的 GLSurfaceView 只渲染一半的内容,但偶尔会闪烁所有内容。在渲染某些场景时,会出现间歇性闪烁。在一个特别奇怪的情况下,我看到一半的屏幕完全冻结,卡在应用程序内容上,即使在通过主页按钮返回启动器之后也是如此。它看起来有点像它使用多流传输并且其中一个流丢失了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-29
      • 2022-01-28
      • 2013-03-04
      • 2012-07-30
      • 2016-07-30
      • 2014-05-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多