【问题标题】:android rendering using CPU but not GPU?android渲染使用CPU而不是GPU?
【发布时间】:2013-12-29 04:58:28
【问题描述】:

在 systrace 工具中,当我看到 Surfaceflinger 执行绘图命令和窗口合成时,这是在 CPU 上运行而不是在 GPU 上运行,这真的很奇怪。但根据 Romain Guy 的谷歌谈话,他们告诉我们绘图命令的这种组合和执行是在 GPU 上执行的。我的设备有 GPU,即使他们使用的是 CPU 内核。我认为如果 CPU 内核是空闲的,那么它使用 CPU 内核,否则它使用 GPU。

【问题讨论】:

  • 您的设备的操作系统版本是什么?

标签: android surfaceflinger


【解决方案1】:

表面合成的三种方法:

  1. 使用“覆盖”平面。当像素被发送到显示器时,最新的设备将组成多达四个平面。这(通常)是进行表面合成的最有效方法。它是 DRM 视频所必需的,因为 GLES 目前无法构建“安全”表面。
  2. 在 GPU 上,使用 OpenGL ES。如果要组合的平面超过四个,SurfaceFlinger 将回退到此。它也用于虚拟显示和screenrecord 之类的东西。在某些设备上,如果没有更新任何表面,硬件合成器将使用 GPU 合成表面,然后仅显示单个缓冲区。如果没有任何变化,这比覆盖平面更节省带宽(因为您不必遍历所有表面,这意味着您需要更少的内存带宽,这意味着您可以降低时钟频率,这意味着您可以使用更少的功率)。
  3. 在 CPU 上。再也没有人这样做了。

它的具体作用因设备而异,并且随着时间的推移而发展。如果您想确切了解它在做什么,请尝试adb shell dumpsys SurfaceFlinger。硬件作曲家细节(靠近底部)是最有趣的部分。您可能需要在运行命令时主动滚动设备显示屏上的某些内容以避免 GLES 优化。

我猜您在 systrace 中看到的是 prepare()set() 调用和缓冲区管理,而不是实际的像素组成。

更新:this post 中有一篇非常好的文章。

更新 2:现在在Android System-Level Graphics 文档中提供了完整系统的概述。

【讨论】:

  • Thans Fadden .iam 不太了解 android framework.and 我也不知道如何分析 du
猜你喜欢
  • 2015-02-24
  • 1970-01-01
  • 2015-04-23
  • 2021-06-06
  • 2021-12-20
  • 2021-03-23
  • 2011-04-23
  • 2021-04-14
  • 1970-01-01
相关资源
最近更新 更多