Android显示系统(10)- SurfaceFlinger内部结构

一、前言:

之前讲述了native层如何使用SurfaceFlinger,我们只是看到了简单的API调用,从本文开始,我们逐步进行SurfaceFlinger内部结构的分析。话不多说,莱茨狗~

二、类图:

2.1、总体架构:

先看下SurfaceFlinger的关键成员和我们BootAnimation侧关键成员如何对应起来,这不是严格的UML类图,但是这么画我觉着很容易理解,就先这么画了。
在这里插入图片描述

可以看出:

  • SurfaceFlinger侧会为BootAnimation创建一个Client,其实,SF会为每个APP都创建一个Client;
  • SurfaceFlinger侧有一个BufferQueueLayer(Layer的子类)对应APP侧的SurfaceControl,允许有一个APP有多个Layer,同时,SF会生成多个SurfaceControl
  • BufferQueueLayer是一个buffer队列,队列有一个消费者mConsumer和一个生产者mProducer
  • APP侧的SurfaceControl当中有一个Surface
  • Surface当中又有一个数组mSlots表示64个buffer,对应SF当中其实也有这么一个数组,如果数组来管理这些buffer,这个是比较复杂的流程,后面单独写一篇文章介绍;

2.2、代理关系:

上面看到好多类似于SurfaceCompser的字眼,到底啥关系呢?我给你画个图:

在这里插入图片描述

熟悉Binder机制的朋友都应该能看懂,Bpxxxx一般就是代理类,Bnxxxx一般就是本地类,这样APP侧调用mClient就像调用Client一模一样的,底层Binder帮你处理了。一种RPC的思想。

三、APP连接SurfaceFlinger:

前面画了静态的类图,接下来我们看下APP如何去和SurfaceFlinger建立连接。

  1. APP侧获得SurfaceFlinger服务:

    • BootAnimation构造函数中,我们会通过mSession = new SurfaceComposerClient();来获取SF的代理类。

      BootAnimation::BootAnimation(sp<Callbacks> callbacks): Thread(false), mClockEnabled(true), mTimeIsAccurate(false),mTimeFormat12Hour(false), mTimeCheckThread(

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

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

相关文章

深度学习中的多通道卷积与偏置过程详解

目录 ​编辑 多通道卷积的深入理解 &#x1f50d; 卷积核的多维特性 &#x1f30c; 卷积操作的细节 &#x1f527; 多通道卷积的优势 &#x1f31f; 偏置过程的深入理解 &#x1f3af; 偏置的两种实现方式 &#x1f6e0;️ 偏置的作用与重要性 &#x1f308; 多通道卷…

易语言鼠标轨迹算法(游戏防检测算法)

一.简介 鼠标轨迹算法是一种模拟人类鼠标操作的程序&#xff0c;它能够模拟出自然而真实的鼠标移动路径。 鼠标轨迹算法的底层实现采用C/C语言&#xff0c;原因在于C/C提供了高性能的执行能力和直接访问操作系统底层资源的能力。 鼠标轨迹算法具有以下优势&#xff1a; 模拟…

LeetCode 718. 最长重复子数组 java题解

https://leetcode.cn/problems/maximum-length-of-repeated-subarray/description/ 动态规划 class Solution {public int findLength(int[] nums1, int[] nums2) {int len1nums1.length,len2nums2.length;int[][] dpnew int[len11][len21];dp[0][0]0;//没有意义&#xff0c;…

【蓝桥杯选拔赛真题93】Scratch青蛙过河 第十五届蓝桥杯scratch图形化编程 少儿编程创意编程选拔赛真题解析

目录 Scratch青蛙过河 一、题目要求 编程实现 二、案例分析 1、角色分析 2、背景分析 3、前期准备 三、解题思路 1、思路分析 2、详细过程 四、程序编写 五、考点分析 六、推荐资料 1、入门基础 2、蓝桥杯比赛 3、考级资料 4、视频课程 5、python资料 Scratc…

5.3 C++ 容器的嵌套

一&#xff09;容器嵌套的概念 在 C 中&#xff0c;容器嵌套是指将一种容器类型作为另一种容器的元素。这允许创建更复杂的数据结构&#xff0c;以满足各种编程需求。例如&#xff0c;可以将一个vector容器放入另一个vector容器中&#xff0c;或者将一个map容器的元素设置为lis…

spark读取普通文件

spark读取普通文件 txt文件 """ 将一行数据当做一个字段&#xff0c;需要自己切割 字段名称为value 表结构 可以从sql中搞 """ df spark.read.text("../../data/wordcount/input/data.txt") df spark.read.format("text"…

手机实时提取SIM卡打电话的信令声音--社会价值(一、方案解决了什么问题)

手机实时提取SIM卡打电话的信令声音 --社会价值(一、方案解决了什么问题) 一、前言 这段时间&#xff0c;我们在技术范围之外陷入了一个自证或者说下定义的怪圈&#xff0c;即要怎么样去介绍或者描述&#xff1a;我们是一个什么样的产品。它在当前这个世界上&#xff0c;处于…

【LeetCode】每日一题 2024_12_13 K 次乘运算后的最终数组 I(暴力)

前言 每天和你一起刷 LeetCode 每日一题~ 小聊两句 1、今天是 12.13 南京大屠杀国家公祭日。铭记历史&#xff0c;勿忘国耻。 2、今天早上去看了 TGA 年度游戏颁奖&#xff0c;小机器人拿下了年度最佳游戏&#xff0c;所有人都震惊了&#xff0c;大伙纷纷问到&#xff0c;谁…

算法刷题Day16: BM41 输出二叉树的右视图

题目链接 描述 思路&#xff1a; 递归构造二叉树在Day15有讲到。复习一下&#xff0c;就是使用递归构建左右子树。将中序和前序一分为二。 接下来是找出每一层的最右边的节点&#xff0c;可以利用队列层次遍历。 利用队列长度记录当前层有多少个节点&#xff0c;每次从队列里…

【修改源码】解决el-select值不匹配导致回显id、只能搜索label无法搜索value的问题

问题一&#xff1a;el-select值不匹配导致回显id&#xff08;此时只针对单选进行处理&#xff09; el-select数据的回显是根据id去匹配值的&#xff0c;最近项目出现了回显id的情况&#xff0c;原因是没有匹配的option 问题场景图如下&#xff1a; 解决方案 1、方法一&#xf…

Docker的初识

目录 1. 容器技术发展史1.1 Jail 时代1.2 云时代1.3 云原生时代1.3.1 Google & Docker 竞争1.3.2 k8s 成为云原生事实标准 2. 虚拟化和容器化的概念2.1 什么是虚拟化、容器化2.2 为什么要虚拟化、容器化&#xff1f;2.3 虚拟化实现方式2.3.1 应用程序执行环境分层2.3.2 虚拟…

【开源大屏】玩转开源积木BI,从0到1设计一个大屏

积木 BI 重磅推出免费大屏设计器&#xff01;功能超强大&#xff0c;操作超流畅&#xff0c;体验超酷炫。快来体验一下吧。 让我们一起来看一下如何从0到1设计一个大屏。 一、积木BI大屏介绍 积木BI可视化数据大屏 是一站式数据可视化展示平台&#xff0c;旨在帮助用户快速通…

挑食的机器

描述 未来世界有群机器人&#xff0c;他们以阿拉伯数字为食。但其中有个机器人Tom从小到大都不吃质数&#xff0c;为了Tom的健康着想&#xff0c;医生建议Tom有计划的只吃质数&#xff0c;以保证营养均衡。但超市的货架上只有从1到105并且按顺序排列好的实物售卖&#xff0c;所…

HarmonyOS 线性容器ArrayList 常用的几个方法

ArrayList是一种线性数据结构&#xff0c;底层基于数组实现。ArrayList会根据实际需要动态调整容量&#xff0c;每次扩容增加50%。 ArrayList和Vector相似&#xff0c;都是基于数组实现。它们都可以动态调整容量&#xff0c;但Vector每次扩容增加1倍。 ArrayList和LinkedList相…

leetcode230.二叉搜索树中第k小的元素

标签&#xff1a;二叉搜索树&#xff1b;中序遍历 给定一个二叉搜索树的根节点 root &#xff0c;和一个整数 k &#xff0c;请你设计一个算法查找其中第 k 小的元素&#xff08;从 1 开始计数&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,1,4,null,2], k 1…

如何在两台 PostgreSQL 服务器之间使用逻辑复制槽进行数据复制

如何在两台 PostgreSQL 服务器之间使用逻辑复制槽进行数据复制 如何在两台 PostgreSQL 服务器之间使用逻辑复制槽进行数据复制环境准备1. 配置主服务器&#xff08;Publisher&#xff09;1.1 修改 postgresql.conf1.2 修改 pg_hba.conf1.3 重启 PostgreSQL 服务1.4 创建逻辑复制…

苹果开发者入门:修复 SwiftUI 中“跑偏的”动画(下)

概述 大家知道 SwiftUI 不仅仅是一款 App 界面布局的超级利器&#xff0c;它同样提供了花样百出的动画和转场机制将 UI 世界点缀的“楚楚动人”。不过&#xff0c;对于苹果开发新入门的秃头小码农来说&#xff0c;使用动画貌似没有想象的那么易如反掌。 如上图所示&#xff0c…

kafka-clients之监控

以生产者为例介绍spring如何整合kafka-clients&#xff0c;micrometer&#xff0c;prometheus。上报生产者监控打点 可以通过在Spring Boot应用中手动添加Kafka Producer的度量监控&#xff0c;确保Prometheus能够采集到Producer的指标。以下是一个示例代码&#xff0c;其中使…

【万字详解】三维重建(二)——NeRF、NeuS、MeshUDF、NeuralUDF、3DGS、GShell

文章目录 一、NeRF:Representing Scenes as Neural Radiance Fields for View Synthesis(推荐读)1.1 式1 神经网络的输入和输出1.2 式2 体素渲染算法1.3 式3 损失函数1.4 位置编码1.5 基本原理二、经典的重建流程2.1 传统的三维重建pipeline2.2 神经网络回归2.3 可微渲染最优…

优化Go语言中的网络连接:设置代理超时参数

网络连接优化的重要性 在分布式系统和微服务架构中&#xff0c;网络请求的效率直接影响到整个系统的响应速度。合理的超时设置可以防止系统在等待网络响应时陷入无限期的阻塞&#xff0c;从而提高系统的吞吐量和用户体验。特别是在使用代理服务器时&#xff0c;由于增加了网络…