hal/SurfaceFlinger/perfetto实战需求问题探讨作业-千里马framework开发

Android 屏幕录制时去除悬浮窗 最近在用Android8.0开发一个屏幕录制的功能,要求录制的视频不能有录屏的控制悬浮窗。 录屏方案使用的是MediaRecorder、MediaProjection、VirtualDisplay。 Android支持多个屏幕:主显、外显、虚显,虚显就是VirtualDisplay。 VirtualDisplay的使用场景很多,比如录屏,WED显示等。其作用就是抓取屏幕上显示的内容。 录屏... 阅读详情

背景

hi,粉丝朋友们:
在新课hal+perfetto+surfaceflinger
https://mp.weixin.qq.com/s/LbVLnu1udqExHVKxd74ILg
推出后,各位学员朋友们都积极响应,开始马不停蹄的学习,学员学习后希望有更多的实战案例或者项目拿来练手,从而更加巩固自己对SurfaceFlinger掌握情况。

在这里插入图片描述刚好群里也有相关的学员朋友分享了一些android新动向新特性功能,这里马哥就把它们整理一下作为实战案例作业给,大家进行实战哈。

实战案例作业1:

需求背景:
aosp15上预览版本功能:
录屏时候可以仅对特定App窗口进行录制,而不是全屏录制
在这里插入图片描述

使用场景:
这个功能其实在国内很多的厂商都是有类似功能,比如录屏时候经常需要过滤一些窗口,比如很多手机场景一般为了用户暂停和开始会有专门的一个窗口来点击开始停止按钮。
在这里插入图片描述
但是这个录屏按钮操作窗口就不会被录制进入录屏的mp4中。

还有一些场景游戏投屏场景,比如游戏主播可能玩游戏时候还使用小窗启动了其他app,比如和某个妹子聊天,或者打开某个app在看游戏攻略
在这里插入图片描述

如果原生录屏不做任何处理那么会把小窗app的内容也给投屏直播给观众,这个其实是不想要的,因为只想要底层游戏画面展现给用户既可以。

需求实现要求:
1、要求有交互方式可以选着特定的窗口window,可以动态选着某一个window,可以做相关ui交互或者命令行动态控制均可以
2、要求可以实现录屏内容只有步骤1选的window的相关内容在录屏mp4中

实战案例作业2:

需求背景:
截图分享可以选定某个特定窗口进行,这个和上面的录屏其实基本上类似一个场景,就是截图时候有会存在只需要截图固定窗口window的,不需要其他window的情况,同样游戏主播进行直播这个情况,截图时候希望只有游戏画面就可以,游戏画面上面的其他app的窗口不希望在截图中。

在这里插入图片描述

初级实现要求:

1、要求有交互方式可以选着特定的窗口window,可以动态选着某一个window,可以做相关ui交互或者命令行动态控制均可以
2、要求可以实现录屏内容只有步骤1选的window的相关内容在图片中

高阶考虑扩展探索要求:

背景需求:
经常分析一些显示问题时候,会想要dumpsys各个图层,但是dumpsys SurfaceFlinger命令一般来说只是有相关的图层信息,是文本类的信息,所以有时候黑屏或者显示 异常情况就比较难看出来是不是自己图层本身上帧有问题。
基于以上背景就想要实现一个需求,在dumpsys SurfaceFlinger时候,不仅仅会dump出来相关的文本信息,还会把每个图层的图像也进行dump到固定目录,方便与文本信息进行结合查看验证
实现要求:
1、dumpsys SurfaceFlinger会触发dumpsys出各个显示图层的图像内容,保存成png图片到固定某个目录
2、保存图像要求有当前每个显示图层的png,和整个屏幕的显示png图
3、考虑扩展为只要有buffer的layer都会被dump,无论其是否真实显示在屏幕

更多framework干货请关注“千里马学框架”

SurfaceFlinger详解 Surface进行merge可以采用两种方式,一种就是采用软件的形式来merge,还一种就是采用硬件的方式,软件的方式就是我们的SurfaceFlinger,而硬件的方式就是Overlay。 SurfaceFlinger 是一个独立的Service, 它接收所有Window的Surface作为输入,根据ZOrder, 透明度,大小,位置等参数,计算出每个Surface在最终合成图像中的位置,然后交由HWComposer或Ope... 阅读详情

相关推荐

Android Framework学习路线:从Binder到SystemServer的系统进阶指南

Android系统架构中,应用层与底层之间的桥梁是Framework,它承载着跨进程通信、消息驱动与系统服务调度等关键机制。其中,Binder作为Android核心IPC通信骨架,依靠mmap实现一次拷贝,为应用与系统服务的高效交互提供基础;Handler消息循环则保障了单线程模型下任务的有序执行,是主线程稳定运行的根基。理解这些原理,不仅有助于优化应用性能,更是掌握系统定制与问题定位的前提。从应用启动到视图绘制,从触摸事件分发到画面合成,Framework贯穿始终。本文将结合实际工程视角,系统梳理从Bin

weixin_34209851的博客 352

SurfaceFlinger实战dump获取单个Layer图像方案及成果展示-千里马学框架

今天来给大家分享一下如何实现单独获取某个Layer的图片,而不是整个屏幕的图片。

learnframework的博客 3018

Android显示系统架构详解:从SurfaceFlinger到VSYNC的完整链路

屏幕上一帧画面的产生,涉及应用绘制、跨进程传输、系统合成与硬件扫描输出等多个环节。理解这套图形显示体系,是Android进阶开发绕不开的核心能力。本文从图形渲染的基本概念入手,梳理SurfaceFlinger如何统一调度各应用图层,BufferQueue如何以生产者-消费者模型高效传递图像数据,VSYNC又如何作为全局节拍器保证画面同步。同时结合HWC硬件合成、Gralloc缓冲区管理等底层机制,解释显示链路各组件间的协作原理。针对日常开发中常见的卡顿、掉帧、黑屏等问题,文章也提供了基于GPU渲染分析、du

weixin_33795806的博客 323

通过 dumpsys SurfaceFlinger 分析Android 系统图层

一、通过 dumpsysSurfaceFlinger 分析Android 系统图层: 从下面的dumpsys log看出当前系统有三个图层(红色部分是每个图层的坐标和大小),从最底层到上层分别是ImageWallpaper(壁纸), SurfaceView(视频小窗口), launcher(桌面)。其中视频小窗口用Overlay的方式独立输出到视频层,这样的话只有壁纸层和桌面层通过GPU混合后输

haima1998的专栏 1万+

Android Framework开发核心能力与面试指南

Android Framework开发是移动互联网领域的关键技术方向,涉及Linux内核、Java/Kotlin语言和系统架构设计的深度融合。其核心价值在于理解系统底层机制与上层设计的协同原理,如Binder IPC机制和Handler消息循环等关键技术。掌握这些能力不仅能提升应用性能优化水平,还能解决系统级问题如内存泄漏和启动速度优化。在工程实践中,Framework开发者需要具备源码调试、性能分析和跨模块问题排查等实战技能。对于求职者而言,深入理解Android系统启动流程、AMS工作原理等高频面试题,

weixin_30700099的博客 360

Android系统开发工程师核心技术解析与面试指南

Android系统开发是移动互联网领域的核心技术方向,涉及操作系统底层原理与框架层实现。从技术架构看,其核心围绕Linux内核、硬件抽象层(HAL)及Android运行时环境展开,关键技术包括Binder IPC机制、内存管理等系统级组件。这类开发工作具有显著的工程价值,既能提升系统性能与稳定性,又能为硬件适配提供底层支持,广泛应用于智能手机、车载系统等场景。以AOSP源码分析为例,开发者常需处理CameraProvider等HAL层问题,同时需掌握systrace等性能分析工具。对于求职者而言,深入理解系

weixin_34384557的博客 539

试验SurfaceFlinger 中Source Crop

在创建图层时,我们可以通过设置组件的 SurfaceHolder 或者 SurfaceTexture 等对象的 Source Crop 属性来指定图层的裁剪区域,从而实现对图层的缩放和裁剪等操作。需要注意的是,在设置 Source Crop 属性时,我们使用了 SurfaceHolder 的 setFixedSize() 方法来指定目标区域的尺寸。通过setFixedSize可以设置绘制的大小,这里我们进行测试,在一个activity中准备3个按钮,点击按钮来绘制不同大小的画布,看看效果。

aaajj的专栏 2572

安卓开发效率提升指南:从Gradle优化到高效调试的实战技巧

在软件开发流程中,构建效率与调试成本往往决定了项目交付的节奏。以Gradle为代表的自动化构建系统,通过并行编译与缓存机制显著缩短了编译时间,成为提升开发体验的基础设施之一。而针对性能瓶颈,系统级追踪工具Perfetto能够可视化线程调度与渲染链路,将“猜测式调试”转化为“数据驱动定位”,大幅降低疑难问题的分析耗时。这类方法论不仅适用于应用层,在前后端联调与系统级开发中同样具有普适性——从OpenAPI生成请求代码到本地Mock数据,再到框架层的日志规范,每一环的工程化沉淀都能减少重复劳动。本文从实际开发场

weixin_34021089的博客 244

Hal深入实战/perfetto-systrace实战/SurfaceFlinger合集-安卓framework开发实战开发

比如surfaceflingre模块深入分析需要用到hal相关的模块,比如mapper,hwc等,所以说去分析surfaceflinger就必须要有一定hal基础比较好,还有就是perfetto,大家可能会以为他只是个性能优化工具。核心思路就是讲解清楚perfetto相关的基础知识,学会怎么看perfetto的trace,及怎么自己加和打印tag和trace等,有了这些知识后再会结合相关的业务来练习怎么看perfetto,比如surfaceflinger就是一个学习实战看perfetto的很好案例。

learnframework的博客 1376

安卓系统框架与Framework分层解析:从应用到内核的完整技术栈

在移动应用开发与系统优化的实践中,理解操作系统底层架构往往成为解决复杂问题的关键。安卓系统框架作为连接应用程序与硬件资源的桥梁,其设计原理和运行机制直接影响App的稳定性、流畅度与功耗表现。从Linux内核、HAL硬件抽象层,到系统服务、应用框架层,每一层都承担着明确的职责。其中,Binder通信机制构建了跨进程调用的高效通道,ActivityManagerService、WindowManagerService等核心服务则协作管理着组件生命周期与窗口调度。掌握这些基础概念,不仅有助于开发者定位卡顿、闪退、

weixin_31240035的博客 276

USC EE450 CSCI455 CSCI571 Midterm 总结

EE450 Compter Network                1.历年Midterm考题。(更新至2017年spring,如果大家有新的资源欢迎编辑)                 google drive:https://drive.google.com/drive/folders/0B_LCDxpiiXZ1cUNReFpZZHo4NG8?usp=sharing

Small_hour 7112

千里马Framework手机车机互联投屏实Hal+perfetto+SurfaceFlinger合集

千里马Android手机车机大厂Framework系统-WMS AMS系统专题实战课。千里马Framework 手机车机互联投屏实战专题(安卓framework实战开发。千里马Android手机大厂Framework系统-Input系统专题实战课。千里马Android手机大厂Framework系统-跨进程通信高级实战课。千里马安卓framework实战开发基础合集车载车机手机系统开发必学课。千里马Android手机大厂入职培训Framework系统高级开发课。

2501_91082100的博客 517

用Seurat和ComplexHeatmap绘制单细胞marker基因热图:从数据处理到可视化全流程

本文详细介绍了使用Seurat和ComplexHeatmap绘制单细胞marker基因热图的全流程,涵盖从数据处理、基因筛选、平均表达矩阵计算到高级可视化与注释添加。重点解析了如何利用ComplexHeatmap生成发表级热图,并整合热词信息,解决单细胞数据可视化中的常见问题,提升科研图表质量。

weixin_29048775的博客 530

Android Framework从入门到精通:核心机制与实战路径全解析

在Android系统架构中,Framework层是连接应用与硬件的关键桥梁,也是决定系统性能、稳定性与扩展能力的技术核心。它通过Binder机制实现高效的跨进程通信,由AMS、WMS、PMS等系统服务协同管理组件生命周期、窗口布局与权限校验,同时借助SurfaceFlinger完成图形合成与渲染。理解这些底层原理,能够帮助开发者精准定位应用启动慢、卡顿掉帧、权限异常等疑难问题。无论是进行系统级定制、性能优化还是兼容性适配,掌握Framework的核心脉络都至关重要。本文以一线工程师的视角,梳理了从源码获取、

weixin_34034261的博客 346

矢量网络分析仪VNA的校准之SOLT方法

作者:杭州冥鸿电子科技有限公司 邮箱:huanglong@deepelec.com S参数的测量方法有两种,一种是基于扫频测量的原理(VNA),另外一种是基于快沿阶跃响应的原理(TDR)。 下图是VNA的原理框图,主要包括以下部分: (1)激励信号源:提供感兴趣的频率范围内的入射信号; (2)信号分离装置:含功分器和定向耦合器,分离出入射,反射和传输信号; (3)接收机:...

u010018619的博客 2万+

U24时钟信号上升下降沿出现非单调性--简单分析

交换机U24时钟信号上升下降沿出现非单调性--简单分析

qq_45185504的博客 1132

Android Framework面试真题解析与车载系统开发实战

Android Framework作为系统核心层,其Binder机制、系统启动流程等基础原理是面试考察重点。Binder相比传统Linux IPC具有更低延迟(实测0.5ms)和更高吞吐量(20MB/s),通过内核级安全机制实现跨进程通信。在车载系统开发中,这些技术需要适配特殊场景,如双屏异显需要改造SurfaceFlinger的LayerState合成策略。掌握系统级调试工具如adb、systrace,以及性能优化方法如启动加速,是FW工程师的核心能力。本文基于手机和车载领域真实面试题,详解从机制原理到架

weixin_34038293的博客 296

Canoe CAPL TCP通信避坑指南:从OnTcpConnect回调不触发到Socket句柄管理

本文详细解析了Canoe CAPL中TCP通信的常见问题与解决方案,包括OnTcpConnect回调不触发的三大原因、Socket句柄管理的内存泄漏风险、数据发送截断规则等。通过实战案例和代码示例,帮助开发者规避TCP通信中的典型陷阱,提升车载网络测试的稳定性和可靠性。

weixin_26976635的博客 358

skia实现动态差异录屏截图logo添加-千里马SurfaceFlinger专题实战项目背景介绍

大家好!因为前面一直忙于讲解surfaceflinger层面到的原理和源码分析部分,一直没有一个系统的项目来给大家练手实现,今天来实现一个sf层面的一个小项目。具体项目背景信息如下

learnframework的博客 716

LLaMA-Factory微调教程2:命令行sft微调

本文介绍了如何使用llama-factory项目在本地运行Qwen2-7B大语言模型进行对话。首先通过llamafactory-cli env查看环境配置,然后使用git lfs下载Qwen2-7B模型。创建配置文件qwen2_7b_instruct.yaml,修改模型路径和模板参数。最后通过llamafactory-cli chat命令启动对话服务,加载模型配置文件和tokenizer,完成环境初始化后即可进行交互式对话。

Cachel Wood的博客 8814

【WRFDA实操第一期】服务器中安装 WRFPLUS 和 WRFDA

【WRFDA实操第一期】安装 WRFPLUS 和 WRFDA

WW、forever的博客 2037

安卓开发岗全解析:从应用层到Framework的面试核心技术点

在移动互联网技术栈中,安卓开发是一个层次分明且覆盖面极广的领域。很多开发者从UI布局和网络请求入门,但真正决定职业天花板的,往往是对系统底层机制的理解深度。从Java/Kotlin语言基础到四大组件,从Handler消息机制到Binder跨进程通信,再到HAL硬件抽象层、Perfetto性能分析工具和SurfaceFlinger渲染合成,这些概念共同构成了安卓开发的核心知识体系。理解这些原理不仅能帮助开发者写出更高效的代码,也能在面试中准确展现自身技术层级。无论是简单的TextView颜色适配问题,还是复杂

weixin_29185199的博客 82

A*寻路算法的最简单通俗讲解

为什么我的眼里常含泪水?因为我有一个算法不会。为了节约点眼泪,今天我们就来介绍著名的A*寻路算法(或简称A*算法)。 Peter Hart, Nils Nilsson 和 Bertram Raphael 在1968年首次提出了著名的A*算法。A*算法其实是Dijkstra最短路径算法的一种扩展。不一样的是,在A*算法中我们需要使用Heuristics 来导引搜索过程,以期达到更好的表现。 ...

白马负金羁 2万+
上一篇: c++之function和bind详解-SurfaceFlinger学习必备语法基础
下一篇: 深入理解input命令只支持单指,是否可以修改实现多指?-千里马android framework实战开发
千里马学框架
博客等级 码龄6年 1万+粉丝 650原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千里马学框架

帮助你了,就请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值