移动性能测试 [讨论&伸手贴] 获取 APP 启动时间

碎念的心心 · 2015年09月08日 · 最后由 恒温 回复于 2015年09月10日 · 3119 次阅读

前提:
①暂定 app 的首页 activity 的 Displayed 时间 ≈ APP 启动时间。
②暂时忽略首次启动和非首次启动时间的区别。
③以下数据基本都在相同的环境下产生。
④以下数据都是在 genymotion 模拟器上产生。

可以通过这两个命令可以获取 activity 的展现时间。
a:【adb shell am start -W -n 包名/app 的首页 activity】
b:【adb logcat -c && adb logcat -s ActivityManager 】或【adb logcat -c && adb logcat -v time -s ActivityManager】

通过 a 命令得到的 TotalTime < 通过 b 命令计算后得到的 Time

b 命令的计算方式:
下面 log 中最后一行 time - 第一行 log 中的 time = 1892,而命令 a 获得的TotalTime < 1000

09-08 05:39:48.750 I/ActivityManager(  515): START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=包名/启动页activity} from pid 694
09-08 05:39:49.518 I/ActivityManager(  515): Displayed 包名/启动页activity: +525ms
09-08 05:39:50.138 I/ActivityManager(  515): START u0 {cmp=包名/首页activity} from pid 4841
09-08 05:39:50.642 I/ActivityManager(  515): Displayed 包名/首页activity: +502ms

但素:
命令 a 获得的TotalTime 会 大于 命令 b 中首页 activity 的 Displayed 时间,这又是为啥呢?不懂,求伸手

目前接触到的一些 app 应用在启动的时候(人肉点击 app 图标启动)一般都会有多个 activity,是不是意味 app 启动时间通过 log 计算出来的更接近实际一些?

共收到 4 条回复 时间 点赞
adb shell pm clear xxx # 打开注释,可以计算第一次打开的情况。
adb shell input keyevent 3
adb shell am start com.xxx.xxx.LauncherActivity
start_time=`adb shell cat /proc/timer_list | awk 'NR==3{printf("%.0f",$3/1000000)}'`
while true
do
# activity=`adb shell dumpsys SurfaceFlinger | grep "| xxxx"` # 登录界面

if [ $? = "0" ]; then
    echo $activity
    break
fi

done
end_time=`adb shell cat /proc/timer_list | awk 'NR==3{printf("%.0f",$3/1000000)}'`
# echo $start_time, $end_time, $((end_time-start_time)) >> test.csv
echo $((end_time-start_time)) >> test.csv
sleep 1
adb shell am force-stop xxx

首先,不是获取 App 启动时间。你的文章内基本上就是 Native 的启动时间。而现在的 webview 以及hybrid以及semi-hybrid都不适用,所以要问问题问清楚。

其次,你要是要接近实际,那么就不能走任何软件给出来的时间,所谓实际就是真正的人感受到的时间,那么就是高速或者慢速摄像机。所以就不可能用任何所谓的 log 打出来。

然后继续来说,TotalTime,可见

final long thisTime = curTime - displayStartTime;
final long totalTime = stack.mLaunchStartTime != 0
        ? (curTime - stack.mLaunchStartTime) : thisTime;

然后说 xia 本地得,你启动的只不过是一个 Activity,也谈不上 App。所以 Activity 本身就有启动时间,而这个启动分成三个部分,每个 View 都是。类似于

so,要专业。。。。

#1 楼 @lihuazhang 帮你优化一下,启动的步骤用adb shell monkey -p com.my.pkg -c android.intent.category.LAUNCHER 1 省去 launchActivty 强相关

#3 楼 @vigossjjj 赞! 另外我这个对 webview 不太实用。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册