我正在关注http://developer.android.com/tools/debugging/systrace.html,但无法在我的Moto X(KitKat)上运行systrace.有任何想法吗?
$ python systrace.py --time=10 -o mynewtrace.html gfx view wm
error opening /sys/kernel/debug/tracing/options/overwrite: Permission denied (13)
error opening /sys/kernel/debug/tracing/buffer_size_kb: Permission denied (13)
error opening /sys/kernel/debug/tracing/trace_clock: Permission denied (13)
error opening /sys/kernel/debug/tracing/tracing_on: Permission denied (13)
error opening /sys/kernel/debug/tracing/tracing_on: Permission denied (13)
unable to start tracing
error opening /sys/kernel/debug/tracing/options/overwrite: Permission denied (13)
error opening /sys/kernel/debug/tracing/buffer_size_kb: Permission denied (13)
error opening /sys/kernel/debug/tracing/trace_clock: Permission denied (13)
No data was captured. Output file was not written.
Run Code Online (Sandbox Code Playgroud) 我的应用程序每帧更改一些非常简单的视图(旋转,平移)的属性.根据Android性能文章的建议,我使用了systrace来检查我是否丢帧.
出乎意料的事情出现了.当设备静止不动时(即使我触摸屏幕)CPU使用率更高,systrace上的警报出现,GPU渲染分析器的红色部分更长.当我快速旋转或震动设备时,一切都很好.
以下是结果的链接.Shake是我快速旋转设备的no_shake时候,就是把它放在我的桌子上.
我制作了一个非常简单的测试应用程序,它使用单个翻译动画:源代码.
看一下帧速率平滑的shake systrace,为什么HW_VSYNC_0和HW_VSYNC_ON_0行没有数据?如何读取CPU频率(我在捕获跟踪时启用了该选项).
关于这个问题,我的理论是该设备可能会降低CPU频率.我怎么能在systrace中读到这个?我使用第三方应用来测试这个假设,如下所示.那么,我该怎么做才能避免这个问题呢?
为什么设备会这样做?起初,我认为设备使用加速度计数据来了解它是否未被使用,然后降低了CPU频率.但是,为了增加CPU频率,我必须非常努力地摇动设备.像普通人一样握住它不会增加CPU频率.
我知道这是很多问题,但是在阅读了有关Android图形管道的所有相关文章之后,我的想法就出错了.
在运行Android 5.1的Sony Xperia Z3上出现此问题.运行Android 6的Nexus 5无法重现此问题.
更新
似乎性能问题是由CPU/GPU限制引起的.同样的设备,Xperia Z3,在运行Android 4.4时,即使它降低了时钟速度,它根据Systrace表现更好.此外,摇动时不会提高速度.
关于提高CPU速度所需的摇动手势,我注意到当我尝试将设备从纵向旋转到横向或反之亦然时,CPU时钟会在触发时增加(即使应用程序没有改变方向).因此,我认为监控此手势的原因是为了加快可能的方向变化.
我使用Android SDK中的systrace.py util收集了一些基于React-Native的Android应用程序的痕迹到一个html文件中.当我在Chrome 50.0.2661.86(64位)或Firefox 45.0.2中打开此html跟踪文件时,我在Developer Console中看到了空白屏幕和一些JavaScript错误.OS Ubuntu 14.04 64位操作系统.
但是在我的Windows机器上,在Chrome 49.0.2623.112中正确呈现了html跟踪而没有错误.
任何人都可以帮我解决这个问题吗?
我正在尝试在运行Lollipop 5.1.1的非root用户Nexus 4设备上的命令行上使用systrace工具.看来,当我尝试运行如下命令时:
systrace.py --time=4 -o testtrace.html sched app freq idle load
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
CRITICAL:root:(TimeoutThread-1-for-Thread-1) Exception on ReadFile(01a599f5919448ea,
/sys/kernel/debug/tracing/tracing_on, retries=3, timeout=30),
attempt 1 of 4: AdbCommandFailedError("(device: 01a599f5919448ea) adb pull
/sys/kernel/debug/tracing/tracing_on /var/folders/dj/xq_jq3wx6hg9gzw5r9svkmr00000gn/T/tmpGxH9ji/tmp_ReadFileWithPull:
failed with exit status 1 and output:\n- adb: error: remote object '/sys/kernel/debug/tracing/tracing_on' does not exist\n",)
...
...
- adb: error: remote object '/sys/kernel/debug/tracing/tracing_on' does not exist
Run Code Online (Sandbox Code Playgroud)
但是,当我使用adb命令时:
adb shell /sys/kernel/debug/tracing/
Run Code Online (Sandbox Code Playgroud)
我可以确认文件'tracing_on'存在.
虽然,systrace工具在Android设备监视器上运行良好.我想使用命令行的原因是因为我想以编程方式调用该工具来分析我的应用程序.
当我尝试在其他设备(如Oneplus 3或Samsung Galaxy s6)上运行完全相同的命令时,该工具可以正常工作,并且能够生成html文件.它只是在这个设备和三星galaxy s4产生相同的错误.
任何帮助表示赞赏.
Android systrace工具,通过ADB 调用atrace工具.但是,我不太了解跟踪文件的格式.显然它与linux ftrace工具非常相似,但有些不同.主要区别在于它不使用System.Map文件,但它将所有信息包含在跟踪文件中.此外,还有一些特定于Android的新B | E条目.
Android源代码中有关于此格式的一些信息,请访问:http://androidxref.com/4.1.1/xref/external/chromium-trace/src/tracing/linux_perf_importer.js
但是,在该文档中,我们可以读到该格式属于Linux Perf Tool.我不这么认为,linux perf作为输出提供了一种非常不同的格式......(除非某些特殊配置是活动的......)
我的问题是:有谁知道我在哪里可以找到关于使用adb的atrace工具生成的android跟踪文件的官方文档?
这种格式对你来说很熟悉吗?
# tracer: nop
#
# entries-in-buffer/entries-written: 66427/66427 #P:2
#
# _-----=> irqs-off
# / _----=> need-resched
# | / _---=> hardirq/softirq
# || / _--=> preempt-depth
# ||| / delay
# TASK-PID CPU# |||| TIMESTAMP FUNCTION
# | | | |||| | |
atrace-1724 [000] d..3 14186.680000: sched_switch: prev_comm=atrace prev_pid=1724 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120 …Run Code Online (Sandbox Code Playgroud) Systrace Android工具在内部调用一个名为atrace的工具,它是ftrace或strace(Linux工具)的扩展.
如果我们通过模拟器控制台(ADB shell)连接到Android Jelly Bean,我们可以执行strace工具,但是我们无法执行ftrace工具(命令未安装).
通过互联网进行一些研究我发现strace是ftrace的前身:http: //crtags.blogspot.de/2012/04/dtrace-ftrace-ltrace-strace-so-many-to.html
查看Android源代码,我找到的最" 内部 "引用是Trace.h文件:http: //androidxref.com/4.1.1/xref/frameworks/native/include/utils/Trace.h
我认为这个文件然后被解析为本机Linux驱动程序.
但是,我仍然无法知道此实现驱动程序是否属于strace或ftrace."通常",它应该是ftrace因为它更新,但在那种情况下我不知道为什么我们不能从模拟器运行ftrace.相比之下,strace完全可以从仿真器中获得.
那么,是否有人知道Systrace Android工具是否在非常低级别的strace或ftrace中使用?
谢谢!
我需要通过 python 跟踪任何命令的输出。但我只需要将以下 amd linux 命令转换为 mac m1/arm 命令(因此 python 可能不相关):
\nstrace -e trace=execve -v -s 100000000 -xx -ttt -ff -o output.txt sh -c \'echo hi\'\nRun Code Online (Sandbox Code Playgroud)\n我怎么做?
\n这对我来说失败了:
\n \xe2\x9d\xaf sudo dtruss -t execve -f sh -c \'echo hi\'\ndtrace: system integrity protection is on, some features will not be available\n\ndtrace: failed to execute sh: Operation not permitted\nRun Code Online (Sandbox Code Playgroud)\n笔记:
\n我似乎无法从brew …
我正在使用dumpsys gfxinfo命令计算应用程序性能。在我的App代码中进行了性能改进更改后,我发现帧总数和Janky帧数大大减少了。
“总帧数”和“垃圾帧”数减少意味着什么?它是性能的良好指标吗?
附加的效果报告。
性能改善之后
#渲染的总帧数:1542
垃圾帧:584(37.87%)
90分位:81ms
95%的时间:93ms
99%的时间:129ms
错过的Vsync数量:268
数字高输入延迟:61
数字慢UI线程:471
慢速位图上传数量:15
数字慢速绘制命令:511
总ViewRootImpl:1
总浏览量:434
总显示列表:505.57 kB
#性能改进之前
#渲染的总帧数:5185
垃圾帧:3229(62.28%)
90分位:101ms
95%的时间:109ms
99%:121ms
错过的Vsync数量:2487
数字高输入延迟:65
数字慢UI线程:2088
慢速位图上传数量:75
数字慢速绘制命令:2967
总ViewRootImpl:1
总浏览量:435
总显示列表:506.74 kB
#performance android android-custom-view android-animation systrace
我正在尝试使RecyclerView顺利滚动.从分析Android设备监视器> DDMS> Android Systrace中的跟踪开始,我认为添加自定义部分可能会有所帮助.在这里,您可以找到我用来完成此任务的示例.有人可以指点我在哪里可以找到我添加的部分日志?谢谢.
@Override
public CalendarMatchViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// calendar_match_item calendar_match_item
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
Trace.beginSection("onCreateViewHolder");
}
View view = mInflater.inflate(R.layout.calendar_match_item, parent, false);
CalendarMatchViewHolder vh = new CalendarMatchViewHolder(view);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
Trace.endSection();
}
return vh;
}
@Override
public void onBindViewHolder(CalendarMatchViewHolder holder, int position) {
Match match = mMatches.get(position);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
Trace.beginSection("onBindViewHolder");
}
setOtherMatchesBasicData(match, holder);
setOfferLayout(match, holder);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
Trace.endSection();
}
}
Run Code Online (Sandbox Code Playgroud) 我目前正在尝试运行 systrace 工具来分析我的用户界面性能。我按照此处所述设置环境:https ://developer.android.com/studio/command-line/systrace.html#syntax
但当我尝试跑步时
python systrace.py --time=10 -o mynewtrace.html gfx
Run Code Online (Sandbox Code Playgroud)
在 Android Studio 终端中,我收到以下错误:
/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python:无法打开文件“systrace.py”:[Errno 2]没有这样的文件或目录
我还没有找到可行的解决方案。