opengl
java源代码位于:frameworks/base/opengl/。
jni源代码位于:
- frameworks/base/core/jni/
- frameworks/base/core/jni/android/opengl
core/view
java源代码位于:frameworks/base/core/java/android/view/。
jni源代码位于:frameworks/base/core/jni/。
| java | jni | C++ |
| SurfaceSession | SurfaceComposerClient | |
| SurfaceControl | SurfaceComposerClient SurfaceControl | |
| Surface | Surface | |
| SurfaceTexture | JNISurfaceTextureContext | BufferQueue GLConsumer FrameAvailableListener |
| GraphicBuffer | GraphicBuffer | |
| GLES20Canvas | OpenGLRenderer | |
| DisplayEventReceiver | NativeDisplayEventReceiver | DisplayEventReceiver |
Java的SurfaceControl类还代理C++的SurfaceComposerClient类的静态方法。
core/hardware/display
java源代码位于:frameworks/base/core/java/android/hardware/display。
| 类 | 说明 |
| DisplayManagerGlobal | 与 display 服务通信,分派回调 |
| DisplayManager | 屏幕管理功能入口 |
| VirtualDisplay | 封装虚拟屏幕 |
| WifiDisplay | Wifi屏幕信息 |
| WifiDisplaySessionInfo | Wifi屏幕会话信息 |
| WifiDisplayStatus | Wifi屏幕记录,当前和已知的 |
services/display
实现服务“display”。
java源代码位于:frameworks/base/services/java/android/server/display。
主要类:
| 类 | 说明 |
| DisplayViewport | 定义逻辑屏幕到硬件屏幕的投影映射 |
| DisplayDeviceInfo | 屏幕信息 |
| DisplayDevice | 管理屏幕表面、图层栈、投影等信息 |
| DisplayAdapter | 创建屏幕,提供屏幕连接、断开通知机制Listener |
| LocalDisplayAdapter | 管理SurfaceFlinger内建屏幕 |
| HeadlessDisplayAdapter | 一个假的默认屏幕 |
| LogicalDisplay | 配置逻辑屏幕,可能作为内建屏幕的镜像 |
| VirtualDisplayAdapter | 创建、管理虚拟屏幕 |
| WifiDisplayController | 管理WifiP2pManager与WifiDisplayAdapter的交互 |
| WifiDisplayAdapter | 管理Wifi远程屏幕WifiDisplay |
| OverlayDisplayWindow | 管理一个覆盖窗口 |
| OverlayDisplayAdapter | 使用覆盖窗口模拟屏幕,用于调试 |
| PersistentDataStore | 管理服务的持久状态 |
| DisplayManagerService | 实现IDisplayManager |
DisplayManagerService创建各个DisplayAdapter,并侦听他们的设备事件。如果设备变化,通知WindowManager启动更新事务(更新到SurfaceFlinger)。
这篇博客深入探讨了Android系统的OpenGL ES在Java和JNI层的实现,包括SurfaceControl、SurfaceComposerClient等关键组件。同时,它也介绍了Android硬件显示系统,如DisplayManagerService如何管理屏幕设备,并协调WindowManager与SurfaceFlinger的更新。此外,博客还涉及到了虚拟屏幕、WifiDisplay等相关概念。
699

被折叠的 条评论
为什么被折叠?



