当前位置: 首页 > 科技观察

由浅入深学习新模块Window_manager(一)

时间:2023-03-18 16:55:16 科技观察

了解更多开源请访问:开源基础软件社区https://ost.51cto.com前言:作为一名开发者,随着时代和行业,你总会接触到不同的新任务和新模块,需要不断的学习和沉淀。由于工作需要,笔者需要学习和熟悉自己负责的模块以外的一些模块。为此,笔者将此次学习过程记录下来,并在本系列文章中分享给大家。学习新模块的总体思路:最好的学习方式就是输出,这也是我写这篇文章的原因。次优的方式就是有问题,通过学习和思考,在解决自己问题的过程中获得知识和认知,最终在恍然大悟时获得学习的满足感。本文是学习一个新模块的第一篇文章,主要是建立对window_manager模块的初步和整体的认识。具体需要解决的问题如下:1、什么是window_manager?2、window_manager模块在整个系统中的作用是什么?3、window_manager本身的整体框架是怎样的?带着这几个问题,我们进入正题:window_manager是什么?我们在openHarmony、IOS、Android、windows等图形界面系统中都可以看到一个叫做windowmanagement的框架模块。至于为什么叫window_manager而不叫door_manager和desktop_manager,原因是它长期占据图形界面系统的霸主地位。受众最广、开发者最多的是微软的windows。于是,后来的系统设计者和开发者在反复推倒重来的过程中,总会借鉴这个成熟的框架。我们可以参考微软在前几代图形操作系统中的主要特点来了解window_manager模块的地位:1983年,微软第一个涉足IBM的windows程序:特点:多窗口,可调整大小的窗口1985年,微软发布windows第一个版本,windows1.0:特点:窗口不能重叠,但可以平铺,窗口不能覆盖下面的图标区域。1987年,微软发布windows2.03:特点:窗口可以调整大小,重叠,增加了一些窗口控制功能。在Windows3.0和Windows3.1时代,加入了大量的图形界面,在界面上与现代的Windows操作系统非常接近,成为当时兼容电脑的标准配置,这意味着图形操作系统进入成熟发展期。.从发展的角度来看,在从DOS等非图形界面向图形界面过渡的过程中,窗口的概念被构思和发展,窗口管理系统或框架,即window_manager框架,也成为了现代图形操作系统。在核心模块中。本章小结:window_manager是现代图形操作系统的核心模块。window_manager模块至今已有40年左右的发展历史。虽然随着技术的进步,最初的窗口大小控制、布局控制、窗口属性等窗口管理的核心概念一直沿用至今。了解历史可以让我们学习这个模块更好地从一个实例推断出其他情况。window_manager模块在整个系统中做了什么(我们现在研究的模块属于OpenHarmony开源操作系统,系统和框架都是基于OpenHarmony的)。我们想要了解一个模块,就需要了解这个模块在整个系统中的位置。这个模块有什么功能,密切相关的模块有哪些,为其他模块提供了什么样的支持,其他模块为了实现自己的功能集需要什么样的支持等等。针对以上问题,我们一一探究:window_manager模块在整个系统中的位置:window_manager模块又称为窗口管理子系统,它与图形子系统一起构成三大核心子系统中的图形子系统OpenHarmony的。图形子系统:图形子系统:提供图形接口能力,提供图形NDK(nativedevelopmentkit,原生开发包)能力,包括:WebGL、NativeDrawing渲染能力、OpenGL指令级渲染能力支持等。窗口管理子系统:提供窗口管理和显示管理的基本能力,是系统图形界面显示所需的基本子系统。窗口管理子系统的具体功能:根据官网的描述,窗口管理子系统窗口管理:窗口提供了一些管理窗口的基本能力,包括当前窗口的创建和销毁,各种属性的设置,以及各个窗口的管理和调度。DisPlay:屏幕属性提供了一些管理显示设备的基本能力,包括获取默认显示设备的信息、获取所有显示设备的信息、监控显示设备的插拔行为。与其他模块的关系窗口管理子系统接口对开发者来说是不可见的,主要是为其他几个模块调用,如AAFWK(原电源子系统)、多媒体、摄像头等。对于应用开发者来说,接触最多的是能力,而能力页面的内容是通过窗口显示的,即能力必然会使用模块的接口来创建窗口对象。对于上层UI框架,从图形子系统申请一个窗口,使用2D图像渲染引擎skia将图片绘制到窗口中;窗口附属于能力,能力由元能力子系统AAFWK管理;window_manager框架本身提供了窗口的创建、销毁接口,以及窗口的显示、隐藏、切换、缩放等动作。对于较低级别的驱动程序,图形子系统图像的最终显示由驱动程序决定。window_manager本身的结构:从window_manager的结构可以清楚的看出window_manager模块分为窗口管理和显示两部分,两者都采用Client/Server模式。各细分模块的功能如下:WindowManagerClient应用程序窗口管理接口层,提供Window-to-object抽象和窗口管理接口,对接原有能力和UI框架。DisplayManagerClient应用程序Display管理接口层,提供Display信息抽象和Display管理接口。WindowManagerServer窗口管理服务,提供窗口布局、Z-order控制、窗口树形结构、窗口拖拽、窗口快照等能力,为多模式输入提供窗口布局和焦点窗口窗口布局:重叠、平铺等Z-ordercontrol:窗口可以重叠的前提下需要Z-order控制。Z-order可以理解为传统屏幕中Z轴以X、Y为坐标的顺序,表示窗口在屏幕平面上的堆叠顺序。窗口树结构:WindowRoot,WindowNode是管理窗口树结构的模块。窗口拖动:窗口拖动事件处理。窗口快照:这是智能手机兴起后流行的功能。用于打开多个应用程序窗口时,方便查看和切换应用程序或窗口。我们对比一下windows发布的历代windows版本的功能,可以看出窗口管理的主要功能在过去几十年里并没有太大的变化,包括笔者在2008年写的一篇关于窗口管理的技术文章,与今天相似。DisplayManagerServerDisplay管理服务,提供Display信息、截图、屏幕开关机和亮度处理控制,处理Display和Screen的映射关系。其他一些概念的解释:Display、Screen、Window:这三个概念很容易混淆,我们可以参考Linux下图形管理中的定义:Display:若干个屏幕(screen)和一组输入设备(键盘鼠标))形成一个显示。显示概念的关键是要有一套完整的输入和输出。不一定是一个屏幕,可以有多个,每个屏幕可以用来显示相同??的内容,也可以用来组成矩阵来显示大屏幕的内容。Screen:  Screen的层级在显示器下方,是一个实际的Monitor或Device。一个屏幕对应一个根窗口(rootwindow),根窗口的大小与屏幕相同。窗口:  窗口是比屏幕小一级的概念。窗口具有树状的继承关系,每个屏幕对应一棵“窗口树”。树的根是根窗口,即根窗口,没有父窗口;此外,所有窗口都有父窗口。一个窗口也可以有子窗口,但不是必须的。参考资料:https://gitee.com/openharmony/window_window_manager《window_manger仓介绍》https://www.open-open.com/news/view/185d270《图说Windows演变史:1985-2012》总结本文介绍了地址翻译模式及相关配置.下篇文章继续介绍loonarch虚拟内存系统的其他部分。了解更多开源请访问:开源基础软件社区https://ost.51cto.com