是否有可能绕过Android的SurfaceFlinger?

3

我最近问了一个相关的问题,但是我没有明确问这个问题。

(我想在Android应用程序中使用OpenGL ES 2.0实现双缓冲方案,而Android的默认方案似乎有点不可预测。)

1个回答

3
唯一绕过SurfaceFlinger的方法是root你的设备并关闭整个应用程序框架。然后,您必须与硬件composer HAL进行接口--仅使用framebuffer dev在所有设备上都不起作用。
只要没有太多其他事情发生,SurfaceFlinger的行为就非常可预测。当然,总会有其他事情发生,但无论您是否通过SurfaceFlinger合成,这都是真实的。
如另一个问题所述(可能是您的问题),Android上的GLES至少是双缓冲的(eglSwapBuffers()),因此您无需实现任何内容即可获得该行为。

是的,Fadden先生,您当时对我的另一个问题回答得很满意,但我注意到即使在我的测试程序中每个渲染过程都非常短(不可能接近1/60秒),我偶尔也会注意到卡顿。此外,如果我记得正确,您在其中一篇技术文章中写道,surfaceflinger的行为可能会在未来的Android版本中发生变化。双缓冲是否保持不变? - Janin zah
分析卡顿问题的最佳工具是systrace(例如http://developer.android.com/tools/debugging/systrace.html)。通过更改渲染循环,可能可以避免明显的卡顿;请参见https://source.android.com/devices/graphics/architecture.html#loops。双(或三)缓冲是必要的,以避免撕裂,因此它不会消失。 - fadden
您好,Fadden 先生。我正在自己构建 Android 系统,并想知道如何关闭整个应用程序框架? - DreamInBox
1
@DreamInBox: adb shell stop。顺便说一句,像这样的事情,你应该创建一个新的问题,而不是在现有答案中添加评论。 - fadden

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接