perfetto结合源码分析input输入的iq,oq,wq部分

ollama服务暴露公网?三步搞定Nginx反向代理配置(避坑指南) 本文详细介绍了如何通过Nginx反向代理安全地将Ollama服务暴露到公网,避免直接修改OLLAMA_HOST带来的安全隐患。文章提供了从SSL证书部署到高级安全加固的全流程实战指南,包括IP白名单、基础认证、速率限制等企业级安全措施,帮助用户实现安全可靠的外部访问。 阅读详情
AI摘要

本文详细解释了在分析Android系统输入事件时,IQ(InboundQueue)、OQ(OutboundQueue)和WQ(WaitQueue)的概念,以及它们在Systrace和Perfetto工具中的应用,通过源码和实际案例结合进行讲解。

背景:

同学们经常在分析systrace或者perfetto时候,都会面临一个分析iq,oq,wq的问题,这个iq,oq,wq,到底是指的什么呢?
其实这个在input专题的源码分析时候就有讲解过,不过那时候是完全基于源码分析的,没有和systrace或者perfetto结合起来分析,今天马哥就来补充一下这块知识。

复习源码解析iq,oq,wq:

这里可以先看一张网图概况复习一下:
在这里插入图片描述

input正常流程如下:
在这里插入图片描述
一般都是
1、驱动先写入到字节节点
2、systemserver的InputReader线程监听读取节点转换数据,通知InputDispatcher
3、InputDispatcher接受到了数据,然后寻找对应合适窗口进行派发

这里3个过程中,离我们app处理最近的当然是第三个步骤,经常说的iq,oq,wq其实也是属于InputDispatcher类里面的变量

InboundQueue队列(“iq”)中一般放着InputDispatcher从inputreader中拿到的input事件,当然也可以不是inputreader因为有可能事件属于注入的,对应的代码如下:
代码路径:
frameworks/native/services/inputflinger/dispatcher/InputDispatcher.cpp

void InputDispatcher::traceInboundQueueLengthLocked() {
    if (ATRACE_ENABLED()) {
        ATRACE_INT("iq", mInboundQueue.size());
    }
}

可以看到其实这里的iq就是代表InputDispatcher中mInboundQueue大小

OutboundQueue(“oq”)队列里面放的是即将要被派发给各个目标窗口App的事件
注意啦,这里的oq是带着有具体的目标窗口的

void InputDispatcher::traceOutboundQueueLength(const Connection& connection) {
    if (ATRACE_ENABLED()) {
        char counterName[40];
        snprintf(counterName, sizeof(counterName), "oq:%s", connection.getWindowName().c_str());
        ATRACE_INT(counterName, connection.outboundQueue.size());
    }
}

WaitQueue队列里面记录的是已经派发给 App(“wq”),但是 App还在处理没有返回处理成功的事件;
这里基本上和oq一样的

void InputDispatcher::traceWaitQueueLength(const Connection& connection) {
    if (ATRACE_ENABLED()) {
        char counterName[40];
        snprintf(counterName, sizeof(counterName), "wq:%s", connection.getWindowName().c_str());
        ATRACE_INT(counterName, connection.waitQueue.size());
    }
}

perfetto分析手动触摸

前提抓取perfetto条件:
在桌面触摸一个app的图标打开
总体systrace流程图如下:
在这里插入图片描述
再进行挨个详细对照源码复习:

iq部分

在这里插入图片描述

代码地方:
inputreader触发notifyMotion
在这里插入图片描述

在这里插入图片描述

oq部分

需要对事件进行派发,会调用dispatchMotionLocked方法
在这里插入图片描述
dispatchEvnentLocked会调用到prepareDispatchCycleLocked
在这里插入图片描述
prepareDispatchCycleLocked又会调用到enqueueDispatchEntriesLocked
在这里插入图片描述

在这里的enqueueDispatchEntriesLocked中会调用到enqueueDispatchEntryLocked
在这里插入图片描述
这里面会进行调用
connection->outboundQueue.push_back(dispatchEntry.release());
traceOutboundQueueLength(*connection);

wq部分

看看详细trace图
在这里插入图片描述
再看看代码:
enqueueDispatchEntriesLocked执行了enqueueDispatchEntryLocked后会进行调用startDispatchCycleLocked
在这里插入图片描述
startDispatchCycleLocked会进行相关的触摸事件派发
在这里插入图片描述

到此也基本吧iq,oq,wq的代码和trace结合起来看

更多framework实战干货,请关注下面“千里马学框架”

RK3568 MIPI屏幕启动异常:从uboot logo到黑屏的排查与修复 本文详细分析了RK3568平台MIPI屏幕在启动过程中,从uboot阶段正常显示logo到内核阶段黑屏的典型故障。通过硬件测量与软件调试,最终定位问题根源在于电源时序,并提供了在设备树中为屏幕供电的regulator节点添加`regulator-boot-on`属性的关键解决方案,有效解决了因内核启动早期电源管理导致的显示异常。 阅读详情

相关推荐

STM32F103ZE驱动PMW3901光流模块,从SPI配置到数据读取的完整避坑指南

本文详细解析了STM32F103ZE驱动PMW3901光流模块的全过程,从SPI配置、硬件连接到数据读取与处理,提供了完整的避坑指南。重点介绍了SPI参数配置、初始化序列优化、运动数据滤波等关键技巧,帮助开发者快速实现精准的光流检测。

weixin_42631411的博客 516

inputDispatcher中iq、wq、oq、mAnrTraker的添加移除时机

答:上一次的事件的超时会被添加到anrTrack队列中,但是处理anr的源头调用还是inputDispatcher的looponce循环回调中,只有inputReader传递来新的触摸事件时才会,触发新一轮的anr检测。

weixin_45024658的博客 801

新手必看:用Simulink搭建飞跨电容三电平逆变器的完整流程(附SPWM配置技巧)

本文详细介绍了使用Simulink搭建飞跨电容三电平逆变器(FCNPC)的完整流程,特别聚焦于SPWM调制策略的配置技巧。通过模块拆解、参数设置和波形优化的三步法,配合实操截图和典型参数表,帮助新手快速掌握多电平逆变器的建模与仿真技能,适用于电力电子学习和项目开发。

weixin_30664051的博客 288

Android14应用启动流程(源码+Trace)

应用启动过程快的都不需要一秒钟,但这整个过程的执行是比较复杂的,无论是对手机厂商、应用开发来说启动速度也是核心用户体验指标之一,本文采用Android14源码与perfetto工具进行解析。

Android系统优化 5080

四十二、Fluent欧拉模型流化床模拟:从基础设置到颗粒动力学解析

本文详细解析了Fluent欧拉模型在流化床模拟中的应用,从基础概念到颗粒动力学设置全面覆盖。重点介绍了欧拉模型的颗粒温度概念、多相流配置技巧以及关键参数优化策略,帮助工程师准确模拟气固两相流动现象。通过实用案例演示了网格检查、求解器配置和边界条件设置的最佳实践。

weixin_27303545的博客 445

pytorch中dataloader的num_workers参数

结论速递 在Windows系统中,num_workers参数建议设为0,在Linux系统则不需担心。 1 问题描述 在之前的任务超大图上的节点表征学习中,使用PyG库用于数据加载的DataLoader,ClusterLoader等类时,会涉及到参数num_workers。在不同系统环境试验该参数的设定值时,会出现不同的结果 colab(Linux),设为12 有warning message,提示num_workers参数设置不合理,不影响继续运行 /usr/local/lib/python3.7/di

qq_40990057的博客 1万+

[Perfetto]应用冷启动流程分析

launcher3通过跨进程调用AMS启动应用的流程,首先是先pause launcher3, 因为目标应用是冷启动,需要通过socket方式通知zygote先fork出新的应用的进程,新应用进程执行自己ActivityThread的main方法,初始化自己的消息队列等,然后通过跨进程bindApplication通知AMS,将该应用加入管理记录,然后继续跨进程通知应用往下执行相应的生命周期。应用执行完相应的生命周期后,开始第一帧绘制,然后显示到屏幕上,冷启动完成。

qq_40731414的博客 1229

建立时间与保持时间

建立时间与保持时间的计算 文章目录1、建立时间与保持时间概述及模型2、寄存器之间数据传输时建立时间与保持时间3、寄存器之间数据传输时建立时间余量与保持时间余量计算4、 FPGA允许的最大时钟频率或最小时钟周期5、计算FPGA时钟所允许的最大频率或最小时钟周期6、违反建立和保持时间会发生什么? 1、建立时间与保持时间概述及模型 建立时间(Tsu): 在时钟采样之前,输入必须稳定一段时间,该时间量称为建立时间。 理想最优建立时间: 保持时间(Th): 在时钟沿之后输入到触发器稳定所需的最短时间。 理想最优

Crazzy_M的博客 3万+

Perfetto看应用卡顿问题HQ

明确问题场景:了解卡顿的具体表现和复现步骤录制Trace:选择合适的配置和录制方法定位卡顿时间点:使用多种方法找到卡顿发生的时间分析主线程:查看主线程状态,找到阻塞原因分析渲染线程:查看RenderThread状态,找到渲染瓶颈分析系统资源:查看CPU、内存、GPU使用情况定位根本原因:综合分析,找到卡顿的根本原因提供优化建议:给出针对性的优化方案通过系统化的分析流程,可以高效地定位和解决应用卡顿问题。最后更新:2024年。

renjianbo2016的博客 561

EMD (经验模态分解) 在 C++ 中的实现指南

EMD 是由 Norden E. Huang 等人在1998年提出的一种适用于非线性和非平稳信号的分析方法。对称性:IMF 的上下包络对称。零交叉点:IMF 的零交叉点数量与极值点数量相同或相差一个。本文详细介绍了如何在C++中实现EMD,包括理论背景、算法步骤、代码实现和优化等内容。通过丰富的代码示例和详细的解释,希望能够帮助读者掌握EMD的基本原理,并能够在实际项目中灵活应用。未来,随着信号处理技术的不断发展,EMD及其变种(如EEMD、CEEMDAN等)将继续在各个领域发挥重要作用。

qq_38334677的博客 1750

Python爬虫实战:Boss直聘职位数据采集实战 - Playwright + 结构化解析完整方案(附CSV导出 + SQLite持久化存储)!

我长期专注 Python 爬虫工程化实战,主理专栏 《Python爬虫实战》:从采集策略到反爬对抗,从数据清洗到分布式调度,持续输出可复用的方法论与可落地案例。内容主打一个“能跑、能用、能扩展”,让数据价值真正做到——抓得到、洗得净、用得上。

喵手的博客 2189

卡顿掉帧问题分析之工具篇

从上面的分析可以看到,谷歌原生在Android系统的很多系统关键流程上都添加了相关的,以观察这些流程执行的耗时情况。但是这些信息覆盖的范围毕竟是有限的,有时候并不能满足我们的分析需求。比如我们开发者想观察自己的一些代码逻辑执行的耗时情况,就需要自己定义一些去度量,这个Systrace机制本身是支持的。如何在代码中添加自定义的信息呢?本着知其然、知其所以然的态度,本小节中我们来简单分析一下系统Systrace机制的原理,看看一份Systrace文件到底是怎么生成的?我们知道Android系统底层是基于。

chuyouyinghe的专栏 4442

21天教你学会PCIe专栏(17)--多功能设备

1.1 定义多功能PCIe设备:多功能PCIe设备是指在一个物理设备中集成了多种功能的设备。这些功能可以通过不同的PCIe功能(Function)来实现,每个功能可以独立配置和管理。1.2 优点资源利用率:通过集成多种功能,减少物理设备的数量,提高资源利用率。成本效益:减少硬件成本和功耗,提高系统的经济性。灵活性:用户可以根据需要启用或禁用不同的功能,提高系统的灵活性。可扩展性:通过增加新的功能,扩展设备的功能,提高系统的可扩展性。1.3 应用场景网络设备。

xiaoheshang_123的博客 531

性能分析工具 之 Perfetto基本使用

Perfetto是很好的性能分析工具,发展很快。它不仅可以看systrace,也可以将logcat也一起提取出来,方便与其他信息放在同一个时间轴上去分析。它也可以分析memory问题,如ion 和dma_buf 泄露。Perfetto是一个高效的性能分析工具,可以提高程序员分析问题的效率,希望大家可以掌握。

qrx941017的博客 4万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Android Perfetto 系列

Perfetto 是一个高级的开源工具,专为性能监测和分析而设计。它配备了一整套服务和库,能够捕获和记录系统层面以及应用程序层面的活动数据。此外,Perfetto 还提供了内存分析工具,既适用于本地应用也适用于 Java 环境。它的一个强大功能是,可以通过 SQL 查询库来分析跟踪数据,让你能够深入理解性能数据背后的细节。为了更好地处理和理解大规模数据集,Perfetto 还提供了一个基于 Web 的用户界面,使你能够直观地可视化和探索多 GB 大小的跟踪文件。

生活需要深度 2950

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

01_Systrace 应用启动时间的三种方法

和你一起终身学习,这里是程序员Android经典好文推荐,通过阅读本文,您将收获以下知识点:一、看这篇文章收获的关键字二、方法一三、方法二四、方法三一、看了这篇文章的收获关键字iq、oq、...

程序员Android 2718

Input事件流程分析

IMS创建完毕之后,在SystemServer里面会用其来构建WMS。之前已经看到,构造WMS的时候将IMS传了进去 private WindowManagerService(Context context, InputManagerService inputManager, boolean haveInputMethods, boolean showBootM...

liu362732346的博客 1255

算法一看就懂之「 队列 」

https://www.fgba.net/sitemap.xml

iqifenxia的博客 532

inpu超时机制

input的超时检测机制跟service、broadcast、provider截然不同,为了更好的理解input过程先来介绍两个重要线程的相关工作: InputReader线程负责通过EventHub(监听目录/dev/input)读取输入事件,一旦监听到输入事件则放入到InputDispatcher的mInBoundQueue队列,并通知其处理该事件; InputDispatcher线程负责将接收到的输入事件分发给目标应用窗口,分发过程使用到3个事件队列: mInBoundQueue用于记录Inpu

qq_42894864的博客 669

智能汽车的“软肋”:车载系统漏洞分析与安全防护框架初探

先做资产梳理与攻击面测绘,明确“有什么、暴露在哪”;对高风险链路(OTA、车控 API、诊断服务)优先加固;把安全左移,在架构设计阶段就引入威胁建模;建立可追溯的 SBOM(软件物料清单),提升供应链透明度;用 OTA 能力反哺安全运营,缩短漏洞修复周期。智能汽车的安全是一场持续的攻防博弈。车载系统的“软肋”并非不可弥补,关键在于把安全从“事后补丁”变成“内生能力”。只有组织、流程与技术三者协同,才能在软件定义汽车的时代守住底线。

2301_78078966的博客 43

Android Visualizer 实战:把声音画出来

是系统提供的音频效果(AudioEffect)之一。它挂在音频链路上,,把数据回吐给你——画波形、画频谱、做响度表。

Android的专栏 312

Android 开发入门实践(十三):用 Intent、UiState 和 Reducer 理解 MVI 的状态更新

本文记录第141—145课对MVI架构的入门实践,通过“返回列表”功能逐步构建意图(NewsIntent)、状态(NewsUiState)与状态转换(reduce)机制。基于单向数据流,用户操作生成意图,ViewModel通过Reducer根据旧状态计算新状态,并通过StateFlow更新Compose界面。代码实现清晰分离关注点,强化了对状态管理、事件驱动与数据流的理解。

Easyhood的博客 342

Android Message源码阅读

本文梳理了Android Handler机制中Message的核心设计:链表结构、消息复用池(sPool)及回收机制,重点解析了异步消息与同步屏障(SyncBarrier)的协同机制。当主线程需优先处理UI绘制等高优先级任务时,系统通过postSyncBarrier插入屏障,使Looper跳过普通同步消息,优先执行标记为异步的UI渲染任务,确保帧率流畅。该机制是保障Android界面响应性的关键技术之一。

u012116089的博客 214

RK-RK3572-Android16- 编译打包优化-OTA整包-差分包打包

这里主要记录一下 RK3572 在Android16 上面进行OTA升级的整包和差分包制作经验的一个分享,整理知识点,方便后续自己和其它同事开发提高工作效率、直接使用。不管哪一个平台,MTK 也好、RK也好 基本上都是不同Android版本各个子系统之间还是有一点点区别的,所以有必要记录整理知识点,方便提高开发效率、生产效率。针对OTA升级问题 ,再一次说明还是要看官方提供的文档,按照文档来。

十年饮冰,难凉热血 206

安卓APK下载后安装全流程:从点击下载到第一次启动,每一步的检查点

这套流程听起来繁琐,但真正需要每次都做的只有来源核对和签名校验两步,其他都是出问题时才查。养成习惯之后,能挡掉绝大多数"装了垃圾包""装完闪退"的情况。如果要省事,直接用这类会标注包名、版本号和校验信息的站点,比在搜索结果里挨个试要稳得多。

qq362196705的专栏 172

Android Laya 与 Native Bridge:页面识别、双向通信、协议设计和崩溃定位

Laya 与 Native 通信的难点不在于某个或的写法,而在于边界:页面来源是否可信、协议是否明确、线程是否正确、请求是否幂等、页面是否仍然存在、日志是否能关联一次完整请求。建立这些边界后,才能把“页面白屏”“按钮无响应”“重复消息”和“Native 崩溃”拆成可验证的层次,并沿着真实调用链找到根因。

路在脚下,幸福在手中,莫贪!!!!! 167

BUUCTF-菜刀流量-MISC-学习笔记

从 1970-01-01 00:00:00 UTC 起算的秒数,——Wireshark 直接告诉你它回答的是谁;由表可知道,96帧返回了flag.rar。, 代表删除键,先删了4次,又删了1次。所以密码是:SuperMaster。解析128帧的响应,即133帧。所以这是一个标准抓包文件,用。解压压缩包拿到html代码。:选中 128 帧,展开。:128 和 131 的。能把一问一答放在一起看;是八进制(Oct)的数字。(或 TCP 层)看到。对比一下ASCii 码表。

晓梦林的博客 80
上一篇: android.anim和android.anim.lf两个线程解析
下一篇: scrcpy编译过程-手把手教你做车机手机投屏开发
千里马学框架
博客等级 码龄6年 1万+粉丝 651原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

千里马学框架

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

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

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

打赏作者

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

抵扣说明:

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

余额充值