surfaceflinger类图
frameworks/base/libs/ui 和 frameworks/base/libs/surfaceflinger
ISurface 定义了基础的Surface接口,供图形系统客户端 (应用)和server端(即surfaceflinger)交互。ISurface.cpp
BpSurface是ISurface的派生类,提供接口供server 调用客户端功能;ISurface.cpp
BnSurface是ISurface的另一个派生类,提供接口供客户端调用server功能。当 server 收到来自客户端 (通过BnSurace)的调用请求后,如registerBuffers, postBuffer等,BnSurface::onTransact被触发。ISurface.h
Surface (LayerBaseClient的私有类)是BnSurface的派生类。layerBase.h
SurfaceBuffer (SurfaceBuffer的私有类)是Surface的派生类。layerBuffer.h
ISurfaceComposer 定义了基础的接口,供客户端和server端交互。ISurfaceComposer.h
BpSurfaceComposer是一个派生类,提供接口供server调用客户端功能;ISurfaceComposer.cpp
BnSurfaceComposer是另一派生类,提供接口供客户端调用server功能。类 SurfaceFlinger 由BnSurfaceComposer派生而来。ISurfaceComposer.h
SurfaceComposerClient直接供客户端使用,调用ISurface (BnSurface)和 ISurfaceComposer (BnSurfaceComposer)以及 ISurfaceFlingerClient 接口,与server交互。SurfaceComposerClient.h
BClient 派生自ISurfaceFlingerClient (BnSurfaceFlingerClient),调用server的createSurface,真正创建一个surface。每个surface对应一个layer.surfaceflinger.h
egl_native_window_t 定义了一个本地window类 。这个类提供了对本地window 的所有描述以及用于egl (opengl 与本地图形系统的接口)操作本地windwo的所有方法。eglnatives.h
EGLNativeSurface是egl_native_window_t的一个派生类。EGLNativeSurface.h
EGLDisplaySurface是EGLNativeSurface的派生类。 EGLDisplaySurface 是一个非常重要的类,在这个类里,真正打开framebuffer设备(/dev/graphics/fb0 或者/dev/fb0),并将这个设备封装成EGLDisplaySurface的形式供server使用。函数mapFrameBuffer打开framebuffer, 创建两个缓冲区,(一个是on screen front 缓冲区, 另一个back buffer, 可能位于offscreen framebuffer,也可能位于系统内存)。 函数swapBuffers将back buffer内容拷贝到front buffer中。
DisplayHardware 类中初始化了egl系统,并为本地窗口对象EGLDisplaySurface 创建了对应的EGLSurface 对象。surfaceflinger 使用DisplayHardware去和本地窗口打交道。
研究一个surface如何创建的关键路径如下:
1. frameworks/base/core/java/android/view/Surface.java — Surface::Surface ()。
2. frameworks/base/core/jni/android_view_Surface.cpp — Surface_init ()。
在这个函数中SurfaceComposerClient 对象被创建。
3. frameworks/base/libs/ui/SurfaceComposerClient.cpp — SurfaceComposerClient::SurfaceComposerClient ().
这个函数非常重要,在这里建立了client和server之间的桥梁。通过函数_get_surface_manager()获得了一个指向 server的IBinder 对象(具有ISurfaceComposer接口),之后通过这个IBinder就可以跨进程访问Server的功能。接着调用 ISurfaceComposer::createConnection()创建并返回了一个ISurfaceFlingerClient的 IBinder。
4. frameworks/base/libs/ui/SurfaceComposerClient.cpp — SurfaceComposerClient::createSurface().
这个函数中,利用前面获得的ISurfaceFlingerClient的IBinder,调用其createSurface接口。
5.frameworks/base/libs/surfaceflinger/SurfaceFlinger.cpp — BClient::createSurface ()。
BClient由ISurfaceFlingerClient派生而来。
6.frameworks/base/libs/surfaceflinger/SurfaceFlinger.cpp — SurfaceFlinger:: createSurface()。
这个函数为Surface创建一个对应的Layer。
上述关键路径中,1,2,3,4运行于client进程中,而5,6运行与server进程中。server作为一个service提供给client访问。
与图形相关的代码分析
与图形相关的代码主要位于下列目录:
1. frameworks/base/graphics/java/android/graphics
2.frameworks/base/core/java/android/view
3.frameworks/base/core/java/android/widget
4.frameworks/base/opengl/
5.frameworks/base/libs/ui
6.frameworks/base/libs/surfaceflinger
7.frameworks/base/core/jni/android/graphics
8.frameworks/base/core/jni/android/opengl
9.frameworks/base/core/jni/android/android_view_*.cpp
10.external/skia
android.graphics, android.view和android.widget
1.frameworks/base/graphics/java/android/graphics
2.frameworks/base/core/java/android/view
3.frameworks/base/core/java/android/widget
android.graphics, android.view和android.widget功能和其他类似的图形库如 Qt/Gtk+差不多,分别提供基本的图形原语(如画点画线,设置图形上下文等),事件机制,以及开发图形用户界面的控件等。canvas 用于开发2D图形, Surface 代表一个可供图形系统绘制的surface。可在其上绘制2D活3D图形。
frameworks/base/opengl/
这个目录包含opengel的接口以及软件实现。在
http://developer.android.com/guide/topics/graphics/opengl.html
有详细介绍如何使用android.opengl开发3d graphics。
external/skia
skia与cairo功能相当,封装底 层的图形硬件,为上面的图形库提供最基础的操作图形硬件的原语。关于 skia 可参考《淺談 Google Skia 圖形處理引擎》2和 《Android 的图形引擎 Skia》3两篇文章。
frameworks/base/libs/ui 和 frameworks/base/libs/surfaceflinger
ISurface 定义了基础的Surface接口,供图形系统客户端 (应用)和server端(即surfaceflinger)交互。
BpSurface是ISurface的派生类,提供接口供server 调用客户端功能;
BnSurface是ISurface的另一个派生类,提供接口供客户端调用server功能。当 server 收到来自客户端 (通过BnSurace)的调用请求后,如registerBuffers, postBuffer等,BnSurface::onTransact被触发。
Surface (LayerBaseClient的私有类)是BnSurface的派生类。
SurfaceBuffer (SurfaceBuffer的私有类)是Surface的派生类。
ISurfaceComposer 定义了基础的接口,供客户端和server端交互。
BpSurfaceComposer是一个派生类,提供接口供server调用客户端功能;
BnSurfaceComposer是另一派生类,提供接口供客户端调用server功能。类 SurfaceFlinger 由BnSurfaceComposer派生而来。
SurfaceComposerClient直接供客户端使用,调用ISurface (BnSurface)和 ISurfaceComposer (BnSurfaceComposer)以及 ISurfaceFlingerClient 接口,与server交互。
BClient 派生自ISurfaceFlingerClient (BnSurfaceFlingerClient),调用server的createSurface,真正创建一个surface。每个surface对应一个layer.
egl_native_window_t 定义了一个本地window类 。这个类提供了对本地window 的所有描述以及用于egl (opengl 与本地图形系统的接口)操作本地windwo的所有方法。
EGLNativeSurface是egl_native_window_t的一个派生类。
EGLDisplaySurface是EGLNativeSurface的派生类。 EGLDisplaySurface 是一个非常重要的类,在这个类里,真正打开framebuffer设备(/dev/graphics/fb0 或者/dev/fb0),并将这个设备封装成EGLDisplaySurface的形式供server使用。函数mapFrameBuffer打开framebuffer, 创建两个缓冲区,(一个是on screen front 缓冲区, 另一个back buffer, 可能位于offscreen framebuffer,也可能位于系统内存)。 函数swapBuffers将back buffer内容拷贝到front buffer中。
DisplayHardware 类中初始化了egl系统,并为本地窗口对象EGLDisplaySurface 创建了对应的EGLSurface 对象。surfaceflinger 使用DisplayHardware去和本地窗口打交道。
jni
7.frameworks/base/core/jni/android/graphics
8.frameworks/base/core/jni/android/opengl
9.frameworks/base/core/jni/android/android_view_*.cpp
这些目录下的代码在Java层的graphics 组件和native (c++)组件之间衔接,将java层的功能调用转换到对应的本地调用。
hardware/libhardware实现了HAL(Hardware Abstraction Layer)层,copybit device是其中一个模块。
surfaceflinger类图相关推荐
- 最全Pycharm教程(43)——Pycharm扩展功能之UML类图使用 代码结构
版权声明:本文为博主原创文章,转载时麻烦注明源文章链接,谢谢合作 https://blog.csdn.net/u013088062/article/details/50353202 1.什么是UML ...
- idea uml图怎么画_有了IDEA中的这款插件,流程图、类图轻松搞定,简直神器
总有童鞋问,这个流程图图怎么绘制的,这个UML类图用什么工具做的等等,今天给大家推荐一款idea插件PlantUml,来帮助大家快速快速完成绘制. PlantUml是什么 PlantUml是一个支持快 ...
- idea添加database插件_IDEA高级玩法:集成JIRA、UML类图插件、SSH、FTP、Database管理......
优质文章,第一时间送达 上一篇: 下一篇:(已修复) 作者: 菩提树下的杨过 出处: http://yjmyzz.cnblogs.com dea还有很多高大上的功能,易用性几乎能与vs.net媲美,反 ...
- UML类图新手入门级介绍
UML类图新手入门级介绍 看了大话设计模式,觉得很生动形象,比较适合于我这种初学者理解面向对象,所以就记录了一下. 举一个简单的例子,来看这样一副图,其中就包括了UML类图中的基本图示法. 首先,看动 ...
- 从零开始单排学设计模式「UML类图」定级赛
阅读本文大概需要 3.5 分钟. 本篇是设计模式系列的开篇,虽然之前也写过相应的文章,但是因为种种原因后来断掉了,而且发现之前写的内容也很渣,不够系统. 所以现在打算重写,加上距离现在也有一段时间了, ...
- 【冷门实用小工具】JAVA和C#轻量级的UML图绘制工具NClass,UML类图编辑器免安装版【亲测有效】
下载地址:NClass下载地址 NClass是一款免费的UML图绘制工具,它很小巧轻量级,解压之后大小不到2M,便于携带和使用,是很实用UML绘制工具. 功能介绍: 1.支持完整的C#和Java支持多 ...
- IDEA高级用法:集成JIRA、UML类图插件、SSH、FTP、Database管理...
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:菩提树下的杨过 出处:http://yjmyzz.cnb ...
- 怎么用IDEA快速查看类图关系?
来自:烟雨星空 做Java开发的,现在普遍都用上idea了.可以说,idea是当之无愧的Java开发神器.如果,你现在还没用idea,那肯定是你还没有感受过它的强大. 好了,话不多说,今天的主题主要是 ...
- VS 2019 查看类图 UML 图
1.安装 最新版本的VS 2019默认是不安装类图查看器的,需要在Visual Studio Installer中进行安装. 勾选Visual Studio扩展开发,选择右面的类设计器 安装完成后就可 ...
最新文章
- 使用MUI/html5plus集成微信支付需要注意的几点问题
- 迄今看到的较为客观的一篇分析编程语言的文章
- js简单验证码的生成和验证
- 【python】pycharm启动 一直index,无法运行
- java query object_java queryforobject
- 自学python买什么教材-从自学到编写大学python教材——低调quot;虫师”谢乾坤
- Leetcode 817.链表组件
- 华为的CPU怎样才能卖掉
- Dxg——[版本管理工具Git SVN]开发笔记整理分类合集【所有的相关记录,都整理在此】
- 【车间调度】基于matlab改进的鲸鱼算法求解双目标柔性车间调度问题【含Matlab源码 026期】
- 水系图一般在哪里找得到_厦大赵金保团队EnSM:新型聚阴离子锌盐水凝胶电解质实现具有高择优取向沉积的超稳定、高可逆水系锌金属负极...
- 文件系统性能测试工具 FIO工具
- ubuntu磁盘分区与挂载
- 求方差FPGA的实现方法
- xp仿ios主题_三合一xp仿苹果电脑桌面主题
- 普通pc机的轻连接到底能建多少?
- Java堆空间(Heap Space)
- 【小程序】生成二维码
- vscode 取消拉去变基_开发工具之 Git 篇
- Python练习14:天天向上的力量I
热门文章
- Python基础-高级变量类型
- SpringMVC的URL路径映射@RequestMapping
- Windows Server 2008 优化
- c++ opencv实现区域填充_利用opencv之为图像添加边框
- linux php 中文乱码解决,Linux中文乱码如何解决
- caged系统pdf_热电材料的应用和研究进展.pdf
- 正则除了几个汉字的其它汉字_理解汉字的几个层次
- java代码块执行顺序_JAVA代码块执行顺序分析测试
- inception mysql 使用_mysql 审核引擎 goInception 的基本使用
- mysql 5.7参数配置_MySQL 5.7-新增配置参数