android渲染使用CPU而不是GPU?

2023-11-30

很奇怪的是,在 systrace 工具中,当我看到 SurfaceFlinger 执行绘图命令和窗口合成时,它是在 CPU 上运行的,而不是在 GPU 上运行的。但根据 Romain Guy 的 google 演讲,他们表示绘图命令的组合和执行是在 GPU 上执行的。我的设备有 GPU,即使它们使用的是 CPU 核心。我认为如果CPU核心是空闲的,那么它使用CPU核心,否则它使用GPU。


可以通过三种方法进行表面合成:

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

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

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

Update:有一篇非常好的文章这个帖子.

更新2:现在有完整系统的概述Android 系统级图形 doc.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

android渲染使用CPU而不是GPU? 的相关文章

  • Android 覆盖在软件按钮之上

    我正在尝试编写一个绘制自定义鼠标指针的应用程序 我目前有一个服务 它创建一个扩展 ViewGroup 的类 并使用 WindowManager 系统服务将其显示为带有 FLAG LAYOUT IN SCREEN 设置的 TYPE SYSTE
  • 通过数据绑定将字符串传递到包含的布局不起作用

    我正在尝试使用 Android 数据绑定功能将一个简单的字符串从我的主布局传递到布局 它编译得很好 但传递给包含的值实际上并未传递 即 它没有出现在我的布局中
  • 定期运行任务(每天一次/每周一次)

    我想定期 每周 每天一次 运行一些任务 即获取我的网站新闻页面 即使我的应用程序已关闭 是否可以 是的 您需要查看报警管理器 http developer android com reference android app AlarmMan
  • 使用 Google Places Autocomplete API 的 REQUEST_DENIED 响应

    我正在开发 Android 应用程序 它使用谷歌的地点自动完成 API 当尝试点击以下网址时 我得到的答复如下 预测 状态 REQUEST DENIED 我从下面的链接获得了 API 密钥Google API 控制台 http code g
  • 使用 APDU 命令的有效 NFC 读取比特率是多少?

    我目前正在使用 Android IsoDep trancieve 函数发送和接收累计 1628 字节的数据 该函数分布在 35 个 APDU 命令 选择应用程序 身份验证 读取 中 字节计数包括返回的 MAC 校验和以及由 transcie
  • Android Studio:lambda 不起作用[重复]

    这个问题在这里已经有答案了 当尝试使用 lambda 表达式时 我遇到了一些 Gradle 构建错误 错误 41 100 错误 source 1 7 不支持 lambda 表达式 使用 source 8 或更高版本来启用 lambda 表达
  • 如何使用 adb 在设备上安装现有的 Android 应用程序?

    在开发过程中 我使用类似的东西 adb s 192 168 1 77 5555 uninstall com myApp app adb s 192 168 1 77 5555 install path to android debug ap
  • 如何在 Android 上创建 YouTube 的双击手势?

    我在 Android 上有 exoplayer 的应用程序 我已经创建了 youtube双击手势用动画向前或向后跳跃 10 秒 如何在双击时创建具有波纹效果的半圆 像这样 这个怎么做 我也想实现这样的功能 所以我自己编写了它来 复制 You
  • Android-工具栏中的SearchView

    我只想在我的应用程序中添加 searchview 但我不想搜索任何东西 只是我想要用户输入的查询 到目前为止 我尝试了这段代码 但是当我运行我的应用程序时它崩溃了 Update 我尝试了这个 但即使我的应用程序崩溃了 main menu x
  • 使用 Android 播放任意音调

    有没有办法让Android发出任意频率的声音 意思是 我不想预先录制声音文件 我环顾四周 音调发生器 http developer android com reference android media ToneGenerator html
  • Android中不同线程的数据库访问

    我有一个在 AsyncTasks 中从互联网下载数据的服务 它解析数据并将其存储在数据库中 该服务持续运行 当服务写入数据库时 活动会尝试从数据库中读取更改 我有一个数据库助手 有多种写入和读取方法 这会导致问题吗 可能尝试从两个不同的线程
  • 监听什么来检测 Android 中的请勿打扰模式更改?

    我希望我的应用程序在手机设置为请勿打扰模式 仅限闹钟 仅限优先级或完全静音 时显示通知 通过聆听 这效果非常好android media RINGER MODE CHANGED在快速设置中检查此模式并在已选择的选项卡中选择模式时 但是 当选
  • AnalyticsService 未在应用程序清单中注册 - 错误

    我正在尝试使用 sdk 中提供的以下文档向 Android 应用程序实施谷歌分析服务 https developers google com analytics devguides collection android v4 https d
  • 没有调用addToBackStack,片段仍然添加到backstack,为什么?

    我正在制作我的片段更换器助手类 但我遇到了一些问题 我称之为FragmentChanger 它有一个fragmentContainer 这是一个ViewGroup 其中包含我想展示的所有片段 我已经做了我自己的replace Fragmen
  • Google 移动广告和 Kindle Fire

    我最近用 Google 移动广告替换了 AdMob 库 对此我有一个疑问 广告会出现在 Amazon Kindle Fire 设备上吗 我问这个是因为我知道 Google 移动广告依赖于 Google Play 服务 所以我有点困惑 Goo
  • Integer.parseInt("0x1F60A") 以 NumberformatException 结束

    我尝试从数据库中获取长字符串内的表情符号代码 格式如下 0x1F60A 所以我可以访问代码 但它将是String 起初 我尝试通过执行以下操作来转换变量tv setText beforeEmo getEmijoByUnicode int e
  • 在 AppAuth-Android 中注销

    我有一个用JAVA开发的Android应用程序 对于这个应用程序 我使用的是身份服务器4 https github com IdentityServer IdentityServer4作为我的 STS 一切正常 但我找不到任何注销的实现Ap
  • 不显示 WRITE_EXTERNAL_STORAGE 的权限对话框

    I want to download a file using DownloadManager And DownloadManager wants to WRITE EXTERNAL STORAGE permission I have in
  • 在 Android 布局 xml 文件中使用字符串格式参数 [重复]

    这个问题在这里已经有答案了 我在 String xml 文件中定义了一个使用格式参数的字符串 即
  • Android ADT Eclipse 插件,parseSDKContent 失败

    我刚刚设置了我的第一个 Android 开发环境 其中包括 日食3 5 Mac OS X 10 5 适用于 x86 mac 的 Android SDK ADT Eclipse 插件 0 9 6 我已将 set PATH 设置为我的 SDK

随机推荐

  • 打印时间时出现意外输出。时间类型别名

    我正在尝试为自定义类型编写一个解组函数 考虑下面的代码 操场 package main import encoding json fmt strings time type Time time Time func st Time Unmar
  • Spring Boot 安全注销不会使会话失效

    我的增强型宠物诊所应用程序需要安全性 目前注销功能似乎不起作用 我有一个 GET 版本 简单链接 和一个 POST 版本 通过链接提交的隐藏表单 登录后 无论我使用哪种方式注销 一旦我尝试再次登录 就不允许新的登录 我相信这与本节相关 se
  • 如何绘制Windows经典风格的窗口元素

    我们在程序中创建了一些自定义 窗口 当VisualStyles启用后 我们可以找到窗口的每个元素及其大小 并使用适当的渲染器自行绘制它们 包括最小化和关闭按钮 我们想做同样的事情VisualStyles已被禁用 目前正在绘制我们自己的窗口
  • JFreeChart PolarPlot:数学方向

    我想创建一个极坐标图 其中数据以数学方向绘制 因此 该系列从东方开始 然后逆时针继续 JFreeChart 的默认行为PolarPlot是从北开始并顺时针继续系列 是否有对此内置的支持PolarPlot班级 我知道如何转换数据以达到目标 但
  • 合并 2 个具有不同列名的数据框

    在 R 中 我有 2 个数据框 它们都有不同的列名称 我想根据列号组合每个数据框的行 我的数据框如下 gt d1 X 0 52 V2 X 0 52 V4 1 ABT 700 2 AMD 9600 3 AMG 600 4 AGCO 800 g
  • 如何将 Eigen::Matrix 映射到 std::vector

    例如 如果我有一个Eigen MatrixXd大小为 10 列和 3 行 我如何将其别名为std vector的 10 个元素Eigen Vector3d 当我说别名时 我的意思是使用相同的内存块而不进行复制 我知道我可以通过以下方式进行反
  • 如何使用 Firebase 云消息传递

    我找不到任何有关新版本的文档 版本7和版本6有大量文档 而版本9几乎不存在 不仅是我 大多数人都找不到 我只是想向后台发送简单的通知 如果有人分享有关新版本的文档 我将非常高兴 或者我应该使用旧版本 我想您知道如何将 firebase 添加
  • 在 C# 中将字符串转换为枚举标记[重复]

    这个问题在这里已经有答案了 可能的重复 如何在 C 中将字符串转换为枚举 如何在 C 中将字符串 文本 转换 强制转换 为 Enum 标记值 你可以这样做 MyEnum oMyEnum MyEnum Enum Parse typeof My
  • 使用 VBA 获取在 VBA 中使用的唯一值?

    我目前会使用类似的东西与范围 单元格或类似的许多不同的方式相同的基本原理 Range A1 Range A1 End xlDown AdvancedFilter Action xlFilterCopy CopyToRange Range I
  • 尝试为 Haskell 中的函数创建有效的算法

    我正在寻找一种有效的多项式时间解决方案来解决以下问题 实现一个递归函数节点 x y 来计算数字三角形中的第 x y 个数字 定义为 g x y 0 if x gt y 1 if x y 0 0 sum of all incoming pat
  • 使用 VS 2015 Update 2 配置 tslint

    我无法让 tslint 在 Visual Studio 2015 中正常工作 我应该明确指出 我安装了更新 2 我有 Web Essentials 但它声称它不再包含 linters 我没有网络分析器 如果这很重要的话 这是一个 ASP N
  • 有没有办法在 Gradle KTS 中实例化 KTS 脚本引擎?

    我想在我的项目构建过程中使用 3d party 库 库方法需要 ScriptEngine 当我尝试实例化它时 出现错误 java lang IllegalArgumentException Unable to construct scrip
  • Mongoose findOneAndUpdate:更新对象数组中的对象

    我有与此线程中描述的完全相同的问题 因此有类似的标题 Mongoose findOneAndUpdate 更新对象数组中的对象 给定这个模型 const SavedFoodsSchema new Schema user type Schem
  • 为什么我的组件没有包装在 Swing 的 FlowLayout 中?

    为什么我的组件没有使用 FlowLayout 包装在这个 JPanel 中 它们只是跑出屏幕并且仅部分可见 JPanel panel new JPanel new FlowLayout panel add new JLabel TEST r
  • 如何在nodejs中使用typescript/flow而不编译它

    有人可以给我一些建议或链接来讨论我是否应该为后端捆绑 JS 我尝试用这个标题 和类似的词 搜索谷歌 但找不到任何有用的链接 只是想知道 假设我正在使用最新的 Node JS es6 ready 我应该捆绑 编译 JS 吗 如果没有 我该如何
  • 循环 Observable 数据,推送到数组,并显示数组打字稿的所有结果

    我如何循环遍历我作为 Observable 订阅的数据 将其推送到数组 并显示数组的全部数据 我目前的代码仅显示每个 页面 的数据 而不是所有页面 我之所以要这样做 是因为我想制作无限滚动 谢谢你 成分 this storiesServic
  • 来自资源字符串的 Toast.makeText

    我有一个名为 MyPrimaryClass 的类 该类有一个按钮 按下时会创建一个类为 myClassForResult 的 Intent 我用它来启动它 startActivityForResult myIntentOfMyClassFo
  • Python:如果 DataFrame 之间的其他值匹配,则对 DataFrame 中的值求和

    我有两个不同长度的数据帧 如下所示 数据框A FirstName LastName Adam Smith John Johnson 数据框B First Last Value Adam Smith 1 2 Adam Smith 1 5 Ad
  • 从实体框架实体获取列数据类型

    使用实体框架 5 首先使用数据库 是否可以 在运行时 获取实体属性所代表的数据库列的数据类型 如果更容易的话 net 类型也可以正常工作 IEnumerable
  • android渲染使用CPU而不是GPU?

    很奇怪的是 在 systrace 工具中 当我看到 SurfaceFlinger 执行绘图命令和窗口合成时 它是在 CPU 上运行的 而不是在 GPU 上运行的 但根据 Romain Guy 的 google 演讲 他们表示绘图命令的组合和