【问题标题】:What is causing SharedBufferStack messages in Android's LogCat?是什么导致 Android LogCat 中的共享缓冲区堆栈消息?
【发布时间】:2013-12-16 18:06:47
【问题描述】:

我正在做 Android OpenGL ES 实验,看看它在不同手机上的表现如何。在我的 Logcat 中,我收到带有以下任一行的标记“SharedBufferStack”的日志消息

出队:tail=0,head=1,avail=2,排队=0

出队:tail=1,head=0,avail=2,排队=0

重复了几次,即使我不理会应用程序(没有触摸或按钮按下并阻止它进入睡眠状态)。我想知道是什么导致了它,即使它不是错误。会影响性能吗?

更重要的是,如何删除它?

我正在使用带有 Android SDK 的标准 Eclipse

【问题讨论】:

  • 感谢编辑THelper :)

标签: android logging opengl-es logcat


【解决方案1】:

TLDR 版本:由在 OpenGL ES 的 onDrawFrame() 中调用 Thread.sleep() 引起。

我通过查看下面链接中的代码来了解其中的一部分。 https://android.googlesource.com/platform/frameworks/native/+/9cce325fae8adcf7560a28eef394489f09bad74d/libs/surfaceflinger_client/SharedBufferStack.cpp

所以这个 SharedBufferStack 是 Android 的 SurfaceFlinger 的一部分,在http://rahulonblog.blogspot.sg/2013/06/an-overview-of-surfaceflinger.html 中有描述

Surfaceflinger :它是一个系统范围的表面作曲家功能,驻留在 android 框架中。它从可能是 2D 或 3D 的不同应用程序中获取数据(即表面),最后将其组合以获得将被馈送到内存(即帧缓冲区)的主表面。 Surfaceflinger根据其位置、大小等参数合成所有表面,虽然这个合成是由OpenGL完成的(由Surfaceflinger调用),但我们需要Surfaceflinger计算相关参数,如重叠函数。

也就是说SharedBufferStack是供不同应用程序共享内存供图形界面使用的(如果我错了请纠正我)。

在第 281 和 282 行,它调用了 LOGW(Logcat 调用警告)。

LOGW("dequeue: tail=%d, head=%d, avail=%d, queued=%d",
            tail, stack.head, stack.available, stack.queued);

如果您阅读功能块的其余部分,SharedBufferClient::dequeue 会尝试警告堆栈为空/接近为空。

如果我做出一个疯狂的猜测,我认为“图形”堆栈至少需要有一些东西,否则它就没有什么可显示的了。我仍然不知道为什么它在tail = 0 和stack.head = 1 时调用stack.head==tail。我看不出它实际上是一个堆栈。

=== 更新 1

显然经过更多测试,它恰好是我在 OpenGL ES 循环的 onDrawFrame 中调用的 Thread.sleep。由于 RENDERMODE_CONTINUOUSLY 不能正确控制帧速率(因为我想将其限制为每秒 30 帧而不是让它快速运行),所以我让线程在剩余的时间内休眠。

Thread.sleep(16 - diffTime);

如果我是正确的,它会使 opengl 线程休眠。显然,它会导致上面的消息出现并且听起来不太好,因为您将图形线程从堆栈中取出。我认为我可以做的一种方法是运行一个单独的线程,该线程调用 onDrawFrame 以使用 RENDERMODE_WHEN_DIRTY 进行渲染。另一种方法是让它运行得尽可能快,但每隔 0.017 秒(60 fps)间隔调用一次逻辑循环或控制器来处理动画和其他内容。

=== 更新 2

我做了一个允许尽可能快地渲染图像的方法,但要花时间找出运行逻辑的时间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-09
    • 1970-01-01
    • 2017-02-23
    • 2012-03-20
    • 2010-09-11
    • 2012-11-23
    相关资源
    最近更新 更多