当前位置: 首页 > news >正文

Android Graphics 图像显示系统 - 开篇

“ 随着学习的不断深入和工作经验的积累,欲将之前在博客中整理的Android Graphics知识做进一步整理,并纠正一些理解上的错误,故开设Graphics主题系列文章 ”

序言

由于工作需要,也源于个人兴趣,终于下决心花时间整理一下Android Graphics显示子系统的一些零散知识。其实对于是否把这一系列文章发布出来,个人也曾几经犹豫,原因是这些文章的内容并非个人研究成果或实践经验的总结,而仅仅只是学习过程中的 零散笔记 罢了。文章中的错误观点或谬论对读者可能产生的错误引导是我不想看到的。
当然,既然文章已经写出,我想就要发挥出它的价值,即便是错误的观点我觉得在大家的批判、指正、讨论中也会引发读者更多的思考,让你/我还有广大读者共同进步。

个人虽然从事Android开发也比较长时间了,但对于Android Graphics显示系统的知识一直比较匮乏,写作这些文章时也是很多地方一知半解,很多内容也难以讲清楚来龙去脉,甚至强加了个人“自以为是”的观点。网络上其实已经有很多优秀的文章的来解析Android Graphics显示系统的架构。Android每年一个大版本的更新,图形显示系统的源码在架构和写作方式上也几经调整与修改,虽基本原理不变,但逻辑细节却也发生了很大的变化。个人也是想基于较新版本Android整理一些自己在这个领域的知识脉络,并把一些零散的笔记记录于此。

基于此,我建议大家在阅读这些文章时,请带着审慎与批判的态度去阅读,阅读中请保持独立思考,因为这只是几篇学习笔记,错误会隐藏于文章各个角落。

学习的过程是漫长的,写作的过程更痛苦,该系列的笔记也不会一蹴而就或在短时间内一次完成,所以在学习过程中,我会不断的把新的笔记、新的收获更新上来。该系列笔记会在动态中不断更新,有兴趣的可以关注公众号获得持续更新!

主题系列简介

该系列文章聚焦Graphics知识,从基本概念和简单的Demo入手,分析图形显示基本框架和运作流程。涉及内容众多,比如SurfaceFlinger的运行机制,VSYNC信号的产生与分发,BufferQueue的工作原理,Mapper&Allocator,Fence同步机制 ....

比如生产者消费者模型

比如BufferQueue的工作机制

比如图形显示合成的基本流程

DRM HWC 合成的基本工作流程

Android多屏显示的基本知识

作为学习记录,后续会分主题分别介绍。感兴趣的同学可以关注本公众号,在学习道路上一同进步!

该系列您会看到如下文章内容,但文章数量应该不止这些,后续会不断分享更加具体、贴近工作需要的实战内容。

作者水平有限,文章难免错误,也请大家不吝赐教。


图形基础系列

Android Graphics 显示系统 - 开篇

Android Graphics 显示系统 - 基本组件(一)

Android Graphics 显示系统 - 基本组件(二)

Android Graphics 显示系统 - 基本组件(三)

Android Graphics 显示系统 - Surface绘图示例(四)

Android Graphics 显示系统 - Surface绘图示例(五)

Android Graphics 显示系统 - 建立SurfaceFlinger通信的流程(六)

Android Graphics 显示系统 - SurfaceFlinger的启动与初始化(七)

Android Graphics 显示系统 - SurfaceFlinger MessageQueue机制(八)

Android Graphics 显示系统 - 创建Surface流程(九)

Android Graphics 显示系统 - 初识BufferQueue(十)

Android Graphics 显示系统 - ANativeWindow/Surface/SurfaceControl(十一)

Android Graphics 显示系统 - BufferQueue的工作流程(十二)

Android Graphics 显示系统 - BufferQueue的工作流程(十三)

Android Graphics 显示系统 - BufferQueue的工作流程(十四)

Android Graphics 显示系统 - BufferQueue的工作流程(十五)

Android Graphics 显示系统 - Surface补充知识(十六)

Android Graphics 显示系统 - SurfaceView与BufferQueue关系(十七)

Android Graphics 显示系统 - Gralloc架构及GraphicBuffer创建/传递/释放(十八)

Android Graphics 显示系统 - 简述Allocator/Mapper服务的获取流程(十九)

Android Graphics 显示系统 - GraphicBuffer同步机制-Fence(二十)

Android Graphics 显示系统 - SurfaceFlinger的GPU合成(廿一)

Android Graphics 显示系统 - 导出图层数据(dump graphic raw data)(廿二)

Android Graphics 显示系统 - 基础知识之 BitTube(廿三)

Android Graphics 显示系统 - SurfaceFlinger之VSync-1(廿四)

Android Graphics 显示系统 - SurfaceFlinger之VSync-2(廿五)

Android Graphics 显示系统 - SurfaceFlinger之VSync-3(廿六)

Android Graphics 显示系统 - HWC HAL的初始化(廿七)

Android Graphics 显示系统 - 聊聊屏幕刷新机制(廿八)

Android Graphics 显示系统 - HWC 探秘 - 1(廿九)

Android Graphics 显示系统 - HWC 探秘 - 2(三十)

Android Graphics 显示系统 - HWC 探秘 - 3(三一)

多屏显示系列

Android Emulator - 模拟器多屏输出

Android 多屏显示 -- 从一个简单的Demo开始

Android Graphics 显示系统 - 多屏互动演示

Android Graphics 显示系统 - 如何模拟多(物理)显示屏?

Android Graphics 多屏同显/异显 - 新年预告

未完待续 ....

其它参考文章

在 Android 上进行高刷新率渲染
Android 12(S) 图像显示系统 - 杂谈 - source crop & display frame 

心有猛虎,细嗅蔷薇,生活就该无惧无悔

相关文章:

Android Graphics 图像显示系统 - 开篇

“ 随着学习的不断深入和工作经验的积累,欲将之前在博客中整理的Android Graphics知识做进一步整理,并纠正一些理解上的错误,故开设Graphics主题系列文章 ” 序言 由于工作需要,也源于个人兴趣,终于下决心花时间整理一…...

机器学习在各个行业的应用介绍

随着科技的飞速发展,机器学习已经从实验室走向了现实世界,逐渐成为各行各业不可或缺的工具。从金融领域到医疗健康,从零售市场到制造业,机器学习正在改变着我们的工作方式和生活质量。 本文将深入探讨机器学习在以下几个领域的应用…...

【生产实测有效】Windows命令行查看激活状态脚本

Windows查看激活状态关键代码 通过windows server 自带的PowerShell来执行 Get-WmiObject SoftwareLicensingProduct | Select-Object -Property Description, LicenseStatus | findstr "Operating System"|findstr "1$"Get-WmiObject SoftwareLicensingPr…...

简单的Udp服务器

目录 简单的UDP网络程序1.1 UdpServer.hpp1.2 UdpClient.cc1.3 main.cc1.4 makefile1.5 log.hpp 简单的UDP网络程序 1.1 UdpServer.hpp #pragma once#include <iostream> using namespace std;#include <unistd.h> #include <sys/types.h> #include <sy…...

【Linux进程间通信】用管道实现简单的进程池、命名管道

【Linux进程间通信】用管道实现简单的进程池、命名管道 目录 【Linux进程间通信】用管道实现简单的进程池、命名管道为什么要实现进程池&#xff1f;代码实现命名管道创建一个命名管道 理解命名管道匿名管道与命名管道的区别命名管道的打开规则 作者&#xff1a;爱写代码的刚子…...

Linux操作系统基础(九):Linux用户与权限

文章目录 Linux用户与权限 一、文件权限概述 二、终端命令&#xff1a;组管理 三、终端命令&#xff1a;用户管理 1、创建用户 、 设置密码 、删除用户 2、查看用户信息 3、su切换用户 4、sudo 4.1、给指定用户授予权限 4.2、使用 用户 zhangsan登录, 操作管理员命令…...

蓝桥杯——第 5 场 小白入门赛(c++详解!!!)

文章目录 1 十二生肖基本思路&#xff1a; 2 欢迎参加福建省大学生程序设计竞赛基本思路&#xff1a;代码&#xff1a; 3 匹配二元组的数量基本思路&#xff1a;代码: 4 元素交换基本思路&#xff1a;代码&#xff1a; 5 下棋的贝贝基本思路&#xff1a;代码&#xff1a; 6 方程…...

Codeforces Round 303 (Div. 2)C. Kefa and Park(DFS、实现)

文章目录 题面链接题意题解代码总结 题面 链接 C. Kefa and Park 题意 求叶节点数量&#xff0c;叶节点满足&#xff0c;从根节点到叶节点的路径上最长连续1的长度小于m 题解 这道题目主要是实现&#xff0c;当不满足条件时直接返回。 到达叶节点后统计答案&#xff0c;用…...

797. 差分

Problem: 797. 差分 文章目录 思路解题方法复杂度Code 思路 这是一个差分数组的问题。差分数组的主要适用场景是频繁对原始数组的某一个区间进行增减操作。这种操作是区间修改操作&#xff0c;在这种操作下&#xff0c;差分数组只需要对区间的两个端点进行操作&#xff0c;时间…...

2024.2.5 vscode连不上虚拟机,始终waiting for server log

昨天还好好的&#xff0c;吃着火锅&#xff0c;做着毕设&#xff0c;突然就被vscode给劫了。 起初&#xff0c;哥们跟着网上教程有模有样地删除了安装包缓存&#xff0c;还删除了.vscode-server&#xff0c;发现没卵用&#xff0c;之前都是搜那个弹窗报错。 后来发现原来是vsco…...

CSS基础---新手入门级详解

CSS:层叠样式表 CSS&#xff08;Cascading Style Sheets,层叠样式表&#xff09;&#xff0c;是一种用来为结构化文档添加样式&#xff08;字体、间距和颜色&#xff09;的计算机语言&#xff0c;css扩展名为.css。 实例: <!DOCTYPE html><html> <head><…...

Python中Pymysql库的常见用法和代码示例

关注B站可以观看更多实战教学视频&#xff1a;肆十二-的个人空间-肆十二-个人主页-哔哩哔哩视频 (bilibili.com) pymysql是一个用于连接MySQL数据库的Python库&#xff0c;它允许你执行SQL查询并处理返回的结果。以下是pymysql库的一些常见用法和代码示例&#xff1a; 1. 安装…...

使用 WPF + Chrome 内核实现高稳定性的在线客服系统复合应用程序

对于在线客服与营销系统&#xff0c;客服端指的是后台提供服务的客服或营销人员&#xff0c;他们使用客服程序在后台观察网站的被访情况&#xff0c;开展营销活动或提供客户服务。在本篇文章中&#xff0c;我将详细介绍如何通过 WPF Chrome 内核的方式实现复合客服端应用程序。…...

fastapi mysql 开发restful 3

pip install mysql-connector-python pymysql 数据库链接 创建src目录&#xff0c;里面创建db.py 代码如下&#xff1a; # 导入mysql.connector模块&#xff0c;该模块提供了与MySQL数据库进行连接和交互的功能。 import mysql.connector # 定义一个函数get_db_connectio…...

【Uniapp uni-app学习与快速上手——详细讲解】

Uniapp uni-app学习与快速上手——详细讲解 1. 介绍2. Uni-app 学习资源3. 快速上手4. 开始第一个项目5. 调试和发布 1. 介绍 Uni-app 是一个使用 Vue.js 编写多端应用的前端框架。开发者可以编写一份代码&#xff0c;然后发布到iOS、Android、网页&#xff08;响应式&#xf…...

剑指offer——旋转数组的最小数字

目录 1. 题目描述2. 分析思路2.1 示例分析 3. 更完美的做法 1. 题目描述 把一个数组最开始的若干个元素搬到数组的末尾&#xff0c;我们称之为数组的旋转。输入一个递增排序的数组的一个旋转&#xff0c;输出旋转数组的最小元素。例如数组{3.4,5,1.2}为{1.2,3,4,5}的一个旋转&a…...

盘点数据可视化大屏焦点图十种样式

所谓焦点图就是大屏中居于中心位置的图&#xff0c;是视觉的中心&#xff0c;本位列举了十种焦点图样式供大家参考。 地球作为焦点图 图片来自网络 地图作为焦点图 图片来自网络 城市作为焦点图 图片来自网络 园区做焦点图 图片来自网络 建筑做焦点图 图片来自网络 生产线…...

问题 G: 老鼠和猫的交易

题目描述 小老鼠准备了M磅的猫粮&#xff0c;准备去和看守仓库的猫做交易&#xff0c;因为仓库里有小老鼠喜欢吃的五香豆。 仓库有N个房间&#xff1b; 第i个房间有J[i] 磅的五香豆&#xff0c;并且需要用F[i]磅的猫粮去交换&#xff1b; 老鼠不必交换该房间所有的五香豆&…...

HiveSQL——借助聚合函数与case when行转列

一、条件函数 if 条件函数 if函数是最常用到的条件函数&#xff0c;其写法是if(xn,a,b), xn代表判断条件&#xff0c;如果xn时&#xff0c;那么结果返回a ,否则返回b。 selectif(age < 25 or age is null, 25岁以下, 25岁以上) as age_cnt,count(1) as number from table…...

冒泡排序,判断回文,以及12-24小时制

6-7 定义函数&#xff0c;完成冒泡排序算法。 本题定义一个冒泡排序算法的函数&#xff0c;调用函数后实现数组的升序排序&#xff0c;其数组长度为任意长度。 函数接口定义&#xff1a; 在这里描述函数接口。例如&#xff1a; void sort(int arr[],int n); 在这里解释接口…...

Vim 调用外部命令学习笔记

Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端&#xff0c;同时完善学生端的构建。本次工作主要包括&#xff1a; 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括&#xff1a;采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中&#xff0c;设置任务排序规则尤其重要&#xff0c;因为它让看板视觉上直观地体…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;支持 Python 3.6。它基于标准 Python 类型提示&#xff0c;易于学习且功能强大。以下是一个完整的 FastAPI 入门教程&#xff0c;涵盖从环境搭建到创建并运行一个简单的…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

跨链模式:多链互操作架构与性能扩展方案

跨链模式&#xff1a;多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈&#xff1a;模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展&#xff08;H2Cross架构&#xff09;&#xff1a; 适配层&#xf…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

Xen Server服务器释放磁盘空间

disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...