【Android日志分析】EventLog

本文探讨了Android系统中EventLog日志的重要性和用途,如何通过EventLog来跟踪和分析系统的事件处理流程,包括关键时间点和状态变化。作者分享了EventLog的命令行工具使用,并提供了EventLog格式的详细解析,以及不同TAG的应用场景,旨在帮助开发者进行问题定位和性能优化。

Android源码中有大量的EventLog日志,通过这个日志可以很简洁的呈现出系统的事件处理流程,包括时间,状态,便于我们分析定位问题。

  • 命令
查看Event所有的tags
adb shell cat /system/etc/event-log-tags

输出events日志信息
adb logcat -b events

该命令会输出带有时间点、进程号等信息的events log
adb logcat -v threadtime -t 4096 -b events
  • EventLogs完整语义分析
30014 am_proc_start (User|1|5),(PID|1|5),(UID|1|5),(Process Name|3),(Type|3),(Component|3)

格式:(<name>|data type[|data unit]) ==> (<名字>|数据类型[|数据单位])

例子:(User|1|5) ==> 名字为User, 数据类型为1,数据单位为5,下面再来看看数据类型和数据单位

数据类型:1:int,2:long,3:string,4:list

数据单位:1:对象个数,2:字节数,3:毫秒,4:分配个数,5:ID,6百分比

实例分析:
am_proc_start (User|1|5),(PID|1|5),(UID|1|5),(Process Name|3),(Type|3),(Component|3) am_proc_start: [0,9227,10002,com.android.browser,content provider,com.android.browser/.provider.BrowserProvider2] 

进程启动: UserId=0, pid=9227, uid=10002, ProcessName=com.android.browser, 
数据类型=ContentProvider, 组件=com.android.browser/.provider.BrowserProvider2

更多格式参考下面的列表

  • EventLogs格式整理
AM
30001	am_finish_activity	User,Token,TaskID,ComponentName,Reason
30002	am_task_to_front	User,Task
30003	am_new_intent	User,Token,TaskID,ComponentName,Action,MIMEType,URI,Flags	
30004	am_create_task	User ,Task ID
30005	am_create_activity	User ,Token ,TaskID ,ComponentName,Action,MIMEType,URI,Flags
30006	am_restart_activity	User ,Token ,TaskID,ComponentName
30007	am_resume_activity	User ,Token ,TaskID,ComponentName
30008	am_anr	User ,pid ,Package Name,Flags ,reason
30009	am_activity_launch_time	User ,Token ,ComponentName,time
30010	am_proc_bound	User ,PID ,ProcessName
30011	am_proc_died	User ,PID ,ProcessName
30012	am_failed_to_pause	User ,Token ,Wanting to pause,Currently pausing
30013	am_pause_activity	User ,Token ,ComponentName
30014	am_proc_start	User ,PID ,UID ,ProcessName,Type,Component
30015	am_proc_bad	User ,UID ,ProcessName
30016	am_proc_good	User ,UID ,ProcessName
30017	am_low_memory	NumProcesses
30018	am_destroy_activity	User ,Token ,TaskID,ComponentName,Reason
30019	am_relaunch_resume_activity	User ,Token ,TaskID,ComponentName
30020	am_relaunch_activity	User ,Token ,TaskID,ComponentName
30021	am_on_paused_called	User ,ComponentName
30022	am_on_resume_called	User ,ComponentName
30023	am_kill	User ,PID ,ProcessName,OomAdj ,Reason
30024	am_broadcast_discard_filter	User ,Broadcast ,Action,ReceiverNumber,BroadcastFilter
30025	am_broadcast_discard_app	User ,Broadcast ,Action,ReceiverNumber,App
30030	am_create_service	User ,ServiceRecord ,Name,UID ,PID
30031	am_destroy_service	User ,ServiceRecord ,PID
30032	am_process_crashed_too_much	User ,Name,PID
30033	am_drop_process	PID
30034	am_service_crashed_too_much	User ,Crash Count,ComponentName,PID
30035	am_schedule_service_restart	User ,ComponentName,Time
30036	am_provider_lost_process	User ,Package Name,UID ,Name
30037	am_process_start_timeout	User ,PID ,UID ,ProcessName
30039	am_crash	User ,PID ,ProcessName,Flags ,Exception,Message,File,Line
30040	am_wtf	User ,PID ,ProcessName,Flags ,Tag,Message
30041	am_switch_user	id
30042	am_activity_fully_drawn_time	User ,Token ,ComponentName,time
30043	am_focused_activity	User ,ComponentName
30044	am_home_stack_moved	User ,To Front ,Top Stack Id ,Focused Stack Id ,Reason
30045	am_pre_boot	User ,Package
30046	am_meminfo	Cached,Free,Zram,Kernel,Native
30047	am_pss	Pid, UID, ProcessName, Pss, Uss

Power
2722	battery_level	level, voltage, temperature
battery_level: [19,3660,352] //剩余电量19%, 电池电压3.66v, 电池温度35.2℃
2723	battery_status	status,health,present,plugged,technology	
2730	battery_discharge	duration, minLevel,maxLevel
2724	power_sleep_requested	wakeLocksCleared
2725	power_screen_broadcast_send	wakelockCount
2726	power_screen_broadcast_done	on, broadcastDuration, wakelockCount	
2727	power_screen_broadcast_stop	which,wakelockCount
2728	power_screen_state	offOrOn, becauseOfUser, totalTouchDownTime, touchCycles
power_screen_state: [0,3,0,0] // 灭屏状态(0), 屏幕超时(3). 当然还有其他设备管理策略(1),其他理由都为用户行为(2)
2729	power_partial_wake_state	releasedorAcquired, tag

后续会继续补充...
  • 各个TAG使用的一些场景
TAG位置
am_low_memoryAMS.killAllBackgroundProcesses或者AMS.appDiedLocked,记录当前Lru进程队列长度
am_pssAMS.recordPssSampleLocked
am_meminfoAMS.dumpApplicationMemoryUsage
am_proc_startAMS.startProcessLocked
am_proc_boundAMS.attachApplicationLocked
am_killProcessRecord.kill,杀掉进程
am_anrAMS.appNotResponding
am_crashAMS.handleApplicationCrashInner
am_wtfAMS.handleApplicationWtf
am_activity_launch_timeActivityRecord.reportLaunchTimeLocked(),后面两个参数分别是thisTime和 totalTime
am_activity_fully_drawn_timeActivityRecord.reportFullyDrawnLocked, 后面两个参数分别是thisTime和 totalTime
am_broadcast_discard_filterBroadcastQueue.logBroadcastReceiverDiscardLocked
am_broadcast_discard_appBroadcastQueue.logBroadcastReceiverDiscardLocked
am_on_resume_calledAT.performResumeActivity
am_on_paused_calledAT.performPauseActivity, performDestroyActivity
am_resume_activityAS.resumeTopActivityInnerLocked
am_pause_activityAS.startPausingLocked
am_finish_activityAS.finishActivityLocked, removeHistoryRecordsForAppLocked
am_destroy_activityAS.destroyActivityLocked
am_focused_activityAMS.setFocusedActivityLocked, clearFocusedActivity
am_restart_activityASS.realStartActivityLocked
am_create_activityASS.startActivityUncheckedLocked
am_new_intentASS.startActivityUncheckedLocked
am_task_to_frontAS.moveTaskToFrontLocked

先整理这些,后续会继续补充,主要是为了便于自己记录使用

 

Android性能优化归纳总结

Android源码 权限验证分析(一)

【Android日志分析】Battery Historian功耗分析工具

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值