Android 框架实现分析 - 基础库 - system/core

​​​​​​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}

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

libnetutils

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fighting Horse

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值