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类图相关推荐

  1. 最全Pycharm教程(43)——Pycharm扩展功能之UML类图使用 代码结构

    版权声明:本文为博主原创文章,转载时麻烦注明源文章链接,谢谢合作 https://blog.csdn.net/u013088062/article/details/50353202 1.什么是UML ...

  2. idea uml图怎么画_有了IDEA中的这款插件,流程图、类图轻松搞定,简直神器

    总有童鞋问,这个流程图图怎么绘制的,这个UML类图用什么工具做的等等,今天给大家推荐一款idea插件PlantUml,来帮助大家快速快速完成绘制. PlantUml是什么 PlantUml是一个支持快 ...

  3. idea添加database插件_IDEA高级玩法:集成JIRA、UML类图插件、SSH、FTP、Database管理......

    优质文章,第一时间送达 上一篇: 下一篇:(已修复) 作者: 菩提树下的杨过 出处: http://yjmyzz.cnblogs.com dea还有很多高大上的功能,易用性几乎能与vs.net媲美,反 ...

  4. UML类图新手入门级介绍

    UML类图新手入门级介绍 看了大话设计模式,觉得很生动形象,比较适合于我这种初学者理解面向对象,所以就记录了一下. 举一个简单的例子,来看这样一副图,其中就包括了UML类图中的基本图示法. 首先,看动 ...

  5. 从零开始单排学设计模式「UML类图」定级赛

    阅读本文大概需要 3.5 分钟. 本篇是设计模式系列的开篇,虽然之前也写过相应的文章,但是因为种种原因后来断掉了,而且发现之前写的内容也很渣,不够系统. 所以现在打算重写,加上距离现在也有一段时间了, ...

  6. 【冷门实用小工具】JAVA和C#轻量级的UML图绘制工具NClass,UML类图编辑器免安装版【亲测有效】

    下载地址:NClass下载地址 NClass是一款免费的UML图绘制工具,它很小巧轻量级,解压之后大小不到2M,便于携带和使用,是很实用UML绘制工具. 功能介绍: 1.支持完整的C#和Java支持多 ...

  7. IDEA高级用法:集成JIRA、UML类图插件、SSH、FTP、Database管理...

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:菩提树下的杨过   出处:http://yjmyzz.cnb ...

  8. 怎么用IDEA快速查看类图关系?

    来自:烟雨星空 做Java开发的,现在普遍都用上idea了.可以说,idea是当之无愧的Java开发神器.如果,你现在还没用idea,那肯定是你还没有感受过它的强大. 好了,话不多说,今天的主题主要是 ...

  9. VS 2019 查看类图 UML 图

    1.安装 最新版本的VS 2019默认是不安装类图查看器的,需要在Visual Studio Installer中进行安装. 勾选Visual Studio扩展开发,选择右面的类设计器 安装完成后就可 ...

最新文章

  1. 使用MUI/html5plus集成微信支付需要注意的几点问题
  2. 迄今看到的较为客观的一篇分析编程语言的文章
  3. js简单验证码的生成和验证
  4. 【python】pycharm启动 一直index,无法运行
  5. java query object_java queryforobject
  6. 自学python买什么教材-从自学到编写大学python教材——低调quot;虫师”谢乾坤
  7. Leetcode 817.链表组件
  8. 华为的CPU怎样才能卖掉
  9. Dxg——[版本管理工具Git SVN]开发笔记整理分类合集【所有的相关记录,都整理在此】
  10. 【车间调度】基于matlab改进的鲸鱼算法求解双目标柔性车间调度问题【含Matlab源码 026期】
  11. 水系图一般在哪里找得到_厦大赵金保团队EnSM:新型聚阴离子锌盐水凝胶电解质实现具有高择优取向沉积的超稳定、高可逆水系锌金属负极...
  12. 文件系统性能测试工具 FIO工具
  13. ubuntu磁盘分区与挂载
  14. 求方差FPGA的实现方法
  15. xp仿ios主题_三合一xp仿苹果电脑桌面主题
  16. 普通pc机的轻连接到底能建多少?
  17. Java堆空间(Heap Space)
  18. 【小程序】生成二维码
  19. vscode 取消拉去变基_开发工具之 Git 篇
  20. Python练习14:天天向上的力量I

热门文章

  1. Python基础-高级变量类型
  2. SpringMVC的URL路径映射@RequestMapping
  3. Windows Server 2008 优化
  4. c++ opencv实现区域填充_利用opencv之为图像添加边框
  5. linux php 中文乱码解决,Linux中文乱码如何解决
  6. caged系统pdf_热电材料的应用和研究进展.pdf
  7. 正则除了几个汉字的其它汉字_理解汉字的几个层次
  8. java代码块执行顺序_JAVA代码块执行顺序分析测试
  9. inception mysql 使用_mysql 审核引擎 goInception 的基本使用
  10. mysql 5.7参数配置_MySQL 5.7-新增配置参数