libcuitls
源代码位于:system/core/libcuitls。
类 |
说明 |
aref |
引用计数 |
ashmem | |
atomic |
原子操作 |
bitmask |
位操作,包括计数位1的个数 |
cnode |
config解析,格式? |
debugger |
tombstone、backtrace,与debuggerd通信 |
dir_hash |
递归目录,计算文件hash |
fs |
创建目录(指定权限),原子读写包含整数字符串的文件 |
list |
链表 |
hashmap |
hash字典 |
ioprio |
封装ioprio_set、ioprio_get |
jstring |
utf16 <-> utf8 |
klog |
内核日志 |
native_handle |
定义句柄,可跨进程传递 |
sched_policy |
/dev/cpuctl/tasks,sched_setscheduler |
thread_store_t |
线程局部存储,封装pthread_key、TlsSetValue |
mutex_t |
互斥体,封装pthread_mutex或者CRITICAL_SECTION |
property |
系统属性的读写, |
qtaguid |
/dev/xt_qtaguid |
record_stream |
读取记录文件,记录已4字节len开始,len长度的body |
socket |
常用套接字api封装,另外:获取服务套接字(init创建) |
str_parms |
字符串字典 |
atrace |
跟踪同步、异步过程开始结束,以及整形变量的变化过程 |
uevent |
简单封装NETLINK_KOBJECT_UEVENT |
- atrace
- /sys/kernel/debug/tracing/trace_marker
- ${ro.debuggable}
- ${debug.atrace.app_cmdlines}
- ${debug.atrace.tags.enableflags}
- /sys/kernel/debug/tracing/trace_marker
system/core/include/cuitls/trace.h: ------------------------------------------------------------------------- #define ATRACE_TAG_NEVER 0 // This tag is never enabled. #define ATRACE_TAG_ALWAYS (1<<0) // This tag is always enabled. #define ATRACE_TAG_GRAPHICS (1<<1) #define ATRACE_TAG_INPUT (1<<2) #define ATRACE_TAG_VIEW (1<<3) #define ATRACE_TAG_WEBVIEW (1<<4) #define ATRACE_TAG_WINDOW_MANAGER (1<<5) #define ATRACE_TAG_ACTIVITY_MANAGER (1<<6) #define ATRACE_TAG_SYNC_MANAGER (1<<7) #define ATRACE_TAG_AUDIO (1<<8) #define ATRACE_TAG_VIDEO (1<<9) #define ATRACE_TAG_CAMERA (1<<10) #define ATRACE_TAG_HAL (1<<11) #define ATRACE_TAG_APP (1<<12) #define ATRACE_TAG_RESOURCES (1<<13) #define ATRACE_TAG_DALVIK (1<<14) #define ATRACE_TAG_RS (1<<15) #define ATRACE_TAG_LAST ATRACE_TAG_RS |
liblog
源代码位于:system/core/liblog。
日志等级的定义:
system/core/include/android/log.h: ------------------------------------------------------------------------- typedef enum android_LogPriority { ANDROID_LOG_UNKNOWN = 0, ANDROID_LOG_DEFAULT, /* only for SetMinPriority() */ ANDROID_LOG_VERBOSE, ANDROID_LOG_DEBUG, ANDROID_LOG_INFO, ANDROID_LOG_WARN, ANDROID_LOG_ERROR, ANDROID_LOG_FATAL, ANDROID_LOG_SILENT, /* only for SetMinPriority(); must be last */ } android_LogPriority; |
日志设备:
system/core/include/log/log.h: ------------------------------------------------------------------------- typedef enum log_id { LOG_ID_MIN = 0, LOG_ID_MAIN = 0, LOG_ID_RADIO = 1, LOG_ID_EVENTS = 2, LOG_ID_SYSTEM = 3, LOG_ID_MAX } log_id_t; |
日志实现有内核实现和logd实现两种,如果定义了宏TARGET_USES_LOGD,那么使用logd实现,通过UNIX域套接字与/dev/socket/logdw通信;否则使用内核实现,写入/dev/log/main,radio,events,system。
日志使用方式:
方法 |
说明 |
[ASR]LOG[VDIWE] |
输出日志,VERBOSE受LOG_NDEBU控制 |
[ASR]LOG[VDIWE]_IF |
满足条件时输出日志 |
IF_ALOG[VDIWE] |
判断LOG_TAG在指定prio是否enable |
LOG_ALWAYS_FATAL |
输出日志,结束进程 |
LOG_FATAL |
!LOG_NDEBUG时,等于LOG_ALWAYS_FATAL |
ALOG_ASSERT |
!LOG_NDEBUG时,条件成立,等于LOG_ALWAYS_FATAL |
LOG_EVENT_(INT|LONG) |
LOG_ID_EVENTS |
日志读取:
模块 |
说明 |
log_read_kernel.c |
读取内核实现,logger_list,logger |
log_read.c |
读取logd实现 |
logprint.c |
过滤和格式化 |
log_time.c |
时间计算 |
libutils
源代码位于:system/core/libutils。
类 |
说明 |
Looper |
多个fd的反应堆,加上定时回调(处理消息)支持 |
Message |
消息类,what类型号 |
MessageHandler |
Looper的回调对象,消息处理器 |
WeakMessageHandler |
封装,持有MessageHandler对象弱引用 |
Mutex | |
Condition | |
Thread |
Looper类:
成员 |
说明 |
Looper() |
allowNonCallbacks允许fd不设置回调,pollOnce将处理回调 |
pollOnce() |
返回有信号的fd及上下文,内部会调用其他回调 Java层消息队列调用只有timeout参数的版本,Java层消息由Java层处理 |
addFd() |
注册fd、上下文、回调 |
sendMessage*() |
定时回调,MessageHandler,WeakMessageHandler |