Android SurfaceFlinger导读(01) surfaceFlinger谁写的?他还干了什么?

该系列文章总纲链接:Android GUI系统之SurfaceFlinger 系列文章目录


1 surfaceFlinger作者简介

surfaceFlinger是一个名为Mathias Agopian的工程师编写的。作者Mathias Agopian有着BE和PalmSource的工作经历,于2006年加入了Android团队。他是一个晚睡晚起的人,常常很晚到公司,也很晚才离开。他是一个喜欢专注写代码而尽量避开所有会议的人。他是一个童年时期就学习电脑编程,并有所成就的人(曾为雅达利猎鹰开发图形和音频程序,并未计算机杂志撰写文章,后为Be开发了打印机驱动程序)。刚刚加入Android时,Mathias的工作主要是开发操作系统底层的东西,他曾对memcpy和memset进行优化,通过手写汇编代码来提升memcpy的效率,使性能有了巨大地提升。

2 PixelFlinger,平台思维的经典之作

对于图形系统而言,Mathias主要是实现surfaceFlinger的功能,用于显示应用程序生成的图形缓冲区,而这个系统当时需要依赖的底层功能当时还没有,所以需要从这些东西开始写。当时,Mathias假设surfaceFlinger需要用到GPU,将会使用OpenGLES来实现底层功能。此时问题就来了,没有GPU,又要用到GPU,这该怎么办?一般的产品思维是开发周期紧,所以我们要优先实现相关功能,等以后再调整,这是一个常规的解决方案,但还不够好。Mathias是图形方面的技术人员,对GPU渲染的趋势是有一定了解的,他预感到GPU会成为未来手机的主流标配,因此他做了这样一个决定:没有GPU硬件,那就虚拟一个GPU出来,这个虚拟的GPU软件可以理解为pixelFlinger,然后通过OpenGLES发送指令给这个pixelFlinger实现会长功能。也许这个决策会让短期内的工作量加大,但长期来看,这个技术的选型如果正确将会大大的减少整体的工作量,因为将要适配的产品并不只是当下这一款。

当然pixelFlinger的存在时间并不长,毕竟后来被GPU直接取代了。它的重要性不在于提供了什么功能,而在于它对平台的意义,构建具有前瞻性的功能,推动架构和生态系统进入硬件加速的未来,这一点无可匹敌。

3 SurfaceFlinger设计本质和原则

有了PixelFlinger和OpenGLES,就开始构建SurfaceFlinger了。SurfaceFlinger设计的本质就是应用程序图形操作和OpenGLES层之间的粘合剂,负责传递缓冲区并显示给用户。

为了实现流畅的图形渲染,设计原则之一就是确保任何一个应用都不会导致其他应用程序的渲染性能受到影响。所以应用程序将自己的图形绘制到缓冲区,SurfaceFlinger从那里开始接手工作。这个可以理解为今天代码中的dequeue和queue的操作的起源。

4 HWC(hardware Composer)

Mathias不仅搞定了SurfaceFlinger,还搞了一个硬件合成器HWC,SurfaceFlinger将UI绘制到窗口上,但绘制的像素由好多个窗口组成。因此就需要HWC需要将这些窗口以一种合理的方式显示出来。HWC将不同的窗口发送到不同的图层,将这些图层组合在一起并显示出来,让他们看起来是一个无缝衔接的屏幕,但实际上就是几个不同进程的产物、比如状态栏、导航栏、背景,多个应用等。

那么为什么使用HWC而不是GPU呢?因为HWC更省电,也更适合做单一的合成工作。但GPU耗电量大,同时对于游戏/高耗能3D渲染的应用,GPU的资源也很宝贵。

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

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

相关文章

【云原生】k8s-----集群调度

目录 1.k8s的list-watch机制 1.1 list-watc机制简介 1.2 根据list-watch机制,pod的创建流程 2.scheduler的调度策略 2.1 scheduler的调度策略简介 2.2 Scheduler预选策略的算法 2.3 Scheduler优选策略的算法 3. k8s中的标签管理及nodeSelector和nodeName的 调…

Hadoop的HDFS高可用方案

一、Hadoop高可用简介 Hadoop 高可用 (High Availability) 分为 HDFS 高可用和 YARN 高可用,两者的实现基本类似,但 HDFSNameNode 对数据存储及其一致性的要求比 YARN ResourceManger 高得多,所以它的实现也更加复杂 1、HDFS系统高可用简介…

八大排序(二)--------冒泡排序

本专栏内容为:八大排序汇总 通过本专栏的深入学习,你可以了解并掌握八大排序以及相关的排序算法。 💓博主csdn个人主页:小小unicorn ⏩专栏分类:八大排序汇总 🚚代码仓库:小小unicorn的代码仓库…

如何在Ubuntu 18.04上安装Go并设置本地编程环境

引言 Go是在谷歌的挫折中诞生的编程语言。开发人员不得不不断地选择一种执行效率高但需要长时间编译的语言,或者选择一种易于编程但在生产环境中运行效率低的语言。Go被设计为同时提供这三种功能:快速编译、易于编程和在生产中高效执行。 虽然Go是一种…

Mac cocoapod 3分钟安装教程( 国内镜像源方法)

参考链接:2023最新总结,Mac下使用Homebrew完全指南! - 知乎 1.打开终端, 执行: /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" 2.运行,可以选择清…

Java多线程篇(3)——线程池

文章目录 线程池ThreadPoolExecutor源码分析1、如何提交任务2、如何执行任务3、如何停止过期的非核心线程4、如何使用拒绝策略 ScheduledThreadPoolExecutor源码分析 线程池 快速过一遍基础知识 7大参数 corePoolSize : 核心线程数 maximumPoolSize: 最…

Java基于SpringBoot的藏区特产销售系统的研究与实现

今天为大家带来的是基于 Java SpringBootVue 的藏区特产销售系统,大家有兴趣的可以看一下 博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W,Csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 文章目…

CSS 表格:Table

文章目录 CSS 表格表格边框折叠边框表格高度和宽度表格文字对齐表格填充表格颜色设置表格标题的位置 CSS 表格 CSS 表格属性可以用来改变表格的样式。 比如,以下代码会把表格的边框变为红色,且每个单元格之间有一条竖线: table {border-co…

提升效率,实现组织与创造的完美结合——Agenda for Mac

现代快节奏的生活中,时间管理和任务协调变得尤为关键。如果您正在寻找一个功能全面、简洁易用的日历、任务和笔记管理工具,那么Agenda for Mac定会成为您的得力助手。这款强大的应用程序将帮助您提高工作效率,实现组织与创造的完美结合。 Ag…

重构从现在开始

1 前言 重构,是一名程序员必备的职业技能。然而,大多数人对于重构的认知仍然停留在项目中期为了提升代码质量而做的并非不可不做的操作。对于重构的重要性和含义并没有充分的认知。 本文,笔者将结合自身经验和阅读《重构,改善既…

北邮22级信通院数电:Verilog-FPGA(2)modelsim北邮信通专属下载、破解教程

北邮22信通一枚~ 跟随课程进度更新北邮信通院数字系统设计的笔记、代码和文章 持续关注作者 迎接数电实验学习~ 获取更多文章,请访问专栏: 北邮22级信通院数电实验_青山如墨雨如画的博客-CSDN博客 目录 1.下载 2.解压打开 3.modelsim初安装 4.…

设计模式:策略模式、工厂模式、模板模式混合使用

目录 优缺点总结 这次我们利用模板模式固定下策略模式的骨架,工厂模式提供注册策略,获取策略的方法,提供一个三个设计模式的例子。 abstract class Template{// 模板方法,定义了算法的骨架public void templateMethod() {System.o…

Java代码质量评估工具

概述 Java代码的质量评估主要包括代码的可维护性、健壮性、以及在运行时能达到既定的性能目标,可维护性主要包括代码的可读性、在关键的代码上提供详细注释、在设计类、方法以及代码逻辑时符合设定的编码规范,健壮性主要包括编写代码时应使用常用的设计…

k8s(Kubernetes)集群部署--使用 kubeadm方式部署

k8s集群部署--使用 kubeadm方式部署 一、测试所需环境(三台均要执行)二、配置准备(三台均要执行)1. 重命名hostname、添加hosts2. 关闭防火墙、selinux与swap3. 添加网桥过滤及内核转发配置文件4.同步时间5.安装ipset及ipvsadm 三…

Mysql002:(库和表)操作SQL语句

目录: 》SQL通用规则说明 SQL分类: 》DDL(数据定义:用于操作数据库、表、字段) 》DML(数据编辑:用于对表中的数据进行增删改) 》DQL(数据查询:用于对表中的数…

【Verilog教程】2.3 Verilog 数据类型

Verilog 最常用的 2 种数据类型就是线网(wire)与寄存器(reg),其余类型可以理解为这两种数据类型的扩展或辅助。 线网(wire) wire 类型表示硬件单元之间的物理连线,由其连接的器件输…

Docker 部署 Redis 服务

拉取最新版本的 Redis 镜像: $ sudo docker pull redis:latest在本地预先创建好 data 目录和 conf/redis.conf 文件。 使用以下命令来运行 Redis 容器: $ sudo docker run -itd --name redis --privilegedtrue -p 6379:6379 -v /home/ubuntu/docker/redis/data:/data -v /ho…

代理IP与Socks5代理:跨界电商智能爬虫的引擎与安全壁垒

一、引言 跨界电商已成为全球商业发展的重要趋势,但要成功进入多样化的市场,企业需要大量的市场数据和对隐私安全的保障。代理IP和Socks5代理是两项关键技术,它们在这一领域的应用对于企业的成功至关重要。 二、代理IP:跨界电商…

十分钟理解OSPF路由协议

十分钟理解OSPF路由协议 1.RIP的缺陷以跳数为度量值最大跳数为15更新路由表采用全更新收敛速度慢 2.RIP与OSPF比较OSPF概述运行OSPF协议之前运行OSPF协议之后 3.OSPF协议工作过程1.发现邻居2.建立邻接关系3.传递链路状态信息4.计算路由 4.OSPF分区域管理 有RIP协议,…

单元测试框架-pytest

单元测试框架-pytest 官网 常用插件 pytest-html: 生成html报告pytest-xdist: 实现并发测试pytest-ordering: 实现测试用例顺序设置pytest-rerunfailures: 测试用例失败重试allure-pytest: 生成测试报告 引入依赖 在项目根目录下创建:requirements.txt pytest pytest-htm…