问题标签 [android-traceview]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1579 浏览

android - Android:traceview 和 systrace 工具的区别

我正在学习使用这些工具进行性能分析。我已经阅读了有关 traceview 和 systrace 的 Android 文档,但我没有看到任何主要区别。它们都有相同的 GUI:时间线和左侧的所有组件都在这条时间线上运行。主要目的是检测代码中长时间运行的任务。

traceview所以,我的问题是:和之间的真正区别是什么systrace。我们在什么情况下使用每种工具?

谢谢 :)

0 投票
1 回答
297 浏览

android - android traceview 异步事件

我想使用 traceview 来衡量几个异步事件的性能。异步事件在类似于以下代码的回调中传递给我。

每个异步事件都将以“onStartEvent”调用开始并以“onStopEvent”调用结束。

我想为每个事件创建跟踪文件。从我在这里的阅读(http://developer.android.com/tools/debugging/debugging-tracing.html#creatingtracefiles)来看,不可能跟踪异步事件,因为调用的顺序必须在“堆栈”中“结构化” “喜欢订购。因此,对“Debug.stopMethodTracing()”的调用始终适用于最近对“Debug.startMethodTracing(“calc”);”的调用。

因此,如果我按以下顺序收到回调。

onStartEvent(A)

onStartEvent(B)

onStopEvent(A)

onStopEvent(B)

这将被解释为

Debug.startMethodTracing("A");

Debug.startMethodTracing("B");

Debug.stopMethodTracing(); // 将应用于“B”而不是“A”

Debug.stopMethodTracing(); // 将应用于“A”而不是“B”

使用traceview,有没有做我想做的事?即跟踪“非结构化”异步事件?

0 投票
2 回答
4640 浏览

android - Android:使用 Traceview 和 Genymotion 进行分析时,.trace 文件在哪里?

我正在阅读这篇关于在您的 android 应用程序上运行 traceview 的文章:https ://developer.android.com/studio/profile/traceview.html我假设他们正在谈论的模拟器是 android 模拟器,而不是 Genymotion 模拟器是我正在使用的那个。

它说要将跟踪文件从模拟器中拉出到您的主机上,您只需运行以下命令:

我在我的 Genymotion 模拟器上运行它,但找不到该文件。然后,我使用 Android 设备监视器在设备内部查找文件,但在该位置没有保存名为 startup.trace 的文件。

我在我的代码中这样做了:

然后我在我的活动 onResume 方法中停止跟踪以测量我的应用程序的启动时间:

我希望 traceview 测量我的启动时间,但不知道文件在 Genymotion 模拟器上的保存位置。任何人都可以帮助我保存文件的位置吗?

0 投票
0 回答
58 浏览

android - 即使禁用了 multiDex,Android 应用程序启动也会延迟,TraceView 显示 Dalvic.system.DexFile 在启动时运行

我已经为此工作了几天,但在任何地方都没有找到任何解决方案。由于多索引过程,最初启动时间很长。我设法摆脱了我没有使用的额外谷歌服务库,并使代码足够小(低于 2^16 方法参考)而不需要多 dex。但是,当我运行并查看 traceview 时,我仍然看到下图显示 dalvic.system.dexfile 在主线程中启动并首先运行约 3 秒。我附加了我的 gradle 以及显示禁用了多 dex 选项。知道是什么导致 dalvic.system.DexFile 启动以及如果可能的话如何摆脱它?

编辑:经过进一步调查,我认为“即时运行”可能是原因。还不确定!如果有人能证实这一点,那当然很好。运行即时运行会在应用启动时导致任何可能导致延迟的初始化吗?那会与dexfile有关吗?

编辑:我对 Instant Run 的效果做了一些搜索,发现了这个. 似乎即时运行确实会影响启动时间,经过一些没有即时运行的运行后,我的问题似乎得到了解决。

在此处输入图像描述

0 投票
0 回答
745 浏览

android - Android Monitor Method trace 和 Android Device Monitor 的区别

我使用 Android Device Monitor(方法分析)和 Android Monitor(方法分析)对同一应用程序的 cpu 时间进行了分析,但是,我得到了不同的结果。关于它们在底层工作方面有何不同的任何想法?

1) Android 设备监视器 https://developer.android.com/studio/profile/traceview.html

2) Android 监视器 https://developer.android.com/studio/profile/am-basics.html

据我观察,d Android Monitors (2) 中没有选项可以选择基于跟踪或基于采样的分析。此外,无法更改方法跟踪的缓冲区大小,因此只能收集几秒钟的数据。

我很好奇一个是否比另一个更准确。

0 投票
1 回答
383 浏览

android - Android Traceview(基于采样的跟踪)不反映函数调用的实际数量

我正在分析每 5 秒执行一次的应用程序中的函数。但是,我在跟踪视图的“Calls + Rec/Total”选项中只看到了一半的调用。我正在使用 1 微秒作为采样间隔的基于样本的分析。我尝试使用这种采样率,但没有明显的改进。例如,当我运行视图 236 秒时,我应该在“Call + Rec/Total”选项中获得 47 个调用,但是如下图所示,它只显示 20 个。谁能评论我做错了什么?

在此处输入图像描述

更新: 根据我与@kws 的讨论,我在第二台三星(最初使用 Android 5.1.1)上安装了 Android 4.4.4,现在基于采样的方法可以正常工作。但是,搭载 Android 6.0.1 的智能手表仍然采用旧的跟踪视图方式。

更新 2: 我认为基于采样的方法没有捕获非常轻量级函数的分辨率,因为这些函数可能是在两个样本之间执行的,而探查器会遗漏它。虽然它以微秒作为采样间隔记录数据,但我怀疑它是否可以达到如此详细的粒度。这个论点背后的原因是,当我用它测试一个非常轻量级的函数时,并不是每个调用都在所有三个设备上都被捕获。

0 投票
1 回答
1405 浏览

android - Android 基于跟踪和基于采样的方法分析之间的差异及其对报告的 cpu 时间的影响

Android Traceview 中基于跟踪和基于采样的分析方法有什么区别?我认为基于跟踪更准确,但是,它似乎会扭曲实际的 cpu 时间,特别是如果有其他调用函数。

例如,我想评估一个函数 A,它有两个实现,例如 A-1 和 A-2。

  1. A-1 多了一个函数调用,比如 A-1-1。
  2. A-2也有更多的函数调用,比如A-1-1,但是A-1-1里面也有一个函数调用,比如A-1-1-1。

现在我认为基于跟踪的分析将为 A-2 报告更高的值,因为它需要跟踪一个额外的函数 A-1-1-1,并且这个额外的 cpu 使用情况将在 A-2 的 cpu 时间中报告。我对吗 ?

那么问题就来了,基于trace的方法在报告父函数的实际cpu时间时,是否考虑了跟踪子方法所花费的cpu开销时间呢?

另一方面,基于采样的方法的问题是它可能无法捕获非常轻量级的函数。如果我的函数占用 0.2 毫秒 cpu 时间,采样间隔为 1 毫秒怎么办?我用它做了一些实验,它无法捕获轻量级函数调用。关于它们的差异有什么想法或参考文档吗?

最后一个问题是相对比较哪个更准确?

0 投票
0 回答
72 浏览

android - 在 traceview 中哪个更准确用于相对比较(基于采样或基于跟踪的方法)?

我很好奇 traceview 提供基于采样或基于跟踪的分析的方式中哪种方式更准确。该文档仅讨论了由于两者引起的开销,在这种情况下,基于采样是更好的选择,因为它导致的开销更少(相对于采样频率)。

所以主要问题是哪个更准确或更适合比较一个功能或两个不同功能的各种实现?

我对基于采样的方法的担忧是它可能无法捕获执行时间小于采样间隔的函数。

我的个人观察: 我反复测试了具有各种功能的基于采样的方法。它以 1000 微秒作为采样间隔正确记录计算量大的函数,但是它错过了轻量级函数。

0 投票
2 回答
227 浏览

java - 应用程序启动时间长

我的应用程序启动时间有问题。如果我启动我的应用程序(启动主要活动),大约需要 3-4 秒才能最终显示应用程序。我从 onCreate 方法中删除了所有内容,因此它只包含设置简单 LinearLayout 的 setContentView(R.layout.activity_main)。MainActivity 中没有复杂的布局结构或其他繁重的代码。

为了记录启动时间,我使用了 adb shell 命令,它给了我以下输出:

还有 TraceView:

在此处输入图像描述

我对 TraceView 不是很熟悉,所以我不太了解输出,但“bindApplication”部分需要很长时间。我还在我的 gradle 文件中导入了一些应用程序所需的库,它们可能会影响启动时间:

有谁知道为什么我的应用程序需要这么长时间才能显示?

编辑:主要活动

0 投票
0 回答
31 浏览

android - Activity 转换很慢,但是方法 profiling 没有显示任何异常

我有一个活动,进入它很费时间(大约 1 秒)。

我尝试使用 DDMS 来跟踪活动转换期间发生的情况。
我启动了跟踪,按下启动新活动的按钮,然后停止跟踪。
但是,我在方法分析中找不到任何可疑的方法。

跟踪视图

所以......总而言之,我可以这样提出我的问题:

  1. 我是否正确使用了traceview?我总是按 Excl Cpu 时间排序,看看是否有任何方法占用的时间最多。但是,在上面的跟踪中,最慢的方法不到 83 毫秒。

  2. 如果你有类似的经历(即Activity过渡很慢,但是在traceview中找不到任何东西),你最终如何解决呢?