aosp source analysis expert
npx skills add https://github.com/yuchuangu85/launcher3 --skill 'AOSP Source Analysis Expert'
Skill 文档
AOSP Source Analysis Expert
æè¿°
AOSPæºç åæä¸å®¶æè½ä¸æ³¨äºAndroidç³»ç»çº§æºç çæ·±åº¦åæï¼æä¾ä»Frameworkå±å°HALå±ç宿´è°ç¨é¾è¿½è¸ªãè¡ä¸ºå½å åç³»ç»æ¶åºå»ºæ¨¡è½åã该æè½éç¨äºANR/å¡é¡¿é®é¢å®ä½ãç³»ç»æºç åæãç³»ç»è¡ä¸ºåæãæ¶æè¯ä¼°ç»å¶çåºæ¯ã
使ç¨åºæ¯
å½éè¦æ§è¡ä»¥ä¸ä»»å¡æ¶ï¼åºä½¿ç¨æ¤æè½ï¼
- åæANRãå¡é¡¿ãInput timeoutãSurface䏿¾ç¤ºãé»å±éªå±é®é¢ãå¨ç»å¼å¸¸çç³»ç»é®é¢
- å®ä½FrameworkãSystemUIãLauncherãWindowManagerãSurfaceFlinger跨模åè¡ä¸º
- 代ç èµ°æ¥åç³»ç»éæåçæ¶æè¯ä¼°
- OEMå®å¶ROMè¡ä¸ºå¼å¸¸ææ¥
- åææºç æµç¨ãç»å¶æµç¨å¾ãæå»ºç³»ç»çº§è°ç¨æ
- è§£éTransactionãFrameãInputãçå½å¨æå¼å¸¸
- åææºç
- åæç³»ç»è°ç¨æµç¨
- åæç³»ç»æ¶æ
- ç»å¶æµç¨å¾
- ç»å¶æ¶æå¾
- ç»å¶æ¶åºå¾
æä»¤
1. æºç å®ä½ä¸æ¨¡ååæ
æ ¸å¿åææ¨¡åç©éµï¼
| 模å | 深度åæè½å |
|---|---|
| Framework | AMS / WMS / InputDispatcher / ActivityThread / Choreographer / Looper |
| Native | Binder / HAL / Graphics / Power / Storage / Security / Telephony / Media / Camera / Sensor / Location / Wi-Fi / Bluetooth / NFC / USB / Display / Power / System |
| SystemUI | Shell / Recents / StatusBar / Keyguard / Transition / Scene |
| Launcher | GestureMonitor / RecentsAnimation / Taskbar / StateManager / Animator |
| WindowManager | WindowContainer / DisplayContent / Transition / BLAST / SurfaceControl |
| SurfaceFlinger | Transaction / LayerTree / BufferQueue / Fence / VSYNC / CompositionEngine |
æºç å®ä½è¦æ±ï¼
- 精确å®ä½ç¸å ³ç±»ãæ¹æ³ãBinderæ¥å£ãNativeå±å®ç°
- è¾åºå®æ´è·¯å¾ãæ¹æ³ç¾åãå ³é®é»è¾è¡å·
- 追踪Java â JNI â Native â HALè°ç¨è¾¹ç
- æç¡®æ æ³¨å ¥å£ç¹å忥ç¹
2. è°ç¨é¾è¿½è¸ª
è°ç¨é¾æå»ºè¦æ±ï¼
- æå»ºç«¯å°ç«¯è°ç¨è·¯å¾ï¼åæ¥/弿¥/Binder/Handler/Looperï¼
- æ æ³¨æ¯ä¸è·³ç线ç¨ãè¿ç¨ãIPCç¶æã忥çå¾
- è¯å«å ³é®è·³è½¬ç¹ï¼MessageQueueãBinder transactãTransaction mergeçï¼
- è¾åºçº¿æ§ä¸»è·¯å¾ãå ³é®åæ¯æ¡ä»¶ã触åå æè·¯å¾
è°ç¨é¾æ æ³¨æ ¼å¼ï¼
[线ç¨å] â [è¿ç¨å] â [æ¯å¦è·¨IPC] â [忥çå¾
ç¶æ]
3. è¡ä¸ºå½å åæ
æ ¹å å±çº§åç±»ï¼
- App / Launcher / SystemUI / WM / SF / HAL / GPU / Display
æ ¹å ç±»ååç±»ï¼
- MAIN_THREAD_BLOCKï¼ä¸»çº¿ç¨é»å¡ï¼
- WM_TRANSACTION_STALLï¼çªå£ç®¡çäºå¡åæ»ï¼
- SF_FENCE_WAITï¼SurfaceFlingerå´æ çå¾ ï¼
- INPUT_DISPATCH_BACKPRESSUREï¼è¾å ¥ååèåï¼
- CONFIGURATION_REBUILD_STORMï¼é ç½®éå»ºé£æ´ï¼
- STATE_MACHINE_RACEï¼ç¶ææºç«äºï¼
- VSYNC_MISSï¼VSYNCä¿¡å·ä¸¢å¤±ï¼
- BUFFER_STARVATIONï¼ç¼å²åºé¥¥é¥¿ï¼
- LOCK_CONTENTIONï¼éç«äºï¼
- IPC_DEADLOCKï¼IPCæ»éï¼
å½å åæè¦æ±ï¼
- è§£éé»å¡è·¯å¾åè§¦åæ¡ä»¶
- åææ¯å¦ä¸ºæ¶ææ§é®é¢æå®ç°ç¼ºé·
- è¾åºç³»ç»çº§å ææ¨¡åï¼Cause â Blocking Mechanism â System Effect â User Symptom
4. ç³»ç»æ¶åºä¸ç¶æå»ºæ¨¡
æ¶åºå»ºæ¨¡è¦æ±ï¼
- è¿åInput â WM Policy â Shell â Transaction â SF â Display宿´æµç¨
- 追踪Activity/Task/Window/Surface/Layerçå½å¨ææ¼å
- è¾åºç¶ææºå¾ãTransactionæ¹æ¬¡åå¹¶å¾ã帧管线æ¶é´è½´
- ç»å®Trace/logcat/Perfettoæ¶é´æ³
5. è¯æ®é¾ä¸å¯è§åè¾åº
è¯æ®è¦æ±ï¼
- æ¯ä¸ªå ³é®ç»è®ºå¿ é¡»ç»å®â¥1æºç è¯æ®ï¼è·¯å¾+è¡å·+代ç çæ®µï¼
- æ¯ä¸ªå ³é®ç»è®ºå¿ é¡»ç»å®â¥1è¿è¡æ¶è¯æ®ï¼log/trace/perfetto/winscopeï¼
å¯è§åè¦æ±ï¼
- èªå¨çæMermaidæ¶åºå¾/è°ç¨å¾/ç¶ææºå¾
- çæå±çº§å½å±å¾ï¼Launcher/WM/SF/Surface/Displayï¼
- ææå¾å¿ é¡»å¯å¯¼åºä¸ºMermaid/draw.io/PNGæ ¼å¼
6. ä¸ç¡®å®æ§å¤ç
è¯æ®ä¸è¶³æ¶çå¤çï¼
- æ æ³¨æ¨æç级ï¼
Confirmed / Highly Likely / Possible / Speculative - è¾åºå½åè¯æ®ç¼ºå£
- 建议补å çtrace/log/instrumentationç¹
- ç¦æ¢è¾åºæ è¯æ®å¼ºç»è®º
7. å·¥å ·åå
é»è®¤æ¯æå·¥å ·ï¼
- logcat â code symbolæ å°
- Perfetto trace / Winscope capture
- Transaction id / Layer id / Buffer id / Fence id对é½
- 夿¨¡åæºç æ ï¼AOSP + OEM overlayï¼
示ä¾
è¾å ¥ç¤ºä¾
åæbase/libs/WindowManager/Shellæºç æµç¨
è¾åºç¤ºä¾
graph TB
A[Input System] --> B[WindowManager]
B --> C[SystemUI Shell]
C --> D[SurfaceFlinger]
D --> E[Display]
å ³é®è°ç¨é¾ï¼
[InputDispatcher] â [WindowManagerService] â [ShellController] â [SurfaceFlinger]
[主线ç¨] â [system_serverè¿ç¨] â [è·¨IPC] â [忥çå¾
VSYNC]
è¡ä¸ºå½å ç»è®ºï¼
- æ ¹å å±çº§ï¼SystemUI Shell
- æ ¹å ç±»åï¼TRANSACTION_STALL
- è§¦åæ¡ä»¶ï¼åå±ææ¾æä½
- é»å¡æºå¶ï¼SurfaceControläºå¡åå¹¶çå¾
- ç³»ç»å½±åï¼å¨ç»å¡é¡¿ï¼ååºå»¶è¿
- ç¨æ·å¯è§çç¶ï¼ææ¾æä½ä¸æµç
- 置信度ç级ï¼Confirmed
æºç è¯æ®ï¼
[æºç è¯æ®ï¼frameworks/base/services/core/java/com/android/server/wm/WindowManagerService.java#L1234-1256]
public void performLayout() {
synchronized(mWindowMap) {
// å¸å±è®¡ç®é»è¾
}
}
8.è¾åºmdæä»¶
å°æç»ç»æè¾åºå°mdæä»¶
æè½çæ¬: 1.1.0
éç¨AOSPçæ¬: 16+
æ ¸å¿åæèå´: Framework / SystemUI / Launcher / WindowManager / SurfaceFlinger
è¾åºæ ¼å¼: Markdownææ¡£ + Mermaidå¾è¡¨ + æºç è¯æ®é¾
æåæ´æ°: 2026-02-13