12

我正在使用 systrace 在 Android 4.2.2 上的非根 Nexus 4 上测量我的应用程序的性能。我在报告中看到一些对我来说没有意义的东西,我想知道它们是否可能是 systrace 错误,或者是否有人可能知道这些症状的任何可能的根本原因。

1- 运行结束时在 performTraversals 下的大递归

链接到报告- 请查看运行结束时的大曲线(约 18 秒)。我的理解是 performTraversals 处于框架级别,它在其中绘制用户界面的单个框架。所以对我来说,它下面可能有递归调用是没有意义的。另外因为我在运行结束时得到了这种指数堆叠,我认为这实际上只是运行结束时数据的 systrace 中的一个缺陷。这种递归可行吗?这是什么意思?

2- 在缓冲交换时间长的运行中间执行遍历递归

链接到报告- 从 12 秒左右开始的有趣行为。当我在跑步过程中看到类似的东西时,我觉得也许我不应该把它写下来。此外,当一位同事告诉我忽略它时,我花了很多时间试图找出可能导致如此长的 eglSwapBuffers/queueBuffer (我的应用程序不使用 openGL,只是直接使用框架)的原因,但无济于事因为交换缓冲区总是即时的。可能还有更多吗?这里有什么要调查的吗?

4

1 回答 1

4

在报告 #1 中,CPU 0 的跟踪缓冲区在大约 5 秒内被填满(注​​意“CPU 0”行中没有数据)。你将开始看到有始无终的东西,因为没有记录结束记录。这就是为什么你会得到大的“performTraversals(没有完成)”blob。

报告 #2 中的相同故事 - 大约 10 秒后用完。

您可以使用“-b”标志增加缓冲区大小,例如-b 8192会给您一个 8MB 的缓冲区。默认大小为 2MB。

于 2013-06-21T20:39:48.573 回答