<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[镇元子的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/u013574207</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; u013574207]]></copyright><item><title><![CDATA[Opengl ES 图形编程]]></title><link>https://blog.youkuaiyun.com/u013574207/article/details/157427896</link><guid>https://blog.youkuaiyun.com/u013574207/article/details/157427896</guid><author>u013574207</author><pubDate>Tue, 27 Jan 2026 10:45:59 +0800</pubDate><description><![CDATA[OpenGL是一个跨平台的图形库，通过标准接口调用GPU实现高性能2D/3D图形渲染。本文演示了使用OpenGL ES 3.0绘制动态彩色三角形的过程，重点解析了顶点着色器的工作原理。着色器采用GLSL语言编写，包含顶点位置计算和颜色处理功能，通过输入顶点坐标和变换矩阵，输出处理后的顶点位置和颜色值。文中详细介绍了GLSL的数据类型和着色器中的关键变量，包括输入变量vPosition（顶点坐标）和统一变量uMVPMatrix（变换矩阵），并展示了如何通过main函数完成顶点变换和颜色计算的核心渲染逻辑。]]></description><category></category></item><item><title><![CDATA[android display 笔记（十四）VAU 和GSP 分别代表什么]]></title><link>https://blog.youkuaiyun.com/u013574207/article/details/147991822</link><guid>https://blog.youkuaiyun.com/u013574207/article/details/147991822</guid><author>u013574207</author><pubDate>Thu, 15 May 2025 20:50:56 +0800</pubDate><description><![CDATA[GSP（Graphics/GPU Subsystem Processor）是SoC中负责图形渲染、显示合成和图像处理的硬件模块，能够分担GPU或CPU的图形计算负载，提升能效比。它可能包含MMU（内存管理单元），用于管理虚拟地址到物理地址的映射，常见于Android的显示合成和视频播放场景。VAU（Virtual Address Unit）是MMU的一部分，负责虚拟地址到物理地址的转换和内存访问权限检查，防止非法内存访问并支持多进程隔离。当检测到非法访问时，VAU会触发中断（VAU_INT），通知驱动处理。]]></description><category></category></item><item><title><![CDATA[android display 笔记（十三）surfcaeflinger的DEQUEUED、QUEUED]]></title><link>https://blog.youkuaiyun.com/u013574207/article/details/147166260</link><guid>https://blog.youkuaiyun.com/u013574207/article/details/147166260</guid><author>u013574207</author><pubDate>Sat, 12 Apr 2025 15:41:55 +0800</pubDate><description><![CDATA[DEQUEUED	：缓冲区被生产者获取，正在填充数据（如 GPU 渲染或 Camera 写入）	dequeueBuffer()	应用调用 Canvas.lock() 或 OpenGL 渲染前。ACQUIRED	：消费者（SurfaceFlinger）已获取缓冲区，准备合成或显示	acquireBuffer()	SurfaceFlinger 正在合成该帧。消费者：SurfaceFlinger 通过 acquireBuffer 获取已填充的缓冲区并合成显示。VSync 信号丢失或合成耗时过长。]]></description><category></category></item><item><title><![CDATA[android display 笔记（十二）CPU，GPU,DPU的区别]]></title><link>https://blog.youkuaiyun.com/u013574207/article/details/147166185</link><guid>https://blog.youkuaiyun.com/u013574207/article/details/147166185</guid><author>u013574207</author><pubDate>Sat, 12 Apr 2025 15:34:47 +0800</pubDate><description><![CDATA[硬件加速合成：替代 GPU 完成 Overlay、缩放、旋转等操作。图形渲染：顶点着色、像素填充、光线追踪。低延迟：优先快速响应单线程任务。需要并行计算/图形 → GPU。需要通用计算 → CPU。需要显示优化 → DPU。]]></description><category></category></item><item><title><![CDATA[android display 笔记（十一）surfaceflinger 如何将图层传到lcd驱动的呢？]]></title><link>https://blog.youkuaiyun.com/u013574207/article/details/147166098</link><guid>https://blog.youkuaiyun.com/u013574207/article/details/147166098</guid><author>u013574207</author><pubDate>Sat, 12 Apr 2025 15:32:20 +0800</pubDate><description><![CDATA[需 GPU 合成的图层：标记为 HWC2::Composition::Client，由 SurfaceFlinger 通过 OpenGL ES/Vulkan 渲染到临时缓冲区。LCD 驱动 从显存（Framebuffer）或 Overlay 缓冲区读取像素数据，通过 MIPI-DSI/RGB 接口 输出到屏幕。支持硬件合成的图层：标记为 HWC2::Composition::Device（由显示控制器直接处理）。配置 CRTC（显示控制器）的时序参数（VSync/HSync/像素时钟）。]]></description><category></category></item><item><title><![CDATA[android display 笔记（十）surfaceflinger与HWC的关系]]></title><link>https://blog.youkuaiyun.com/u013574207/article/details/147166004</link><guid>https://blog.youkuaiyun.com/u013574207/article/details/147166004</guid><author>u013574207</author><pubDate>Sat, 12 Apr 2025 15:27:49 +0800</pubDate><description><![CDATA[在 Android 图形系统中，SurfaceFlinger 和 Hardware Composer (HWC) 是紧密协作的两个核心组件，共同负责屏幕内容的合成与显示。硬件合成（Overlay）：由显示控制器（Display Controller）直接处理（性能最优）。GPU合成：无法硬件合成时（如复杂变换），回退到 GPU 渲染（通过 OpenGL ES）。SurfaceFlinger 根据 HWC 的能力调整图层分配（如避免频繁切换合成方式）。混合合成：部分图层用 Overlay，部分用 GPU。]]></description><category></category></item><item><title><![CDATA[android display 笔记（九）三重缓冲杂谈]]></title><link>https://blog.youkuaiyun.com/u013574207/article/details/146363894</link><guid>https://blog.youkuaiyun.com/u013574207/article/details/146363894</guid><author>u013574207</author><pubDate>Wed, 19 Mar 2025 11:33:50 +0800</pubDate><description><![CDATA[双缓存意味着要使用两个缓存区，其中一个称为 Front Buffer，另外一个称为 Back Buffer。UI 总是先在 Back Buffer 中绘制，然后再和 Front Buffer 交换，渲染到显示设备中。理想情况下，这样一个刷新会在 16ms 内完成。那什么是Triple Buffer呢？]]></description><category></category></item><item><title><![CDATA[android display 笔记（八）WMS与SurfaceFlinger交互]]></title><link>https://blog.youkuaiyun.com/u013574207/article/details/141710905</link><guid>https://blog.youkuaiyun.com/u013574207/article/details/141710905</guid><author>u013574207</author><pubDate>Wed, 04 Sep 2024 14:58:41 +0800</pubDate><description><![CDATA[在Android系统中由WindowManagerService也就是WMS承担窗口位置的管理。]]></description><category></category></item><item><title><![CDATA[android display 笔记（七）图层]]></title><link>https://blog.youkuaiyun.com/u013574207/article/details/141163106</link><guid>https://blog.youkuaiyun.com/u013574207/article/details/141163106</guid><author>u013574207</author><pubDate>Fri, 30 Aug 2024 09:55:15 +0800</pubDate><description><![CDATA[SurfaceControl和Surface都可以表示窗口，窗口管理服务通过SurfaceControl控制图层的状态，应用进程通过Surface向图层传送缓冲数据。创建图层是在SurfaceComposerClient.cpp中的createSurface中，生产图形需要先创建窗口，创建窗口时会请求surfaceflinger创建图层。然后对mStatus进行判断，如果是NO_ERROR，则调用mClient的接口createSurface，并返回前面声明的result。]]></description><category></category></item><item><title><![CDATA[android display 笔记（六）SurfaceFlinger初始化]]></title><link>https://blog.youkuaiyun.com/u013574207/article/details/141054881</link><guid>https://blog.youkuaiyun.com/u013574207/article/details/141054881</guid><author>u013574207</author><pubDate>Tue, 13 Aug 2024 14:16:31 +0800</pubDate><description><![CDATA[getComposerService（）：向服务管理进程查询得到ISurfaceComposer对象，客户进程可以通过该对象向Surfaceflinger发送请求。什么是客户进程，指的是使用SurfaceFlinger服务的进程，通常是通过SurfaceComposerClient与SurfaceFlinger进程交互。在/frameworks/native/services/surfaceflinger/路径下可以看到 与surfaceflinger 很多相关的文件。创建新线程并加入到线程池。]]></description><category></category></item><item><title><![CDATA[android display 笔记（五）HWC（Hardware Composer）]]></title><link>https://blog.youkuaiyun.com/u013574207/article/details/140796225</link><guid>https://blog.youkuaiyun.com/u013574207/article/details/140796225</guid><author>u013574207</author><pubDate>Thu, 08 Aug 2024 17:15:02 +0800</pubDate><description><![CDATA[简单来说HWC是用来合成图形和显示图形的，可以把多个图形缓存传给硬件混合渲染器，让硬件混合渲染器执行合成操作，显示图形就是直接将图形缓存显示到屏幕。IComposer 用于客户进程与HWC进程建立通信链接,createClient 用于创建IComposerClient 的对象。在IComposerClient接口类中通过registerCallback注册回调，客户进程注册回调后就可以使用HWC进程事件。----------------后续有时间再补充。onRefresh：通知客户进程提供新的帧缓存。]]></description><category></category></item><item><title><![CDATA[android display 笔记（四）hardware 硬件抽象层]]></title><link>https://blog.youkuaiyun.com/u013574207/article/details/140691130</link><guid>https://blog.youkuaiyun.com/u013574207/article/details/140691130</guid><author>u013574207</author><pubDate>Mon, 29 Jul 2024 15:54:03 +0800</pubDate><description><![CDATA[源码：android14硬件抽象层的接口定义在 hardware.h定义了以下三个结构体其中还有 hw_get_module方法，该方法用于获取模块第一个参数获取模块的 id，根据id查找对应库文件，匹配成功后通过第二个参数返回模块对象。]]></description><category></category></item><item><title><![CDATA[android framework input 及多指协议]]></title><link>https://blog.youkuaiyun.com/u013574207/article/details/139409430</link><guid>https://blog.youkuaiyun.com/u013574207/article/details/139409430</guid><author>u013574207</author><pubDate>Mon, 03 Jun 2024 15:04:17 +0800</pubDate><description><![CDATA[input问题排查，如果数据能打印出来，则是framework 问题，如果没有数据打印出来，则要看驱动问题。ABS_MT_SLOT ，其value 代表手指id，可以代表不同的手指。每个slot与一个id对应，一个非负数表一此接触，-1表示接触结束。以上数据格式：时间，具体节点文件名，事件类型，事件值。SYN_REPORT：代表一个事件的结束。0004/0005:代表一个事件的开始。触碰按键，其值是DOWN或者UP。相对于屏幕中心的x,y坐标。]]></description><category></category></item><item><title><![CDATA[Android BufferQueue]]></title><link>https://blog.youkuaiyun.com/u013574207/article/details/136654435</link><guid>https://blog.youkuaiyun.com/u013574207/article/details/136654435</guid><author>u013574207</author><pubDate>Wed, 29 May 2024 17:04:46 +0800</pubDate><description><![CDATA[图形数据的消费者也可以不用等BufferQueue的回调通知，每次都从BufferQueue中尝试获取数据，获取失败则尝试，只是这样效率比较低，需要不断的轮训BufferQueue（因为BufferQueue有同步阻塞和非同步阻塞两种机种，在非同步阻塞机制下获取数据失败不会阻塞该线程直到有数据才唤醒该线程，而是直接返回-1）。在新的GraphicBuffer入队BufferQueue时，BufferQueue会通过回调通知图形数据的消费者，有新的图形数据被生产出来了。]]></description><category></category></item><item><title><![CDATA[android display 笔记（三）WMS]]></title><link>https://blog.youkuaiyun.com/u013574207/article/details/134124629</link><guid>https://blog.youkuaiyun.com/u013574207/article/details/134124629</guid><author>u013574207</author><pubDate>Fri, 03 Nov 2023 19:43:00 +0800</pubDate><description><![CDATA[总结，WMS的main方法在startOtherServices中，而startOtherServices在SystemServer的run方法中，运行在system_server线程中。该代码执行了WMS的main方法，会在内部创建一个WMS。其中有一个参数inputManager也是在startOtherServices中创建的，如下。回到上述的WindowManagerService main中。在SystemServer中的main方法中，调用run方法。用来记录学习wms，后续会一点一点更新。]]></description><category></category></item><item><title><![CDATA[android display笔记（二）winscope的使用]]></title><link>https://blog.youkuaiyun.com/u013574207/article/details/133934258</link><guid>https://blog.youkuaiyun.com/u013574207/article/details/133934258</guid><author>u013574207</author><pubDate>Fri, 20 Oct 2023 11:03:31 +0800</pubDate><description><![CDATA[跟踪记录会被写入 /data/misc/wmtrace/wm_trace.winscope 和 /data/misc/wmtrace/layers_trace.winscope，同时还会包含在错误报告中。通常使用prebuilts/misc/common/winscope下的winscope.html。窗口转换完成后，打开快捷设置，然后点按 Winscope 跟踪记录以停用跟踪记录。依次转到开发者选项 > 快捷设置开发者图块。点按 Winscope 跟踪以启用跟踪。点击Add FILE。]]></description><category></category></item><item><title><![CDATA[android display笔记(一)Window以及WindowManager]]></title><link>https://blog.youkuaiyun.com/u013574207/article/details/133921524</link><guid>https://blog.youkuaiyun.com/u013574207/article/details/133921524</guid><author>u013574207</author><pubDate>Thu, 19 Oct 2023 20:22:45 +0800</pubDate><description><![CDATA[**什么时候会用到window，当桌面需要显示一个类似与悬浮窗的东西，那就需要用到Window，而创建window则就需要windowManager ***]]></description><category></category></item><item><title><![CDATA[dumpsys window]]></title><link>https://blog.youkuaiyun.com/u013574207/article/details/132271752</link><guid>https://blog.youkuaiyun.com/u013574207/article/details/132271752</guid><author>u013574207</author><pubDate>Mon, 14 Aug 2023 10:57:38 +0800</pubDate><description><![CDATA[dump出当前所有的窗口信息。查询当前活动包名以及类名。]]></description><category></category></item><item><title><![CDATA[闪屏问题常见处理思路]]></title><link>https://blog.youkuaiyun.com/u013574207/article/details/131404851</link><guid>https://blog.youkuaiyun.com/u013574207/article/details/131404851</guid><author>u013574207</author><pubDate>Mon, 26 Jun 2023 20:23:45 +0800</pubDate><description><![CDATA[严格从技术来说,闪屏问题不能归为一类问题,他是因为屏幕快速变化导致用户看起来显示不正常的问题(很多测试者甚至会将花屏问题当做闪屏问题,这里不做讨论).它可能是多种完全不同的原因导致的,硬件问题,驱动问题,绘制问题,合成问题,窗口调度问题,activity问题,以及app本身的逻辑问题都有可能导致用户看起来屏幕闪屏的感觉,其中百分之九十以上闪屏的问题是由后三种问题导致的.闪屏问题作为Android的一类常见问题,原因复杂多样.我们在这里整理一下如何分析闪屏问题,找到具体导致闪屏问题的原因.]]></description><category></category></item><item><title><![CDATA[android LCD背光服务修改自适应背光最低，最高亮度]]></title><link>https://blog.youkuaiyun.com/u013574207/article/details/127213208</link><guid>https://blog.youkuaiyun.com/u013574207/article/details/127213208</guid><author>u013574207</author><pubDate>Sat, 08 Oct 2022 17:52:40 +0800</pubDate><description><![CDATA[文件路径：/device/sprd/sharkl3/moverlay/device/base/frameworks/base/core/res/res/values/config.xml。在学习lcd背光服务的时候发现的背光亮度默认修改的文件，并全编了一下试试，结果成功了，现在已经把亮度调到最低了，但还是很亮。可以看到minimumBacklight最小背光值在配置文件中，默认的是6，我们进行修改即可。BrightnessMappingStrategy 亮度映射策略，]]></description><category></category></item></channel></rss>