Android核心分析之二十七Android GDI 之SurfaceFlinger之动态结构示

        SurfaceFlinger对象建立过程示意
  1 SurfaceSession的建立
  客户端请求建立Surface时,首先在要与SurfaceFlinger建立一个Session,然后再Session上建立一个Connection通过概念返回Bclient对象。WindowManagerService在添加第一个窗口前会检查SurfaceSession是否建立,如何没有建立,将会新建立一个实例来代表与SurfaceFlinger的一个连接。
  new SurfaceSession()@windowAddedLocked() @WindowManagerService.java。
  SurfaceSession的建立过程大部分是在C++ Native空间中完成的,表现在SurfaceSession的初始化函数:init()本地函数上。从下面的初始化函数可以看到:
  Init()<->SurfaceSession_init@android_view_Surface.cpp
  new SurfaceComposerClient
  SurfaceSession在C++Native空间建立一个SurfaceComposerClient实例。而该实例的建立实现了如下的与SurfaceFlinger通讯基础:
  (1)建立了代理SurfaceFlinger服务的代理服务端
  (2)建立了IsurfaceFlingerClient连接,在SurfaceFlinger端建立了对应的Client,并将BClient返回给WindowManagerService。
                       

asd.jpg (10 KB, 下载次数: 0)

下载附件  保存到相册

2012-3-22 12:59 上传


                         

qwe.jpg (46.71 KB, 下载次数: 0)

下载附件  保存到相册

2012-3-22 12:59 上传


  2 Surface的建立
  在WindowManagerService中WindowState类中,我们知道每个主窗口子啊需要是都需要建立一个Surface与之对应。win.createSurfaceLocked()@relayoutWindow
  Surface.java
  Init()< -- >Surface_init(…。,session,pid,dpy,w,h,format)@android_view_Surface.cpp
  SurfaceControl surface(client->createSurface
  在mClient的连接上:建立ISurface接口:
  M_Client->greateSurface(…)@
  Bclient ::createSurface(mId…)@SurfaceFlinger.cpp
  mFlinger->createSurface(clientid…。)
  createNormalSurfaceLocked
  *createNormalSurfaceLocked:建立一个Layer分配显示内存
  *createPushBuffersSurfaceLocked:建立一个LayBuffer但是不分配显示内存。
                           

qrt.jpg (90.01 KB, 下载次数: 0)

下载附件  保存到相册

2012-3-22 13:00 上传



转载于:https://www.cnblogs.com/kingshow123/p/androidcore27.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/399822.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

maven详解之坐标与依赖

2019独角兽企业重金招聘Python工程师标准>>> 看着简单而又复杂的pom.xml文件&#xff0c;看似熟悉&#xff0c;当自己编写的时候觉得简单&#xff0c;但是看人家项目的时候又觉得复杂的很&#xff0c;现在我们一起来分析这个pom文件。 Maven的坐标为各种构件引入了秩…

修改数据表部分字段方法封装-及-动态生成对象并动态添加属性

代码&#xff1a; //这样写的话&#xff0c;输入的是表的行对象&#xff0c;返回的是数据字典&#xff0c;可以直接用到更新操作里&#xff0c;public static Object AlterDate(Object tabledataobj){List<string> namelist new List<string>();List<Object>…

flask 上传 excel 并导入mysql

参考&#xff1a; flask 文件的上传下载和excel操作 Python 将Excel表格数据导入MySQL数据库

各种无线加密方式

所有的无线网络都提供某些形式的加密。但无线路由器、无线AP、或中继器的无线信号范围很难控制得准确&#xff0c;外界也是很大机会的能访问到该无线网络&#xff0c;一旦他们能访问该内部网络时&#xff0c;该网络中所有是传输的数据对他们来说都是透明的。如果这些数据都没经…

EF6源码学习-准备篇

现在对于。net开发人员来说EF已经很流行了&#xff0c;虽然我在2010年的时候就用过EF&#xff0c;也看过几本书&#xff0c;但是还没有仔细研究EF的code&#xff0c; 曾经也尝试阅读EF5的源代码&#xff0c;后来由于时间关系也没有坚持住。现在计划阅读EF6 code first部分的源码…

flask 对excel上传下载操作和文件处理

文件的下载 from flask import send_from_directory excel_bp.route(/get_attachment/<path:filename>) def get_attachment(filename): return send_from_directory(app.config[UPLOAD_FOLDER],filename,as_attachmentTrue) 文件的上传 &#xff08;1&#xff09;ht…

maven 本地包依赖包打进jar

1.声明依赖jar的时候使用 <dependency> <groupId>test</groupId> <artifactId>test</artifactId> <version>1.1</version> <scope>system</scope> <systemPath>${project.basedir}/lib/a.jar</systemPath> …

xml学习总结(四)

命名空间 &#xff08;1&#xff09;产生 问题&#xff1a;在不同的约束文档中&#xff0c;有不同好安逸的相同标记名称 解决办法 每个约束模式人当被赋予一个唯一的名称空间&#xff0c;每个名称空间可用一个唯一的URI表示 在XML实例中为来自不同模式文档的元素重甲不同的前缀…

Flask入门之上传文件到服务器

https://www.cnblogs.com/wongbingming/p/6802660.html flask 文件的上传下载和excel操作 Flask入门之上传文件到服务器 今天要做一个简单的页面&#xff0c;可以实现将文件 上传到服务器&#xff08;保存在指定文件夹&#xff09; #Sample.py # coding:utf-8from flask i…

ASP入门(十一)-Session小案例

一般来说&#xff0c;在实际开发中&#xff0c;对于 Session 对象使用最多的就是用户登录部分了&#xff0c;这个案例将简单模拟一个用户登录表单、用户是否登录的判断以及用户退出的一系列功能&#xff0c;它一共分了以下几个页面。 Login.asp (用户登录)、Check.asp (用户是否…

智能家居资源汇总

智能家居中红外控制系统通讯协议分析.pdf 智能家居中视频监控系统的设计与实现_林琳.caj 智能家居中视频监控系统设计_董翠英.pdf 智能家居系统——语音识别.pdf 智能家居系统中家庭网关的研究.pdf 智能家居系统中家电控制的研究与实现.kdh 智能家居系统语音遥控器的设计与实现…

sql语句--时间

1.时间的比较&#xff1a;时间是日期类型、字符串类型&#xff0c;long型&#xff0c;直接比较 例&#xff1a; SELECT * FROM student where date1 BETWEEN 2017-09-15 09:07:17 AND 2017-09-15 09:08:19 2.from_unixtime(long型date)&#xff1a;将时间戳转为时间 例&#xf…

JS 判断上传文件是否为EXCEL 文件

<SCRIPT language"JavaScript"> function checkform(o){var f_content form1.file.value;var fileextf_content.substring(f_content.lastIndexOf("."),f_content.length)fileextfileext.toLowerCase()if (fileext!.xls){alert("对不起&#x…

[转]打造自己的LINQ Provider(上):Expression Tree揭秘

概述 在.NET Framework 3.5中提供了LINQ 支持后&#xff0c;LINQ就以其强大而优雅的编程方式赢得了开发人员的喜爱&#xff0c;而各种LINQ Provider更是满天飞&#xff0c;如LINQ to NHibernate、LINQ to Google等&#xff0c;大有“一切皆LINQ”的趋势。LINQ本身也提供了很好的…

2017.9.15 postgresql批量插入造成冲突后执行更新

参考来自&#xff1a;https://stackoverflow.com/questions/40647600/postgresql-multi-value-upserts/46233907#46233907 1.before insert 2.insert sql 3.after insert 注意这里有两个容易出错的点&#xff1a;1.如果label字段不是必填的&#xff0c;要注意语法会不会出错。万…

所有程序员都应该遵守的11条规则

我是一个倾向于生活在规则下的人。 现在&#xff0c;这些规则大部分是我本人为自己设立的&#xff0c;但它们依然是规则。 我发现为自己创建规则可以让我过得更好&#xff0c;因为这样做可以提前决定一些事情&#xff0c;而不是要在匆忙中做出所有的决定。 我今天早上应该去健身…

mybatis动态SQL语句

三、动态SQL语句 有些时候&#xff0c;sql语句where条件中&#xff0c;需要一些安全判断&#xff0c;例如按性别检索&#xff0c;如果传入的参数是空的&#xff0c;此时查询出的结果很可能是空的&#xff0c;也许我们需要参数为空时&#xff0c;是查出全部的信息。这是我们可以…

git 脚本

echo $PWD message$1 content. if [ ! -n "$1" ] ;thenmessagedatemessage$message 推送到服务器echo $message elseecho "$1" figit add . git commit -m "$message " git push 转载于:https://www.cnblogs.com/whm-blog/p/7527271.html

composer安装特别慢的解决方案

https://www.cnblogs.com/djwhome/p/9322287.html composer安装特别慢的解决方案 在项目开发的时候 有许多新的依赖要按照 就需要用到composer 但是由于国内安装下载速度贼慢(国外的网站连接速度太慢&#xff0c;并且随时可能被墙) 安装一个excel扩展(composer require maatw…

好的积分不等式

转自 http://pxchg1200.is-programmer.com/?page7 转载于:https://www.cnblogs.com/zhangwenbiao/p/4738960.html