- 博客(23)
- 收藏
- 关注
原创 Android thermal (8)_thermal service
归纳一下前面的学习内容可以知道,thermal core统管各模块后,拿到温度设置trips,之后就是启动cooling device进行温控。同时,也可以选择向用户空间上报温度。thermal core毕竟时运行再内核中的程序,相较于用户空间来说,资源、程序的复杂度都不能自由发挥。当温度变化上报到用户空间后,HAL层、AP层都能有所发挥。所以,thermal 服务应运而生。thermal 服务可以理解成内核空间对热管理的拓展。
2025-11-18 14:34:19
629
原创 Android thermal (7)_thermal core
thermal core 是 Linux 内核热管理子系统的核心框架,位于 drivers/thermal/thermal_core.c 等文件中。它的主要职责是:统一框架提供热管理的基础框架,协调 热源(sensor/zone) 与 散热设备(cooling device)。将各类硬件温度传感器、风扇、CPU/GPU 降频、设备功耗管理等抽象统一起来。热区管理(Thermal Zone Management)
2025-11-14 10:09:13
931
1
原创 Android thermal (6)_thermal governor
(1)监控 thermal zone 的温度变化(thermal framework 会周期性更新温度)。(2)决定 cooling device 的 target state(比如
2025-11-03 14:16:38
1134
1
原创 Android thermal (5)_cooling device(下)
从 DT 获取 CPU 节点,检查是否有 #cooling-cells。获取 Energy Model (em_cpu_get())。调用 __cpufreq_cooling_register()。分配并初始化 cpufreq_cooling_device。统计 freq table → 设置 max_level。初始化 cooling_ops (get/set state, power2state, state2power 等)。
2025-10-17 09:20:06
843
原创 Android thermal (4)_cooling device(上)
(1)连接 温度 和 动作当 thermal zone 检测温度超过某个 trip point(阈值),它会调用 cooling device 的接口。温度 > 80℃ → CPU 频率降低一个档位(cpufreq cooling device)温度 > 90℃ → GPU 降频(devfreq cooling device)温度 > 95℃ → 打开风扇(fan cooling device)温度 > 100℃ → 强制关机(system shutdown cooling device)
2025-10-15 16:22:37
1097
原创 Android thermal (3)_thermal zone
下面几个结构体,始于thermal zone的创建强相关,均定义在 include/linux/thermal.h。
2025-09-19 09:28:58
1064
原创 Android thermal (2)_thermal sensor
作用:sensor → zone → governor → cooling device → 硬件执行降温,五者构成闭环。sensor 只负责准确、及时地提供温度(并可设置硬件上下限中断),决策由 governor 做,执行由各类 cooling device 完成。:TSADC 更多见于 Rockchip、Amlogic 等 SoC,它就是一个 模拟-数字转换器(ADC) + 热敏二极管/NTC 电阻,用硬件电路把温度转换成电压,再经 ADC 转换成数字温度值。
2025-09-05 10:29:30
773
1
原创 Android thermal (1)_thermal概述
Thermal,中文翻译问“温控”或“热管理”,是Linux内核的重要子系统,可以通过它监控设备温度并及时进行调控防止温度过高导致芯片或者器件损坏。在当前主流电子设备如手机、穿戴手表、眼镜等都需要做热控。通过Thermal子系统,我们可是实时获取到关键器件所在区域的温度,通过“温度+器件工作条件”制定有效的控温策略。比如对某些发热严重的器件降低功率、开启散热方案等等。通俗来说,Thermal子系统就是调节机构,就做这么几个事:(1)发现哪里发热了(2)计算下温度有多热(3)确定是谁发热。
2025-08-30 17:54:30
1229
原创 android屏幕刷新之八
学习SurfaceFlinger这样一整个模块内容,必然无法绕过ISurfaceComposer、SurfaceFlinger这样几个关键了。承接之前的文档,我们继续在framework/native看源码。(1)SurfaceFlinger服务引用入口(2)AIDL接口(3)binder代理定义(4)SurfaceFlinger源码surfaceflinger即作为一个独立进程,也是进行IPC的系统服务。
2025-08-11 14:39:21
883
原创 android屏幕刷新之七
EventThread 负责接收来自 硬件 VSync 信号调度器(VsyncSchedule) 的回调,然后遍历它所管理的多个 EventThreadConnection(一个 App 对应一个),根据 App 的设置(如是否启用、频率等)决定是否通过 BitTube 投递事件。
2025-07-18 14:58:17
1153
原创 android屏幕刷新之六
使用 fourcc 四字符码表示事件类型,便于跨平台、跨模块通信时快速识别事件类型。enum {步骤操作作用获取建立到 SurfaceFlinger 的 binder 通道创建连接请求 SurfaceFlinger 创建事件通道创建 BitTube生成用于接收的 socket fd通道对接将 BitTube 与 SurfaceFlinger 的发送端连接保存连接句柄后续读取事件、控制速率等。
2025-06-13 09:45:33
686
原创 android屏幕刷新之五
功能点说明被挂接到 Looper 的 epoll fd 回调对象实际与 SurfaceFlinger binder 通信的类,负责接收 display 事件initialize完成 binder 连接并注册 fd 到 looper请求下次 VSyncepoll 回调,处理所有事件并分发给子类dispatchVsync 等纯虚函数,由子类实现(如)来调用 Java 方法参数类型说明nsecs_t*输出参数,用于返回最新的 vsync 时间戳输出参数,返回产生该事件的物理显示 ID。
2025-05-28 18:51:49
969
1
原创 android屏幕刷新之四
android_view_DisplayEventReceiver.cpp 实现了 Java 层 DisplayEventReceiver 与 native 层 DisplayEventDispatcher 之间的桥接,是 Android 中 VSync 等显示事件分发机制的核心连接纽带。nativeInit:初始化 native receiver,注册 native fd 到 epoll(Looper),监听 VSync 等事件。桥接 Java 层与 native 层事件接收逻辑的入口。
2025-05-23 12:13:27
1023
原创 android屏幕刷新之三
① 调整、更新数据后,记录当前帧、上一帧的数据信息,如果发生跳帧则申请并等待下一次 VSync 信号到来,然后返回。② 没有发生跳帧,则按照事件类型的优先级执行 CallBack 回调,并传入上一步记录的当前帧的数据信息。
2025-05-16 17:30:32
1085
原创 android屏幕刷新之二
之前从源码跟进activity刷新,在通过setContentView将布局加载到DecorView,并且最后因 ViewRootImpl.requestLayout 请求布局才可以将布局刷新到屏幕。但是对于 View 和 ViewRootImpl 的具体实现,并没有了解。此次,在源码基础上学习该部分内容。android中 View 的刷新绘制通常由三种情况触发:在 Android 的 UI 渲染流程中,View.requestLayout() 和 ViewGroup.requestLayout() 是非常
2025-05-12 14:41:06
1071
原创 Handler消息机制-Looper(system)
接续 “NativeMessageQueue” 部分,在NativeMessageQueue的 JNI 方法实现中,最终几乎全部都是在操作 “” 对象。接下来看一下Looper(system)它如何通过监听和处理消息队列中的事件,确保线程能够按照预定的方式响应各种消息和回调。
2025-04-14 10:57:56
720
原创 Handler消息机制-NativeMessageQueue
Android Handler消息机制,MessageQueue作为消息队列存储Message,都是存放在Java 端的。MessageQueue引入native,为了使用 epoll 机制,在无可执行消息时进行线程阻塞。之前在中知晓,MessageQueue的构造函数会初始化native层MessageQueue。现在进一步探讨这部分内容。
2025-04-14 10:54:29
876
原创 Handler消息机制-Looper
ThreadLocal 是一个线程本地存储(Thread-Local Storage)的类,它允许每个线程拥有自己独立的变量副本,从而避免多线程环境下的竞争条件。ThreadLocal 的核心思想是为每个线程提供一个独立的变量存储空间,线程之间互不干扰。private static Observer sObserver 是一个内部类对象,用于监听 Looper 的消息循环事件。这个机制主要用于调试和性能监控,可以帮助开发者观察消息循环的执行情况,例如消息的分发耗时、消息队列的状态等。/**/**
2025-04-09 15:10:53
935
原创 Handler消息机制-MessageQueue
当消息队列空闲时,会调用 queueIdle() 方法。对于 IdleHandler 这个接口调用,重写queueIdle()函数,在其中实现自定义功能。返回 true 表示继续保留 IdleHandler,下次空闲时再次调用。返回 false 表示移除 IdleHandler,不再调用。
2025-04-09 14:49:49
692
原创 Handler消息机制-Message
Handler 消息处理机制主要由 Handler、Looper、MessageQueue 和 Message 四部分组成。在“Handler消息机制-Handler” 中介绍了Handler部分,本次则学习一下 Message 消息。Message 是 Android 中用于线程间通信的核心类,它是 Handler 消息机制的基本单元。Message 封装了需要传递的数据和任务,并通过 Handler 发送到目标线程的 MessageQueue 中,最终由 Looper 分发,进一步做处理。
2025-04-08 18:46:45
846
原创 Handler消息机制-Handler
Handler 消息处理机制主要由 Handler、Looper、MessageQueue 和 Message 四部分组成。Handler作用:用于发送消息和处理消息。发送消息到 MessageQueue。处理从 Looper 分发的消息。特点:每个 Handler 绑定到一个 Looper,从而绑定到一个线程。可以发送 Message 或 Runnable。Message作用:消息的载体,封装了需要处理的任务或数据。通过 what 字段标识消息类型。通过 obj 字段传递数据。
2025-04-07 16:59:28
1525
1
原创 关于Systrace的学习记录
Choreographer 的引入,主要是配合 Vsync ,给上层 App 的渲染提供一个稳定的 Message 处理的时机,也就是 Vsync 到来的时候 ,系统通过对 Vsync 信号周期的调整,来控制每一帧绘制操作的时机。Android 主线程运行的本质,其实就是 Message 的处理过程,我们的各种操作,包括每一帧的渲染操作,都是通过 Message 的形式发给主线程的 MessageQueue ,MessageQueue 处理完消息继续等下一个消息。启下:负责请求和接收 Vsync 信号。
2024-08-19 09:56:59
1398
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅