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 |