CN115309465B - 一种跨运行环境的低延迟鼠标驱动优化方法 - Google Patents
一种跨运行环境的低延迟鼠标驱动优化方法 Download PDFInfo
- Publication number
- CN115309465B CN115309465B CN202211238348.5A CN202211238348A CN115309465B CN 115309465 B CN115309465 B CN 115309465B CN 202211238348 A CN202211238348 A CN 202211238348A CN 115309465 B CN115309465 B CN 115309465B
- Authority
- CN
- China
- Prior art keywords
- mouse
- android
- android application
- window
- ordern
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/4401—Bootstrapping
- G06F9/4411—Configuring for operating with peripheral devices; Loading of device drivers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/01—Input arrangements or combined input and output arrangements for interaction between user and computer
- G06F3/03—Arrangements for converting the position or the displacement of a member into a coded form
- G06F3/033—Pointing devices displaced or positioned by the user, e.g. mice, trackballs, pens or joysticks; Accessories therefor
- G06F3/0354—Pointing devices displaced or positioned by the user, e.g. mice, trackballs, pens or joysticks; Accessories therefor with detection of 2D relative movements between the device, or an operating part thereof, and a plane or surface, e.g. 2D mice, trackballs, pens or pucks
- G06F3/03543—Mice or pucks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/01—Input arrangements or combined input and output arrangements for interaction between user and computer
- G06F3/03—Arrangements for converting the position or the displacement of a member into a coded form
- G06F3/033—Pointing devices displaced or positioned by the user, e.g. mice, trackballs, pens or joysticks; Accessories therefor
- G06F3/038—Control and interface arrangements therefor, e.g. drivers or device-embedded control circuitry
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/451—Execution arrangements for user interfaces
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Human Computer Interaction (AREA)
- Computer Security & Cryptography (AREA)
- Position Input By Displaying (AREA)
Abstract
本发明公开了一种跨运行环境的低延迟鼠标驱动优化方法,通过令Linux***的鼠标驱动同时维护标准设备文件及安卓设备文件,并仅将与安卓应用相关的能够操作安卓视图的鼠标事件写入安卓设备文件,同时安卓兼容环境内的输入管理服务根据安卓设备文件的信息构造安卓***鼠标事件再将其发送至对应的安卓应用,实现了安卓兼容环境对鼠标事件的快速处理,减少了Linux侧与安卓侧的鼠标事件处理流程,降低了安卓应用对鼠标移动、单击等操作的响应延迟,改善了用户的使用体验。
Description
技术领域
本发明属于桌面操作***上运行移动应用的开发技术领域,具体涉及一种跨运行环境的低延迟鼠标驱动优化方法。
背景技术
Linux操作***安卓兼容环境(下文简称安卓兼容环境)是一种在Linux操作***上运行安卓应用的技术,对丰富Linux操作***应用生态有着重要的意义。通常情况下,典型的安卓兼容环境主要包括安卓应用显示单元和安卓应用兼容服务,安卓应用显示单元用于在桌面操作***上实现安卓应用的用户界面,安卓应用兼容服务用于提供运行于桌面操作***上的安卓兼容环境,通过安卓应用显示单元与安卓应用兼容服务的相互配合实现安卓应用在桌面操作***上的有效运行,例如,现有安卓兼容环境的实现方案有xDroid,它包括xDroidUI和xDroidServer,xDroidUI为安卓应用显示单元,xDroidServer为安卓应用兼容服务,通过xDroid与xDroidUI的配合即可实现安卓应用与Linux操作***的兼容。
现有安卓兼容环境中当用户使用鼠标操作时,Linux***内核的鼠标驱动将接收到鼠标硬件的输入事件,然后创建鼠标设备文件,同时将鼠标设备文件传递到用户态,并将输入事件中的信息写入鼠标设备文件中;处于用户态的窗口管理器(如X11或Wayland)持续监听鼠标设备文件内的数据,当读取到鼠标设备文件存在数据时,通过计算鼠标坐标获取当前鼠标操作对应的应用后再将鼠标输入信息传递至对应的应用;当运行在Linux***内的安卓应用所对应的Linux窗口应用(如xDroidUI)收到鼠标输入信息时,Linux窗口应用完成坐标的偏移处理后将其转换为安卓***内的Touch事件,再通过RPC或Pipe等方式将Touch事件传递至安卓兼容环境内;安卓兼容环境内InputFlinger服务再将接收到的Touch事件向上传递至安卓兼容环境的框架中,安卓兼容环境的框架再通过坐标计算、window/view的遍历等一系列操作将Touch事件传递至目标视图;最后由目标视图完成对Touch事件的处理。
由此可见,在Linux***中使用鼠标操作安卓应用时,Linux***内核无法直接将鼠标事件发送至安卓兼容环境内,而是需要经过较长的转发处理链条才能实现,转发过程涉及的相关进程较多,因此会在一定程度上影响Linux***及安卓应用的运行性能,降低用户在Linux***上使用安卓应用的体验。
发明内容
有鉴于此,本发明提供了一种跨运行环境的低延迟鼠标驱动优化方法,能够实现Linux***内核直接将鼠标事件的相关信息传递至安卓兼容环境内。
本发明提供的一种跨运行环境的低延迟鼠标驱动优化方法,包括以下步骤:
步骤1、在Linux***初始化鼠标驱动时创建标准设备文件及安卓设备文件,并将安卓设备文件导入安卓兼容环境内;新建安卓应用窗口列表,所述安卓应用窗口列表用于记录安卓应用窗口的TaskID、窗口矩形信息及安卓内部序列Z-OrderN,所述窗口矩形信息包括安卓应用窗口对应视图的左上角坐标和窗口大小;
步骤2、新建安卓应用窗口时,安卓应用显示单元计算所有安卓应用窗口的Z-OrderN,由所有安卓应用窗口的TaskID及Z-OrderN组成Z-OrderN序列对;将由新建安卓应用窗口的窗口矩形信息、TaskID及Z-OrderN序列对组成的新建窗口消息发送至鼠标驱动;
关闭安卓应用窗口时,安卓应用显示单元计算所有安卓应用窗口的Z-OrderN,将由当前安卓应用窗口的TaskID及Z-OrderN序列对组成的关闭窗口消息发送至鼠标驱动;
最小化安卓应用窗口时,安卓应用显示单元计算所有安卓应用窗口的Z-OrderN,再将由当前安卓应用窗口的TaskID及Z-OrderN序列对组成的最小化窗口消息发送至鼠标驱动;
当安卓应用显示单元接收到鼠标按下事件时,安卓应用显示单元计算所有安卓应用窗口的Z-OrderN,再将由Z-OrderN序列对组成的鼠标按下消息发送至鼠标驱动;
当安卓应用显示单元接收到鼠标按下事件及改变大小事件时,安卓应用显示单元计算所有安卓应用窗口的Z-OrderN,再将由Z-OrderN序列对组成的停止写入消息发送至鼠标驱动;
当安卓应用显示单元接收到鼠标按下事件及鼠标拖拽事件时,安卓应用显示单元计算所有安卓应用窗口的Z-OrderN,再将Z-OrderN序列对组成的停止写入消息发送至鼠标驱动;
当安卓应用显示单元接收到鼠标抬起事件时,如果此前已收到改变大小事件或鼠标拖拽事件则获取当前安卓应用窗口的窗口矩形信息,并计算所有安卓应用窗口的Z-OrderN,再将由当前安卓应用窗口的TaskID、窗口矩形信息及Z-OrderN序列对组成的鼠标抬起消息发送至鼠标驱动;如果此前未收到改变大小事件及鼠标拖拽事件则计算所有安卓应用窗口的Z-OrderN,再将由当前安卓应用窗口的TaskID及Z-OrderN序列对组成的鼠标抬起消息发送至鼠标驱动;
当安卓应用显示单元接收到安卓应用窗口状态变化事件时,安卓应用显示单元计算所有安卓应用窗口的Z-OrderN,再将Z-OrderN序列对组成的更新安卓应用窗口列表消息发送至鼠标驱动;
步骤3、当鼠标驱动接收到新建窗口消息时,将新建安卓应用窗口的窗口矩形信息及TaskID添加到安卓应用窗口列表中,并以Z-OrderN序列对更新安卓应用窗口列表;
当鼠标驱动接收到关闭窗口消息时,将当前安卓应用窗口的TaskID的相关信息从安卓应用窗口列表中删除,并以Z-OrderN序列对更新安卓应用窗口列表;
当鼠标驱动接收到最小化窗口消息时,将安卓应用窗口列表中与当前安卓应用窗口TaskID相对应的窗口矩形信息的数据均设为零,并以Z-OrderN序列对更新安卓应用窗口列表;
当鼠标驱动接收到鼠标按下消息时,以Z-OrderN序列对更新安卓应用窗口列表,再提取输入事件中的鼠标坐标及鼠标按键状态,遍历安卓应用窗口列表判断是否存在满足鼠标坐标位于窗口矩形的范围内的安卓应用窗口的记录,若存在则执行步骤4,否则不响应;
当鼠标驱动接收到停止写入消息时,以Z-OrderN序列对更新安卓应用窗口列表,并停止向安卓设备文件中写入数据;
当鼠标驱动接收到鼠标抬起消息时,若鼠标抬起消息中包含窗口矩形信息,则以当前安卓应用窗口的TaskID、窗口矩形信息及Z-OrderN序列对更新安卓应用窗口列表;否则以Z-OrderN序列对更新安卓应用窗口列表,再提取输入事件中的鼠标坐标及鼠标按键状态,遍历安卓应用窗口列表判断是否存在满足鼠标坐标位于窗口矩形的范围内的安卓应用窗口的记录,若存在则执行步骤4,若不存在则不响应;
当鼠标驱动接收到更新安卓应用窗口列表消息时,以Z-OrderN序列对更新安卓应用窗口列表;
步骤4、根据鼠标坐标与记录的窗口矩形的左上角坐标,计算鼠标坐标相对于安卓兼容环境的坐标形成鼠标安卓坐标,再将鼠标安卓坐标、鼠标按键状态及记录的TaskID写入安卓设备文件中;
步骤5、安卓兼容环境内的输入管理服务读取安卓设备文件中新增的鼠标安卓坐标、鼠标按键状态及记录的TaskID,根据TaskID查询当前是否存在具有可见Activity且TaskID也相同的安卓应用窗口:
如果存在,则判断安卓坐标是否与其保存的鼠标当前坐标相同,如果相同则将鼠标按键状态转换为安卓内的ACTION_DOWN或ACTION_UP后,在以安卓坐标及ACTION_DOWN或ACTION_UP构建安卓内的TouchEvent;如果不相同,则说明当前事件为鼠标移动事件,因此以安卓坐标及ACTION_MOVE构建安卓内的TouchEvent,并以安卓坐标更新其保存的鼠标当前坐标;然后将TouchEvent发送至TaskID对应的可见Activity,执行步骤6;
如果不存在,则将该新增信息发送至ActivityManagerService;
步骤6、安卓兼容环境内的Activity响应接收到的TouchEvent。
进一步地,所述鼠标安卓坐标的计算方式为:具体来说,X鼠标安卓坐标=X鼠标坐标-X窗口矩形的左上角坐标,Y鼠标安卓坐标=Y鼠标坐标-Y窗口矩形的左上角坐标。
进一步地,所述Z-OrderN的计算方法为:通过窗口管理器接口获取所有安卓应用窗口在Linux***内窗口排序z-order值,再将获取的值从小到大排序,最后按照小到大的顺序将z-order赋值为0到N得到Z-OrderN。
进一步地,所述安卓应用显示单元通过ioctl接口将所述新建窗口消息、关闭窗口消息、最小化窗口消息、鼠标按下消息、停止写入消息、鼠标抬起消息或更新安卓应用窗口列表消息发送至鼠标驱动。
有益效果:
本发明通过令Linux***的鼠标驱动同时维护标准设备文件及安卓设备文件,并仅将与安卓应用相关的能够操作安卓视图的鼠标事件写入安卓设备文件,同时安卓兼容环境内的输入管理服务根据安卓设备文件的信息构造安卓***鼠标事件再将其发送至对应的安卓应用,实现了安卓兼容环境对鼠标事件的快速处理,减少了Linux侧与安卓侧的鼠标事件处理流程,降低了安卓应用对鼠标移动、单击等操作的响应延迟,改善了用户的使用体验。
具体实施方式
下面列举实施例,对本发明进行详细描述。
本发明提供了一种跨运行环境的低延迟鼠标驱动优化方法,通过Linux***中的安卓应用显示单元、Linux***的鼠标驱动、安卓兼容环境内的输入管理服务及安卓应用窗口之间的交互实现鼠标对安卓应用的控制,具体包括以下步骤:
步骤1、在Linux***初始化鼠标驱动时,为鼠标驱动同时创建标准设备文件及安卓设备文件,并将安卓设备文件导入安卓兼容环境内,以便安卓兼容环境内的输入管理服务能够读取安卓设备文件;同时,新建由鼠标驱动维护的安卓应用窗口列表,安卓应用窗口列表中记录了安卓应用窗口的TaskID、窗口矩形信息及安卓内部序列Z-OrderN,窗口矩形信息包括安卓应用窗口的左上角坐标和窗口大小。
其中,安卓内部序列Z-OrderN是指安卓应用窗口在所有安卓应用窗口中的排序。安卓应用窗口的左上角坐标和窗口大小是指安卓应用窗口内视图的左上角坐标和大小,也就是Linux窗口除去标题栏和边框的窗口。
步骤2、新建安卓应用窗口时,安卓应用显示单元计算所有安卓应用窗口的Z-OrderN,由所有安卓应用窗口的TaskID及Z-OrderN组成Z-OrderN序列对;将由新建安卓应用窗口的窗口矩形信息、TaskID及Z-OrderN序列对组成的新建窗口消息发送至鼠标驱动;
关闭安卓应用窗口时,安卓应用显示单元计算所有安卓应用窗口的Z-OrderN,将由当前安卓应用窗口的TaskID及Z-OrderN序列对组成的关闭窗口消息发送至鼠标驱动;
最小化安卓应用窗口时,安卓应用显示单元计算所有安卓应用窗口的Z-OrderN,再将由当前安卓应用窗口的TaskID及Z-OrderN序列对组成的最小化窗口消息发送至鼠标驱动;
当安卓应用显示单元接收到鼠标按下事件时,安卓应用显示单元计算所有安卓应用窗口的Z-OrderN,再将由Z-OrderN序列对组成的鼠标按下消息发送至鼠标驱动;
当安卓应用显示单元接收到鼠标按下事件及改变大小事件时,安卓应用显示单元计算所有安卓应用窗口的Z-OrderN,再将由Z-OrderN序列对组成的停止写入消息发送至鼠标驱动;
当安卓应用显示单元接收到鼠标按下事件及鼠标拖拽事件时,安卓应用显示单元计算所有安卓应用窗口的Z-OrderN,再将Z-OrderN序列对组成的停止写入消息发送至鼠标驱动;
当安卓应用显示单元接收到鼠标抬起事件时,如果此前已收到改变大小事件或鼠标拖拽事件则获取当前安卓应用窗口的窗口矩形信息,并计算所有安卓应用窗口的Z-OrderN,再将由当前安卓应用窗口的TaskID、窗口矩形信息及Z-OrderN序列对组成的鼠标抬起消息发送至鼠标驱动;如果此前未收到改变大小事件及鼠标拖拽事件则计算所有安卓应用窗口的Z-OrderN,再将由当前安卓应用窗口的TaskID及Z-OrderN序列对组成的鼠标抬起消息发送至鼠标驱动;
当安卓应用显示单元接收到安卓应用窗口状态变化事件时,安卓应用显示单元计算所有安卓应用窗口的Z-OrderN,再将Z-OrderN序列对组成的更新安卓应用窗口列表消息发送至鼠标驱动。
步骤3、当鼠标驱动接收到新建窗口消息时,将新建安卓应用窗口的窗口矩形信息及TaskID添加到安卓应用窗口列表中,并以Z-OrderN序列对更新安卓应用窗口列表;
当鼠标驱动接收到关闭窗口消息时,将当前安卓应用窗口的TaskID的相关信息从安卓应用窗口列表中删除,并以Z-OrderN序列对更新安卓应用窗口列表;
当鼠标驱动接收到最小化窗口消息时,将安卓应用窗口列表中与当前安卓应用窗口TaskID相对应的窗口矩形信息的数据均设为零,并以Z-OrderN序列对更新安卓应用窗口列表;
当鼠标驱动接收到鼠标按下消息时,以Z-OrderN序列对更新安卓应用窗口列表,再提取输入事件中的鼠标坐标及鼠标按键状态,遍历安卓应用窗口列表判断是否存在满足鼠标坐标位于窗口矩形的范围内的安卓应用窗口的记录,若存在则执行步骤4,否则不响应;
当鼠标驱动接收到停止写入消息时,以Z-OrderN序列对更新安卓应用窗口列表,并停止向安卓设备文件中写入数据;
当鼠标驱动接收到鼠标抬起消息时,若鼠标抬起消息中包含窗口矩形信息,则以当前安卓应用窗口的TaskID、窗口矩形信息及Z-OrderN序列对更新安卓应用窗口列表;否则以Z-OrderN序列对更新安卓应用窗口列表,再提取输入事件中的鼠标坐标及鼠标按键状态,遍历安卓应用窗口列表判断是否存在满足鼠标坐标位于窗口矩形的范围内的安卓应用窗口的记录,若存在则执行步骤4,若不存在则不响应;
当鼠标驱动接收到更新安卓应用窗口列表消息时,以Z-OrderN序列对更新安卓应用窗口列表。
步骤4、根据鼠标坐标与记录的窗口矩形的左上角坐标,计算鼠标坐标相对于安卓兼容环境的坐标形成鼠标安卓坐标,再将鼠标安卓坐标、鼠标按键状态及记录的TaskID写入安卓设备文件中。
具体来说,鼠标安卓坐标=鼠标坐标-窗口矩形的左上角坐标,即X安卓=XLinux- X矩形,Y安卓=YLinux- Y矩形。
步骤5、安卓兼容环境内的输入管理服务读取安卓设备文件中新增的鼠标安卓坐标、鼠标按键状态及记录的TaskID,根据TaskID查询当前是否存在具有可见Activity且TaskID也相同的安卓应用窗口:
如果存在,则判断安卓坐标是否与其保存的鼠标当前坐标相同,如果相同则将鼠标按键状态转换为安卓内的ACTION_DOWN或ACTION_UP后,在以安卓坐标及ACTION_DOWN或ACTION_UP构建安卓内的TouchEvent;如果不相同,则说明当前事件为鼠标移动事件,因此以安卓坐标及ACTION_MOVE构建安卓内的TouchEvent,并以安卓坐标更新其保存的鼠标当前坐标;然后将TouchEvent发送至TaskID对应的可见Activity,执行步骤6;
如果不存在,则将该新增信息发送至ActivityManagerService。
步骤6、安卓兼容环境内的Activity响应接收到的TouchEvent。
实施例:
本实例以xDroid为例通过修改Linux***的鼠标驱动实现了本发明提供的一种跨运行环境的低延迟鼠标驱动优化方法。本实例中将修改后的鼠标驱动记为xDroidMouseDriver,xDroidMouseDriver创建并维护[taskId, rect,Z-OrderN]的三元组,其中,taskId为安卓应用窗口所对应的TaskID,rect为安卓应用窗口所对应窗口矩形信息,Z-OrderN为安卓应用窗口所对应安卓内部序列Z-OrderN,并将此三元组加入安卓应用窗口列表androidWindowRectList中, androidWindowRectList中的三元组是按照Z-OrderN从小到大排序的。
具体包括以下步骤:
S1、在Linux的鼠标驱动初始化时,会创建设备文件/dev/input/xxxx,本发明同时还创建了安卓设备文件/dev/input/xdroid-mouse,并在启动安卓兼容环境时导入安卓兼容环境所在容器,这样运行在安卓兼容环境内部的InputFlinger(InputManagerService)也就能够在安卓***内的文件***上直接读取/dev/input/xdroid-mouse以获取鼠标事件信息。
S2、xDroidUI跟踪和记录安卓兼容环境的所有应用窗口的所有矩形。
当新建安卓应用窗口时:xDroidUI记录新建窗口的左上角坐标和大小,计算所有安卓应用窗口的Z-OrderN,由所有安卓应用窗口的TaskID及Z-OrderN组成Z-OrderN序列对,将由新建安卓应用窗口的窗口矩形信息、TaskID及Z-OrderN序列对组成的新建窗口消息通过ioctl接口传递至xDroidMouseDriver;xDroidMouseDriver将该记录增加到androidWindowRectList中,并以Z-OrderN序列对更新androidWindowRectList;
当关闭安卓应用窗口时:xDroidUI计算所有安卓应用窗口的Z-OrderN,将由当前安卓应用窗口的TaskID及Z-OrderN序列对组成的关闭窗口消息通过ioctl接口传递至xDroidMouseDriver,xDroidMouseDriver从androidWindowRectList中删除该TaskID对应的记录,并以Z-OrderN序列对更新androidWindowRectList;
当xDroidUI检测到鼠标按下事件时并开始被Resize时,计算所有安卓应用窗口的Z-OrderN,并通过ioctl接口通知xDroidMouseDriver停止向安卓设备文件中写入数据,并更新androidWindowRectList;
当xDroidUI检测到鼠标释放时,若同时检测到Resize事件,则记录Resize后窗口的窗口矩形信息,计算所有安卓应用窗口的Z-OrderN,并通过ioctl接口将窗口信息、此窗口的TaskID及Z-OrderN序列对传递给xDroidMouseDriver,xDroidMouseDriver根据TaskID更新对应的项;如果此前未收到resize事件及鼠标拖拽事件则计算所有安卓应用窗口的Z-OrderN,再将由当前安卓应用窗口的TaskID及Z-OrderN序列对通过ioctl接口发送至xDroidMouseDriver,执行S3;
当xDroidUI检测到鼠标按下事件及鼠标拖拽事件时,计算所有安卓应用窗口的Z-OrderN,通过ioctl接口通知xDroidMouseDriver停止向安卓设备文件中写入数据并更新androidWindowRectList;当检测到鼠标释放时,记录拖动后的窗口的新左上角坐标和大小,并通过ioctl接口将窗口信息和此窗口的TaskID传递给xDroidMouseDriver,xDroidMouseDriver根据TaskID更新对应的项,同时,执行S3;
当xDroidUI检测到安卓应用窗口的Activate和Deactivate事件时,计算所有安卓应用窗口的Z-OrderN,并通过ioctl接口传递给xDroidMouseDriver,xDroidMouseDriver更新androidWindowRectList。
其中,Z-OrderN的计算方法为:通过窗口管理器接口获取xDroidUI的所有安卓应用窗口在Linux***内窗口排序z-order值,将获取的值从小到大排序,依次将z-order赋值为0到N得到Z-OrderN。
S3、xDroidMouseDriver在向/dev/input/xxxx写入数据时,提取数据中的鼠标坐标mousePos和鼠标按键状态mouseKeyStatus,然后遍历androidWindowRectList,对于其中每个三元组appGeometryInfo:[taskId, rect,z-order],执行以下步骤:
如果mousePos位于appGeometryInfo中的rect内,则计算坐标X=XmousePos-Xrect,Y=YmousePos-Yrect,再将X、Y、mouseKeyStatus和appGeometryInfo.taskId组合成鼠标数据写入/dev/input/xdroid-mouse。
S4、通过安卓***的InputFlinger(InputManagerService),实现阻塞读取/dev/input/xdroid-mouse,读取到数据后提取X、Y、mouseKeyStatus和taskId,通过taskId查询对应的Task,如存在该Task且Task同时存在一个可见Activity,则:
根据mouseKeyStatus设置正确的Action状态如ACTION_DOWN、ACTION_UP;比较X、Y和currentMouseX和currentMouseY,若不同则设置Action状态为ACTION_MOVE,并设置currentMouseX为X、currentMouseY为Y,再构建TouchEvent,并将直接TouchEvent通过binder接口发送给目标Activity。
S5、通过修改安卓的Activity的onTransact接口,实现当接收到来自修改后的InputManagerService的TouchEvent后,调用dispatchTouchEvent,执行安卓***的标准流程,完成对鼠标事件的响应。
综上所述,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (4)
1.一种跨运行环境的低延迟鼠标驱动优化方法,其特征在于,包括以下步骤:
步骤1、在Linux***初始化鼠标驱动时创建标准设备文件及安卓设备文件,并将安卓设备文件导入安卓兼容环境内;新建安卓应用窗口列表,所述安卓应用窗口列表用于记录安卓应用窗口的TaskID、窗口矩形信息及安卓内部序列Z-OrderN,所述窗口矩形信息包括安卓应用窗口对应视图的左上角坐标和窗口大小;
步骤2、新建安卓应用窗口时,安卓应用显示单元计算所有安卓应用窗口的Z-OrderN,由所有安卓应用窗口的TaskID及Z-OrderN组成Z-OrderN序列对;将由新建安卓应用窗口的窗口矩形信息、TaskID及Z-OrderN序列对组成的新建窗口消息发送至鼠标驱动;
关闭安卓应用窗口时,安卓应用显示单元计算所有安卓应用窗口的Z-OrderN,将由当前安卓应用窗口的TaskID及Z-OrderN序列对组成的关闭窗口消息发送至鼠标驱动;
最小化安卓应用窗口时,安卓应用显示单元计算所有安卓应用窗口的Z-OrderN,再将由当前安卓应用窗口的TaskID及Z-OrderN序列对组成的最小化窗口消息发送至鼠标驱动;
当安卓应用显示单元接收到鼠标按下事件时,安卓应用显示单元计算所有安卓应用窗口的Z-OrderN,再将由Z-OrderN序列对组成的鼠标按下消息发送至鼠标驱动;
当安卓应用显示单元接收到鼠标按下事件及改变大小事件时,安卓应用显示单元计算所有安卓应用窗口的Z-OrderN,再将由Z-OrderN序列对组成的停止写入消息发送至鼠标驱动;
当安卓应用显示单元接收到鼠标按下事件及鼠标拖拽事件时,安卓应用显示单元计算所有安卓应用窗口的Z-OrderN,再将Z-OrderN序列对组成的停止写入消息发送至鼠标驱动;
当安卓应用显示单元接收到鼠标抬起事件时,如果此前已收到改变大小事件或鼠标拖拽事件则获取当前安卓应用窗口的窗口矩形信息,并计算所有安卓应用窗口的Z-OrderN,再将由当前安卓应用窗口的TaskID、窗口矩形信息及Z-OrderN序列对组成的鼠标抬起消息发送至鼠标驱动;如果此前未收到改变大小事件及鼠标拖拽事件则计算所有安卓应用窗口的Z-OrderN,再将由当前安卓应用窗口的TaskID及Z-OrderN序列对组成的鼠标抬起消息发送至鼠标驱动;
当安卓应用显示单元接收到安卓应用窗口状态变化事件时,安卓应用显示单元计算所有安卓应用窗口的Z-OrderN,再将Z-OrderN序列对组成的更新安卓应用窗口列表消息发送至鼠标驱动;
步骤3、当鼠标驱动接收到新建窗口消息时,将新建安卓应用窗口的窗口矩形信息及TaskID添加到安卓应用窗口列表中,并以Z-OrderN序列对更新安卓应用窗口列表;
当鼠标驱动接收到关闭窗口消息时,将当前安卓应用窗口的TaskID的相关信息从安卓应用窗口列表中删除,并以Z-OrderN序列对更新安卓应用窗口列表;
当鼠标驱动接收到最小化窗口消息时,将安卓应用窗口列表中与当前安卓应用窗口TaskID相对应的窗口矩形信息的数据均设为零,并以Z-OrderN序列对更新安卓应用窗口列表;
当鼠标驱动接收到鼠标按下消息时,以Z-OrderN序列对更新安卓应用窗口列表,再提取输入事件中的鼠标坐标及鼠标按键状态,遍历安卓应用窗口列表判断是否存在满足鼠标坐标位于窗口矩形的范围内的安卓应用窗口的记录,若存在则执行步骤4,否则不响应;
当鼠标驱动接收到停止写入消息时,以Z-OrderN序列对更新安卓应用窗口列表,并停止向安卓设备文件中写入数据;
当鼠标驱动接收到鼠标抬起消息时,若鼠标抬起消息中包含窗口矩形信息,则以当前安卓应用窗口的TaskID、窗口矩形信息及Z-OrderN序列对更新安卓应用窗口列表;否则以Z-OrderN序列对更新安卓应用窗口列表,再提取输入事件中的鼠标坐标及鼠标按键状态,遍历安卓应用窗口列表判断是否存在满足鼠标坐标位于窗口矩形的范围内的安卓应用窗口的记录,若存在则执行步骤4,若不存在则不响应;
当鼠标驱动接收到更新安卓应用窗口列表消息时,以Z-OrderN序列对更新安卓应用窗口列表;
步骤4、根据鼠标坐标与记录的窗口矩形的左上角坐标,计算鼠标坐标相对于安卓兼容环境的坐标形成鼠标安卓坐标,再将鼠标安卓坐标、鼠标按键状态及记录的TaskID写入安卓设备文件中;
步骤5、安卓兼容环境内的输入管理服务读取安卓设备文件中新增的鼠标安卓坐标、鼠标按键状态及记录的TaskID,根据TaskID查询当前是否存在具有可见Activity且TaskID也相同的安卓应用窗口:
如果存在,则判断安卓坐标是否与其保存的鼠标当前坐标相同,如果相同则将鼠标按键状态转换为安卓内的ACTION_DOWN或ACTION_UP后,在以安卓坐标及ACTION_DOWN或ACTION_UP构建安卓内的TouchEvent;如果不相同,则说明当前事件为鼠标移动事件,因此以安卓坐标及ACTION_MOVE构建安卓内的TouchEvent,并以安卓坐标更新其保存的鼠标当前坐标;然后将TouchEvent发送至TaskID对应的可见Activity,执行步骤6;
如果不存在,则将新增信息发送至ActivityManagerService;
步骤6、安卓兼容环境内的Activity响应接收到的TouchEvent。
2.根据权利要求1所述的低延迟鼠标驱动优化方法,其特征在于,所述鼠标安卓坐标的计算方式为:具体来说,X鼠标安卓坐标=X鼠标坐标-X窗口矩形的左上角坐标,Y鼠标安卓坐标=Y鼠标坐标-Y窗口矩形的左上角坐标。
3.根据权利要求1所述的低延迟鼠标驱动优化方法,其特征在于,所述Z-OrderN的计算方法为:通过窗口管理器接口获取所有安卓应用窗口在Linux***内窗口排序z-order值,再将获取的值从小到大排序,最后按照小到大的顺序将z-order赋值为0到N得到Z-OrderN。
4.根据权利要求1所述的低延迟鼠标驱动优化方法,其特征在于,所述安卓应用显示单元通过ioctl接口将所述新建窗口消息、关闭窗口消息、最小化窗口消息、鼠标按下消息、停止写入消息、鼠标抬起消息或更新安卓应用窗口列表消息发送至鼠标驱动。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211238348.5A CN115309465B (zh) | 2022-10-11 | 2022-10-11 | 一种跨运行环境的低延迟鼠标驱动优化方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211238348.5A CN115309465B (zh) | 2022-10-11 | 2022-10-11 | 一种跨运行环境的低延迟鼠标驱动优化方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115309465A CN115309465A (zh) | 2022-11-08 |
CN115309465B true CN115309465B (zh) | 2022-12-06 |
Family
ID=83868209
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211238348.5A Active CN115309465B (zh) | 2022-10-11 | 2022-10-11 | 一种跨运行环境的低延迟鼠标驱动优化方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115309465B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115454296B (zh) * | 2022-11-11 | 2023-01-10 | 北京麟卓信息科技有限公司 | 一种跨运行环境的用户行为智能融合方法 |
CN115543158B (zh) * | 2022-12-02 | 2023-04-07 | 北京麟卓信息科技有限公司 | 一种基于着色器的跨运行环境鼠标图层渲染优化方法 |
CN115640154B (zh) * | 2022-12-23 | 2023-03-17 | 北京麟卓信息科技有限公司 | 一种基于轨迹智能预测的跨运行环境交互延迟优化方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114385047A (zh) * | 2022-03-24 | 2022-04-22 | 北京麟卓信息科技有限公司 | Linux平台上基于Intent的安卓应用文件发送方法 |
CN114816585A (zh) * | 2022-06-20 | 2022-07-29 | 北京麟卓信息科技有限公司 | 一种跨运行环境的远程输入重定向方法 |
CN114995716A (zh) * | 2022-08-02 | 2022-09-02 | 北京麟卓信息科技有限公司 | 一种桌面***上安卓应用相关文件的操作方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20160301641A1 (en) * | 2015-04-13 | 2016-10-13 | Smoke Messaging, LLC | Secure messaging system utilizing a limited viewing window |
-
2022
- 2022-10-11 CN CN202211238348.5A patent/CN115309465B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114385047A (zh) * | 2022-03-24 | 2022-04-22 | 北京麟卓信息科技有限公司 | Linux平台上基于Intent的安卓应用文件发送方法 |
CN114816585A (zh) * | 2022-06-20 | 2022-07-29 | 北京麟卓信息科技有限公司 | 一种跨运行环境的远程输入重定向方法 |
CN114995716A (zh) * | 2022-08-02 | 2022-09-02 | 北京麟卓信息科技有限公司 | 一种桌面***上安卓应用相关文件的操作方法 |
Also Published As
Publication number | Publication date |
---|---|
CN115309465A (zh) | 2022-11-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN115309465B (zh) | 一种跨运行环境的低延迟鼠标驱动优化方法 | |
CN114556305A (zh) | 针对机器人过程自动化的基于人工智能的过程标识、提取和自动化 | |
KR102446521B1 (ko) | 로보틱 프로세스 자동화를 위한 로봇 실행의 스크린 응답 검증 | |
US20100070844A1 (en) | Automatic creation and server push of drafts | |
US20070044035A1 (en) | Docking and undocking user interface objects | |
TWI616826B (zh) | 會議室管理方法以及使用該方法的裝置 | |
CN110769048B (zh) | 本地与远程虚拟桌面的无缝衔接方法及*** | |
CN113748413B (zh) | 文本检测、***符号追踪以及活动元素检测 | |
KR20110034569A (ko) | 씬 클라이언트 시스템, 서버 장치, 클라이언트 장치, 및 컴퓨터로 판독 가능한 기억 매체 | |
WO2022048329A1 (zh) | 菜单显示方法和装置 | |
CN114816585B (zh) | 一种跨运行环境的远程输入重定向方法 | |
US10144131B2 (en) | Operation monitoring server and operation monitoring system | |
CN101853157A (zh) | 一种应用软件gui对象自动识别方法 | |
CN114995716A (zh) | 一种桌面***上安卓应用相关文件的操作方法 | |
JP2023545253A (ja) | コンピュータビジョンを使ったアプリケーション、画面、およびユーザーインターフェース要素を認識するための人工知能/機械学習モデルの訓練 | |
CN106302524B (zh) | 一种操控远端应用软件的方法 | |
JP2006277771A (ja) | 計算機ネットワーク用の端末装置および操作履歴記録方法 | |
CN102959499A (zh) | 计算机***、存储卷管理方法以及计算机可读取的存储介质 | |
CN103049262A (zh) | 基于远程帧缓存的窗口还原方法 | |
CN106452907B (zh) | 一种配置管理*** | |
CN112394872B (zh) | Linux平台支持安卓***多点触摸的优化方法及装置 | |
CN108959205A (zh) | 一种erp***导出数据快速迁移的方法 | |
CN111258479B (zh) | 聊天界面展示多聊天窗口的方法、***、设备和存储介质 | |
CN111190674B (zh) | 统一处理触摸穿透方法、装置、存储介质及一体机设备 | |
JP4879137B2 (ja) | 情報連携ウィンドウシステムおよびプログラム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |