AndroidアプリのUI描画時間を取得するためのシェルコマンドがあります(この質問には実際には関係ありません)。とにかく、出力は次のようになります
I/ActivityManager( 1843): Fully drawn com.amazon.android.calypso/com.amazon.android.tv.tenfoot.ui.activities.ContentBrowseActivity: [time]
ここで、[時間]の形式である+###ms
か、+#s###ms
(ここでも、関係がありません)。
コマンドは次のとおりです。
adb logcat -d | grep 'Fully drawn' | sed -e 's/^.*: +\(.*\)ms$/\1/' -e 's/s//'
echo
出力を直接表示するために使用すると、期待どおりに機能します:
$ echo 'I/ActivityManager( 1843): Fully drawn com.amazon.android.calypso/com.amazon.android.tv.tenfoot.ui.activities.ContentBrowseActivity: +233ms' | sed -e 's/^.*: +\(.*\)ms$/\1/' -e 's/s//'
> 233
$ echo 'I/ActivityManager( 1843): Fully drawn com.amazon.android.calypso/com.amazon.android.tv.tenfoot.ui.activities.ContentBrowseActivity: +1s233ms' | sed -e 's/^.*: +\(.*\)ms$/\1/' -e 's/s//'
> 1233
ただし、同じ形式の出力を表示する他のコマンドで使用するとsed
、レンダリング時間だけでなく行全体が一致します。
$ adb logcat -d | grep 'Fully drawn' | sed -e 's/^.*: +\(.*\)ms$/\1/' -e 's/s//'
> I/ActivityManager( 1843): Fully drawn com.amazon.android.calypo/com.amazon.android.tv.tenfoot.ui.activities.ContentBrowseActivity: +233ms
最初に出力を変数に入れたときにも同じことが起こります。
$ out="$(adb logcat -d | grep 'Fully drawn')"
$ echo $out | sed -e 's/^.*: +\(.*\)ms$/\1/' -e 's/s//'
> I/ActivityManager( 1843): Fully drawn com.amazon.android.calypo/com.amazon.android.tv.tenfoot.ui.activities.ContentBrowseActivity: +233ms
サイコロなしでテキストファイルに出力をダンプしようとしました。
adb logcat -d | grep 'Fully drawn' > temp.txt
cat temp.txt | sed -e 's/^.*: +\(.*\)ms$/\1/' -e 's/s//'
> I/ActivityManager( 1843): Fully drawn com.amazon.android.calypo/com.amazon.android.tv.tenfoot.ui.activities.ContentBrowseActivity: +233ms
なぜそうなのか誰でも知っていますか?
ええ、それが原因だと思います。私は変更
—
ダニー・チア
ms$
しms.*$
て、それが問題を解決しました。ありがとう!
@IporSircerおそらく、OPがスレッドを閉じることができるように、回答として書き上げてください。
—
ejbytes
$
sedコマンドの末尾をスキップしてみてください。