我如何改进此 bash 命令以从 ActivityManager 获取 UI 渲染时间?
How can I improve this bash command to get UI rendering times from ActivityManager?
我正在开发一个基于 Fire App Builder 的示例应用程序,我想以编程方式测量绘制 Activity
所需的时间(以毫秒为单位)。此信息包含在 ActivityManager
日志中:
I/ActivityManager( 1843): Displayed com.amazon.android.calypso/com.amazon.android.tv.tenfoot.ui.activities.ContentBrowseActivity: +656ms
超过一秒的时间如下所示:
I/ActivityManager( 1843): Displayed com.amazon.android.calypso/com.amazon.android.tv.tenfoot.ui.activities.ContentBrowseActivity: +1s001ms
但是,Android 的设计使得应用程序只能读取自己的日志。因此,Runtime.getRuntime().exec("logcat -d ActivityManager:I *:S")
不会显示任何内容。我可以使用 shell 命令读取日志,但我的正则表达式没有提供我想要的内容。
以下命令
adb logcat -d ActivityManager:I *:S | sed -n 's/ContentBrowseActivity:\s+\+\([0-9].*\)ms//p'
匹配,但是因为 sed
不支持非贪婪表达式,所以打印了整行:
I/ActivityManager( 1843): Displayed com.amazon.android.calypso/com.amazon.android.tv.tenfoot.ui.activities.656
我想赶时间。跟踪另一个 grep
命令获取数据:
adb logcat -d ActivityManager:I *:S | sed -n 's/ContentBrowseActivity:\s+\+\([0-9].*\)ms//p' | grep -Po [0-9]+
对于超过一秒的时间,我只想将第一个数字乘以 1,000,然后将其加到第二个数字上。
然而,这非常 hacky 并且还捕获了 I/ActivityManager(####)
中的数字。另一个知道更优雅的解决方案?
$ echo 'I/ActivityManager( 1843): Displayed com.amazon.android.calypso/com.amazon.android.tv.tenfoot.ui.activities.ContentBrowseActivity: +1s001ms' | sed -e 's/^.*: +\(.*\)ms$//' -e 's/s//'
1001
我正在开发一个基于 Fire App Builder 的示例应用程序,我想以编程方式测量绘制 Activity
所需的时间(以毫秒为单位)。此信息包含在 ActivityManager
日志中:
I/ActivityManager( 1843): Displayed com.amazon.android.calypso/com.amazon.android.tv.tenfoot.ui.activities.ContentBrowseActivity: +656ms
超过一秒的时间如下所示:
I/ActivityManager( 1843): Displayed com.amazon.android.calypso/com.amazon.android.tv.tenfoot.ui.activities.ContentBrowseActivity: +1s001ms
但是,Android 的设计使得应用程序只能读取自己的日志。因此,Runtime.getRuntime().exec("logcat -d ActivityManager:I *:S")
不会显示任何内容。我可以使用 shell 命令读取日志,但我的正则表达式没有提供我想要的内容。
以下命令
adb logcat -d ActivityManager:I *:S | sed -n 's/ContentBrowseActivity:\s+\+\([0-9].*\)ms//p'
匹配,但是因为 sed
不支持非贪婪表达式,所以打印了整行:
I/ActivityManager( 1843): Displayed com.amazon.android.calypso/com.amazon.android.tv.tenfoot.ui.activities.656
我想赶时间。跟踪另一个 grep
命令获取数据:
adb logcat -d ActivityManager:I *:S | sed -n 's/ContentBrowseActivity:\s+\+\([0-9].*\)ms//p' | grep -Po [0-9]+
对于超过一秒的时间,我只想将第一个数字乘以 1,000,然后将其加到第二个数字上。
然而,这非常 hacky 并且还捕获了 I/ActivityManager(####)
中的数字。另一个知道更优雅的解决方案?
$ echo 'I/ActivityManager( 1843): Displayed com.amazon.android.calypso/com.amazon.android.tv.tenfoot.ui.activities.ContentBrowseActivity: +1s001ms' | sed -e 's/^.*: +\(.*\)ms$//' -e 's/s//'
1001