- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我刚刚将 Galaxy Nexus 更新到 4.3 并启用了新的屏幕显示 GPU 分析功能,然后在 Android 设置屏幕上看到以下结果:
[With] colors indicating time spent creating drawing commands (blue), issuing the commands (orange), and waiting for the commands to complete (yellow).
即使在非常简单的屏幕上,也有很多情况下屏幕刷新时间超过了平滑 60 fps 的阈值(绿线),这主要是因为在很多情况下刷新会花费大量时间等待完成命令(黄线*),而其他时候此步骤几乎是瞬时的。这也不是设置应用程序特有的东西,但似乎存在于我迄今为止测试过的所有应用程序中。*在我看来比黄色更橙色
我想知道的是:
[编辑:]
还更新了 Nexus 7,而且更糟:
“等待命令完成”跳过了多达 5 帧,它在使用中确实显示出来,应用程序非常不稳定且无响应。
[编辑 2:]我已经按照 this article 执行了这些操作。触发 TRIM 约 3 天,因此 N7 应该像“原始”一样“原始”,因为它不会恢复出厂设置。
现在谷歌地图的表现似乎好一点(见下文),所以有些问题可能与闪存访问速度有关,虽然我不知道如何。
不过,由于 Galaxy Nexus 已恢复出厂设置,其长时间的“等待命令完成”时间不能与缺少 TRIM 命令有关,并且按照上述步骤确实没有产生改进。所以我们回到了第一方......
最佳答案
“等待命令完成”表示渲染帧存在依赖关系。例如,应用程序可能正在使用 glReadPixels
从渲染帧中读取。这意味着在将帧发送到 GPU 进行渲染后,应用程序会被阻止,直到渲染该帧完成(而通常它可以立即继续)。 Android 试图让应用程序排队尽可能多的渲染命令,因此突然引入等待实际上意味着应用程序必须等待几个先前排队的帧才能被绘制,然后它正在等待的帧被渲染。
glReadPixels
并不是导致这种依赖的唯一命令。如果应用程序想要写入当前正在使用的纹理,它必须等到依赖于纹理的所有帧都完成。这似乎是谷歌地图正在发生的事情:如果每个 map 图 block 都是一个纹理,它可能会通过在其中写入一个新的图 block 来重用一个旧的屏幕外图 block 以供显示。一旦应用程序将不使用旧图 block 的帧排队,它会尝试写入该纹理,但实际上纹理仍用于渲染先前排队的帧。应用必须等到这些帧完成(并且 GPU 不再从“未使用”纹理中读取)才能写入。
理论上,可以让工作线程写入纹理,从而允许主线程顺利地继续对新帧进行排队。但是 GL 复杂的线程模型使得正确处理这样的事情变得非常棘手,而且主线程最终还是不得不等待纹理上传完成。
至于“设置”应用,可能是 Android 的 GL 后端对图标执行了相同的纹理重用技巧,但这只是猜测。也许 Galaxy Nexus 正在使用 2D 合成器进行帧合成,这样可以节省电量,但代价是在驱动程序中引入了等待。我不知道图表中是否会衡量这种依赖关系。
关于Android 4.3 屏幕 GPU 分析 - gfx 等待时间长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17854103/
假设我们有 MethodA 和 MethodB,其中整个方法的主体都在单个大锁 block 中。两种方法都使用相同的对象进行锁定: lock (objectX) { // methodbody
我想在我的代码中设置不同的 Capybara 等待时间,具体取决于它们通常需要多长时间才能完全加载?我是否必须重复更改 Capybara.default_wait_time 还是有更好的方法? 最佳答
我们的 Graphite 服务器面临 CPU 和磁盘瓶颈。主要问题是 %IO 等待时间始终在 40% 的范围内。我们在具有 7.5 GiB RAM 的 RHEL 服务器上的 2 核 CPU 上运行它。
我正在编写一个自动化测试程序,它将测试一些有时加载某些 AJAX 调用很慢的 Web 程序。例如,用户将单击“查询”,这将导致 15 到 90 秒的 HTML“加载”覆盖。搜索完成后,它将使用结果更新
如果我使用例如“ls -Rlah/”运行以下函数“运行”,我会按预期通过打印语句立即获得输出 import subprocess32 as subprocess def run(command):
如何检查 Linux 机器中进程等待 CPU 的时间? 例如,在加载的系统中我想检查 SQL*Loader 有多长(sqlldr) 进程等待。 如果有一个命令行工具来执行此操作将会很有用。 最佳答案
我正在运行一个多并行文件处理进程(最少 200 个进程),其中每个进程正在读取不同大小(0-50mb)的日志以捕获日志的实时数据。我在 16 个内核上运行我的作业和 8 GB 内存 Linux 机器。
我可以使用哪个 C API 来获取 Linux 上退出的子进程的总磁盘 IO 等待时间(绝对值)? 例如PID 为 1234 的进程运行了 10 秒,并等待 IO 操作完成 3 秒。 背景:我试图找出
我需要一些帮助来计算 bash 脚本的平均 IO 等待时间。 我要运行的脚本非常简单。排序 2 个文件,然后加入。因为我将在大文件上进行测试,所以我需要知道我有多少 IO 瓶颈才能做出一些决定(加入哪
我们在 UNIX 中使用 iostat 在 Unix 中获取所有这些信息。我可以在 Windows 中执行此操作。目前我们使用 typeperf。 最佳答案 还有一个实用程序“logman”。有关此主
我们的 Web 应用程序在高峰时段遇到性能问题,目前该应用程序分为一台 2003 IIS6 Web 服务器和一台 SQL Server 2005 DB 服务器。数据库服务器上的查询时间看起来不错(大约
我是一名优秀的程序员,十分优秀!