2024年11月03日 第31&32讲 Camera Native FW 之Open Camera之Camera抢占逻辑详解 极客笔记
本讲是Android Camera Native Framework专题的第31+32讲,我们介绍Camera Native FW的Open Camera之Camera抢占流程。
更多资源:
资源 | 描述 |
---|---|
在线课程 | 极客笔记在线课程 |
知识星球 | 星球名称:深入浅出Android Camera 星球ID: 17296815 |
极客笔记圈 |
流程基于Android 14代码:http://s.lmcjl.com/android-14.0.0_r2/
描述一颗CameraClient对象
成员变量 | 描述 |
---|---|
KEY | 当前Camera Client对应的CameraId |
VALUE | 当前Camera Client对象 |
cost | 打开当前Camera需要耗费的resource cost |
conflictingKeys | 与当前Camera无法同时打开的Camera Id列表 |
score | 打开当前Camera的客户端进程oom_adj score,这个值越大越容易被LMK干掉,前台进程这个值为0 |
ownerId | 打开当前Camera的客户端进程PID |
state | 打开当前Camera的客户端进程的状态,值越小优先级越高 |
isVendorClient | 打开当前Camera的客户端是否是Vendor进程 |
oomScoreOffset | 需要增加的oomScore偏移值(相当于在抢占逻辑中,降低自己的优先级) |
描述一颗CameraClient客户端进程的优先级
成员变量 | 描述 |
---|---|
score | 打开当前Camera的客户端进程oom_adj score,这个值越大越容易被LMK干掉,前台进程这个值为0 |
state | 打开当前Camera的客户端进程的状态,值越小优先级越高 |
isVendorClient | 打开当前Camera的客户端是否是Vendor进程 |
scoreOffset | 需要增加的oomScore偏移值(相当于在抢占逻辑中,降低自己的优先级) |
这个类重载了>,>=,<,<=
运算符,通过score和state来判断大小,ClientPriority值越小,优先级越高
bool operator< (const ClientPriority& rhs) const {
if (this->mScore == rhs.mScore) {
return this->mState < rhs.mState;
} else {
return this->mScore < rhs.mScore;
}
}
抢占逻辑
冲突的定义:
bool conflicting =
(curKey == key ||
i->isConflicting(key) ||
client->isConflicting(curKey));
疑问:
本文链接:http://so.lmcjl.com/news/16932/