Android焦点之SurfaceFlinger的apply

news2024/11/13 23:25:57

接animate()的openSurfaceTransaction(),prepareSurfaces(),closeSurfaceTransaction()

1. mService.openSurfaceTransaction(),通过SurfaceControl来通知native开始一个Transaction;

2. mService.closeSurfaceTransaction(),通过SurfaceControl来通知native(SurfaceFlinger)关闭一个Transaction最终来执行合成显示等工作;

WMS#openSurfaceTransaction:New出GlobalTransactionWrapper 接animate()的dc.prepareSurfaces();

DisplayContent#prepareSurfaces:将SurfaceControl提交在了mPendingTransaction上。然后完成遍历后,将mPendingTransaction合并到全局Transaction对象上提交给SurfaceFlinger。

mergeToGlobalTransaction将提供的Transaction合并提交,然后接animate()调Wms的closeSurfaceTransaction()

WMS#closeSurfaceTransaction: 再调用SurfaceControl的内部类GlobalTransactionWrapper#applyGlobalTransaction

SurfaceComposerClient#apply: 再调用android_view_SurfaceControl.cpp的nativeApplyTransaction方法,

apply方法主要就是收集之前通过transaction属性设置方法设置所有信息都需要收集起来,比如最重要的composerStates,然后调用sf的跨进程方法setTransactionState传递到sf中。

@frameworks/base/services/core/java/com/android/server/wm/WindowAnimator.java
private void animate(long frameTimeNs) {
@frameworks/base/services/core/java/com/android/server/wm/WindowManagerService.java    
    mService.openSurfaceTransaction();
@frameworks/base/core/java/android/view/SurfaceControl.java
        SurfaceControl.openTransaction();
            sGlobalTransaction = new GlobalTransactionWrapper();
@frameworks/base/services/core/java/com/android/server/wm/DisplayContent.java
    dc.prepareSurfaces();
@frameworks/base/core/java/android/view/SurfaceControl.java    
        SurfaceControl.mergeToGlobalTransaction(transaction);
            sGlobalTransaction.merge(t);
@frameworks/base/core/jni/android_view_SurfaceControl.cpp            
                nativeMergeTransaction(mNativeObject, other.mNativeObject);
                    transaction->merge(std::move(*otherTransaction));
    mService.closeSurfaceTransaction("WindowAnimator");
@frameworks/base/core/java/android/view/SurfaceControl.java    
        SurfaceControl.closeTransaction();
            else if (--sTransactionNestCount > 0) { //open和close一一对应,保证 sTransactionNestCount 数量    
            sGlobalTransaction.applyGlobalTransaction(false);
@frameworks/base/core/jni/android_view_SurfaceControl.cpp
                nativeApplyTransaction(mNativeObject, sync);
@frameworks/native/libs/gui/SurfaceComposerClient.cpp                
                    transaction->apply(sync);
                        for (auto const& kv : mComposerStates){ composerStates.add(kv.second);  }  // 遍历mComposerStates,其中包含了所有的InputWindow
                        displayStates = std::move(mDisplayStates);
                            //最后把上面收集的Transaction相关信息,调用sf的setTransactionState进行跨进程传递到sf进程
                            sf->setTransactionState(mFrameTimelineInfo, composerStates, displayStates, flags, applyToken,mInputWindowCommands, mDesiredPresentTime, mIsAutoTimestamp,hasListenerCallbacks, listenerCallbacks, mId)
                            clear();//apply后就需要把Transaction进行clear

 

 

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

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

相关文章

JVM系列 | 对象的创建与存储

JVM系列 | 对象的生命周期1 对象的创建与存储 文章目录 前言对象的创建过程内存空间的分配方式方式1 | 指针碰撞方式2 | 空闲列表 线程安全问题 | 避免空间冲突的方式方式1 | 同步处理(加锁)方式2 | 本地线程分配缓存 对象的内存布局Part1 | 对象头Mark Word类型指针…

如何在Mac上恢复已删除的存档文件?

在本文中,我们将分享在 macOS 或 OS X 上运行的 MacBook、iMac 或 Mac mini 上恢复已删除存档文件的不同方法。 下载免费试用的 Mac 数据恢复软件以在 Mac 上恢复已删除的存档文件。 macOS 可以选择压缩您的文件。您只需选择文件,按住 Control 键单击&a…

实验场:在几分钟内使用 Bedrock Anthropic Models 和 Elasticsearch 进行 RAG 实验

作者:来自 Elastic Joe McElroy, Aditya Tripathi 我们最近发布了 Elasticsearch Playground,这是一个新的低代码界面,开发人员可以通过 A/B 测试 LLM、调整提示(prompt)和分块数据来迭代和构建生产 RAG 应用程序。今天…

基于Fail2ban及iptables的SSH端口爆破防御方案

君衍. 一、本篇介绍二、Fail2ban1、简介2、工作方式3、优缺点4、工作原理5、目录结构6、功能特点 三、更改默认SSH端口1、更改配置文件2、重启服务 四、SSH日志审计1、连接失败的IP2、失败IP次数排行3、连接成功的IP4、成功IP次数排行 五、Fail2ban1、安装2、配置3、日志查看4、…

前端项目本地的node_modules直接上传到服务器上无法直接使用(node-sasa模块报错)

跑 jekins任务的服务器不能连接外网下载依赖包,就将本地下载的 node_modules直接上传到服务器上,但是运行时node-sass模块报错了ERROR in Missing binding /root/component/node_modules/node-sass/vendor/linux-x64-48/binding.node >> 报错信息类…

matlab PID tuner整定工具箱的用法

从主页的APP中搜索到它: 按照下图IMPORT导入被控对象的传递函数 在下图的Inspect按钮中可以看到导入的被控对象的传函。 在下图的Type中选择控制器类型: 在下图的Form中选择PID的形式:有两种可选:平行式Parallel和标准式Standard …

0基础学会在亚马逊云科技AWS上利用SageMaker、PEFT和LoRA高效微调AI大语言模型(含具体教程和代码)

项目简介: 小李哥今天将继续介绍亚马逊云科技AWS云计算平台上的前沿前沿AI技术解决方案,帮助大家快速了解国际上最热门的云计算平台亚马逊云科技AWS上的AI软甲开发最佳实践,并应用到自己的日常工作里。本次介绍的是如何在Amazon SageMaker上…

深度学习概览

引言 深度学习的定义与背景 深度学习是机器学习的一个子领域,涉及使用多层神经网络分析和学习复杂的数据模式。深度学习的基础可以追溯到20世纪80年代,但真正的发展和广泛应用是在21世纪初。计算能力的提升和大数据的可用性使得深度学习在许多领域取得…

ARM功耗管理标准接口之SCMI

安全之安全(security)博客目录导读 思考:功耗管理有哪些标准接口?ACPI&PSCI&SCMI? Advanced Configuration and Power Interface Power State Coordination Interface System Control and Management Interface 下图示例说明了实现…

【算法笔记自学】第 10 章 提高篇(4)——图算法专题

10.1图的定义和相关术语 #include <cstdio>const int MAXN 100; int degree[MAXN] {0};int main() {int n, m, u, v;scanf("%d%d", &n, &m);for (int j 0; j < m; j) {scanf("%d%d", &u, &v);degree[u];degree[v];}for (int i…

怎么减少pdf的MB,怎么减少pdf的大小

在数字化时代&#xff0c;pdf文件因其格式稳定、跨平台兼容性强等特点而广受欢迎。然而&#xff0c;随着内容的丰富&#xff0c;pdf文件的大小也日益增大&#xff0c;给文件传输和存储带来了不少困扰。本文将为你介绍多种减小pdf文件大小的方法&#xff0c;帮助你轻松应对这一问…

中间件——Kafka

两个系统各自都有各自要去做的事&#xff0c;所以只能将消息放到一个中间平台&#xff08;中间件&#xff09; Kafka 分布式流媒体平台 程序发消息&#xff0c;程序接收消息 Producer&#xff1a;Producer即生产者&#xff0c;消息的产生者&#xff0c;是消息的入口。 Brok…

Hadoop3:HDFS-存储优化之纠删码

一、集群环境 集群一共5个节点&#xff0c;102/103/104/105/106 二、纠删码原理 1、简介 HDFS默认情况下&#xff0c;一个文件有3个副本&#xff0c;这样提高了数据的可靠性&#xff0c;但也带来了2倍的冗余开销。Hadoop3.x引入了纠删码&#xff0c;采用计算的方式&#x…

Python爬虫速成之路(3):下载图片

hello hello~ &#xff0c;这里是绝命Coding——老白~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#xff1a;绝命Coding-CSDN博客 &a…

[GXYCTF2019]BabySQli

原题目描述&#xff1a;刚学完sqli&#xff0c;我才知道万能口令这么危险&#xff0c;还好我进行了防护&#xff0c;还用md5哈希了密码&#xff01; 我看到是个黑盒先想着搞一份源码 我dirsearch明明扫到了.git&#xff0c;算了直接注入试试看 随便输入了两个东西&#xff0c…

pico+unity3d项目配置

重点&#xff1a;unity编辑器版本要和pico的sdk要求一致、比如&#xff1a; 对于 Unity 2022.1.14 及以上版本&#xff0c;若同时在项目中使用 URP、Linear 色彩空间、四倍抗锯齿和OpenGL&#xff0c;会出现崩溃。该问题待 Unity 引擎解决。对于 Unity 2022&#xff0c;若同时…

植物神经紊乱?别怕!这些维生素来帮你!

最近收到好多小伙伴的私信&#xff0c;说自己有植物神经紊乱的困扰&#xff0c;不知道该肿么办&#xff1f;别急别急&#xff0c;我给你们来一波大福利&#x1f381;&#xff01;今天就来聊聊植物神经紊乱患者应该补充哪些维生素&#xff0c;让你的身体重回最佳状态&#xff01…

SC.Pandas 03 | 如何使用Pandas分析时间序列数据?

Introduction 前两期我们对Pandas的数据结构和常用的计算方法进行了介绍&#xff0c;在地球科学领域时间序列分析是很重要的一种数据处理方式。 通过理解数据的时间变化特征&#xff0c;我们可以更深入地理解研究对象的演化规律与物理机制。 因此&#xff0c;本期我们就从Pa…

安装cnpm失败

20240714 安装cnpm失败&#xff0c;报错如下&#xff1a; 失败原因&#xff1a; 请求 https://registry.npm.taobao.org 失败&#xff0c;原因&#xff1a;证书已过期 使用以下命令&#xff1a; npm install -g cnpm --registryhttps://registry.npmmirror.com另外&#xff0…

1.33、激活可视化卷积神经网络(matalb)

1、激活可视化卷积神经网络原理及流程 激活可视化&#xff08;Activation Visualization&#xff09;指的是通过可视化神经网络中激活函数的输出&#xff0c;来理解神经网络是如何学习并提取特征的过程。在卷积神经网络&#xff08;CNN&#xff09;中&#xff0c;我们可以通过…