我在Android 4.2.2上的非根Nexus 4上使用systrace测量我的应用程序的性能。我在报告中看到一些对我没有意义的事情,我想知道它们是否可能是systrace错误,或者是否有人可能知道这些症状可能的根本原因。
Link to Report - 请查看运行结束时的大曲线(~18s)。我的理解是performTraversals处于框架级别,它绘制了用户界面的单个框架。所以对我来说没有任何意义,它下面可能会有递归调用。另外,因为我在运行结束时得到了这种指数堆栈,我认为这实际上只是运行结束时数据的systrace缺陷。这种递归是否可能?这是什么意思?
Link to Report - 从12秒左右开始的有趣行为。当我在跑步中间看到类似的东西时,我想我也许不应该写下这个。此外,我花了很多时间试图弄清楚什么可能会占用这么长的eglSwapBuffers / queueBuffer(我的应用程序不使用openGL,只是直接使用框架)无济于事,当一位同事告诉我只是忽略它因为交换缓冲区总是瞬间完成的。可能还有更多吗?这里有什么可以调查的吗?
答案 0 :(得分:4)
在报告#1中,CPU 0的跟踪缓冲区填满了约5秒钟(注意" CPU 0"行中没有数据)。你将开始看到开始和永不结束的东西,因为最终记录没有被记录。这就是为什么你得到大的" performTraversals(没有完成)"斑点。
报告#2中的相同故事 - 在10秒内耗尽。
您可以使用" -b"来增加缓冲区大小。国旗,例如-b 8192
会给你一个8MB的缓冲区。默认大小为2MB。