linux-kernel - 在 Linux 内核中获取帧计数
问题描述
我试图找到一个变量/一些指标,可以帮助我计算在 Linux 内核的 Midgard GPU 驱动程序中呈现的实际帧数。
在用户级程序上测试我的算法时,我使用了一个系统调用(如下所示),它从 SurfaceFlinger 获取帧计数并将该值存储到一个文件中,稍后我在用户级程序中读取该文件。
system("setsid adb shell service call SurfaceFlinger 1013 | \
grep -o -E \\([a-fA-F0-9]+\\ \\)> frames.txt");
注意:我正在尝试创建一个使用此信息的 dvfs 调节器,但我似乎无法在 Midgard 驱动程序中找到访问它的方法。我只能访问 GPU 内核的“利用率”,但这并不总是与帧数匹配。关于如何解决这个问题的任何想法?
解决方案
对于 Android,您可以监控用于组件之间缓冲区交换的帧完成围栏。更多信息在这里:
但是请注意,这是一类没有传统意义上的“框架”的用例。
- 渲染到 VR 和 AR 护目镜使用前缓冲区渲染,其中没有缓冲区交换,因此没有完成围栏。
- OpenCL 或 GPU 计算用例往往会渲染回任意内存,而不是可显示的帧,因此同样地,您也可能不会在那里获得帧。
推荐阅读
- postgresql - 如何使用 pgRouting 计算 Origin - Destination 对之间的最短路径?
- ngrok - 如何为 SQL Server 访问配置 ngrok
- java - 在 Spring Boot 中路由到 error.html 时,登录的用户似乎被清除了
- go - 我想用golang写代码。程序从文件中读取 100 个 url 并打印其状态码
- javascript - 通过删除不需要的查询参数同时保留其他参数来返回干净 URL 的最佳方法是什么?
- python - 熊猫数据框 str 到日期时间,格式为下午 5:30
- php - Simba ODBC 是否比 google bigquery Api for PHP 更快?
- python - 在 pandas 数据框中的每 n 行(n 变量但预先确定)之后添加一行特殊字符
- preload - 在 Nuxtjs 生成的动态页面中加载内容的问题
- c# - ASP.NET 将中继器导出到 excel,excel 文件打开时出现错误“'RepeaterExport.xls' 的文件格式和扩展名不匹配