CN114741044B - 一种基于异构渲染的跨运行环境显示输出共享方法 - Google Patents
一种基于异构渲染的跨运行环境显示输出共享方法 Download PDFInfo
- Publication number
- CN114741044B CN114741044B CN202210658931.5A CN202210658931A CN114741044B CN 114741044 B CN114741044 B CN 114741044B CN 202210658931 A CN202210658931 A CN 202210658931A CN 114741044 B CN114741044 B CN 114741044B
- Authority
- CN
- China
- Prior art keywords
- display
- screen data
- virtual
- shared frame
- desktop
- 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
- 238000000034 method Methods 0.000 title claims abstract description 38
- 238000009877 rendering Methods 0.000 title claims abstract description 25
- 239000010410 layer Substances 0.000 claims description 10
- 239000002356 single layer Substances 0.000 claims description 6
- 239000000203 mixture Substances 0.000 claims description 4
- 239000000725 suspension Substances 0.000 claims description 4
- 230000015572 biosynthetic process Effects 0.000 description 6
- 230000006870 function Effects 0.000 description 6
- 238000003786 synthesis reaction Methods 0.000 description 6
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000006386 memory function Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 229910052754 neon Inorganic materials 0.000 description 1
- GKAOGPIIYCISHV-UHFFFAOYSA-N neon atom Chemical compound [Ne] GKAOGPIIYCISHV-UHFFFAOYSA-N 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 230000002194 synthesizing effect Effects 0.000 description 1
Images
Classifications
-
- 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/14—Digital output to display device ; Cooperation and interconnection of the display device with other functional units
- G06F3/1454—Digital output to display device ; Cooperation and interconnection of the display device with other functional units involving copying of the display data of a local workstation or window to a remote workstation or window so that an actual copy of the data is displayed simultaneously on two or more displays, e.g. teledisplay
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/20—Handling requests for interconnection or transfer for access to input/output bus
- G06F13/28—Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
-
- 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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/543—User-generated data transfer, e.g. clipboards, dynamic data exchange [DDE], object linking and embedding [OLE]
-
- 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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/40—Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
- H04N21/43—Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network or synchronising decoder's clock; Client middleware
- H04N21/44—Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream or rendering scenes according to encoded video stream scene graphs
- H04N21/44012—Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream or rendering scenes according to encoded video stream scene graphs involving rendering scenes according to scene graphs, e.g. MPEG-4 scene graphs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/545—Gui
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Multimedia (AREA)
- Signal Processing (AREA)
- Human Computer Interaction (AREA)
- Digital Computer Display Output (AREA)
- Controls And Circuits For Display Device (AREA)
Abstract
本发明公开了一种基于异构渲染的跨运行环境显示输出共享方法,通过在安卓兼容环境中为虚显创建虚拟图形缓冲区生产者,虚拟图形缓冲区生产者创建共享帧缓存并将共享帧缓存的句柄发送至桌面系统的显示服务器,桌面系统中的显示服务器在执行常规的显示操作之后,将屏幕数据复制到共享帧缓存中,再由虚拟图形缓冲区生产者与虚拟显示设备配合完成对屏幕数据的显示,根据桌面系统中内存与显存的共享关系可确定上述过程中至多只涉及两次内存复制的操作,因此进一步降低了CPU利用率,减少了共享截屏数据的系统延时,提高了共享过程的流畅性,从而改善了用户体验。
Description
技术领域
本发明属于在跨运行环境的数据共享技术领域,具体涉及一种基于异构渲染的跨运行环境显示输出共享方法。
背景技术
运行在不同环境中的应用程序通过对输入数据的处理形成输出数据,输出数据或以图片或视频的方式显示输出、或以音频的方式输出,也可以文件等方式进行输出。对于运行环境而言,屏幕显示也是一种显示输出的方式。
Linux或Windows等桌面操作系统上的安卓兼容环境(下文简称安卓兼容环境)是一种在Linux或Windows操作系统上运行安卓应用的技术,对丰富操作系统应用生态有着重要的意义。通常情况下,典型的安卓兼容环境主要包括安卓应用显示单元和安卓应用兼容服务,安卓应用显示单元用于在桌面操作系统上实现安卓应用的用户界面,安卓应用兼容服务用于提供运行于桌面操作系统上的安卓兼容环境,通过安卓应用显示单元与安卓应用兼容服务的相互配合实现安卓应用在桌面操作系统上的有效运行,例如,现有安卓兼容环境的实现方案有xDroid,它包括xDroidUI和xDroidServer,xDroidUI为安卓应用显示单元,xDroidServer为安卓应用兼容服务。
用户在使用安卓应用的过程中,往往会有分享屏幕的需求,例如,在使用视频会议类软件时用户有共享桌面的需求。现有安卓系统的显示系统中,一般主要包括CPU、GPU和Display三个部分,其中,CPU负责计算帧数据,然后把计算完成的图像数据交给GPU,GPU对图像数据进行渲染,然后把渲染后的数据放到图形缓存区中,SurfaceFlinger将从图形缓冲区中取出的数据合成一帧的数据放入帧缓冲区,最后Display从帧缓冲区中取出这些数据展示到屏幕上。VirtualDisplay是虚拟的Display,能够抓取屏幕上显示的内容主要用于截屏过程,能够满足用户共享屏幕的需求。
目前,现有的跨运行环境的显示输出共享方法中较为优化的方式为,在安卓兼容环境内创建桌面系统的截屏进程及与虚显相关的虚拟显示设备,通过虚拟显示设备与运行在安卓兼容环境内的截屏进程的配合实现了直接在安卓兼容环境内截取并共享桌面系统的截屏,相对其他现有技术而言减少了内存复制的次数。然而,该技术仍然需要执行三次内存复制才能实现安卓兼容环境与桌面系统共享截屏数据,因此,仍然在一定程度上会降低桌面端与安卓端截屏数据共享的效率,从而导致桌面端与安卓端共享显示输出数据时可能仍会出现延迟问题,为用户操作带来不便。
发明内容
有鉴于此,本发明提供了一种基于异构渲染的跨运行环境显示输出共享方法,能够在不同运行环境之间实现显示输出的共享。
本发明提供的一种基于异构渲染的跨运行环境显示输出共享方法,包括以下步骤:
在安卓兼容环境中,当安卓应用创建虚显时为该虚显创建虚拟图形缓冲区生产者、虚拟显示绘制表面及虚拟显示设备,虚拟图形缓冲区生产者创建共享帧缓存后向桌面系统的显示服务器发送带有共享帧缓存的句柄的屏幕数据共享请求;当接收到显示服务器发送的绘制完毕消息时,虚拟图形缓冲区生产者将共享帧缓存中的屏幕数据渲染到虚拟显示绘制表面生成渲染数据,再由虚拟显示设备将渲染数据输出到屏幕显示;当虚显被销毁时,虚拟图形缓冲区生产者向显示服务器发送暂停屏幕数据共享请求,释放共享帧缓存所占系统资源;其中,虚拟显示设备为包含单一图层的DisplayDevice;
在桌面系统中,当显示服务器接收到屏幕数据共享请求时,完成桌面端屏幕数据绘制后获取当前进程的桌面端帧缓存指针,根据接收到的句柄使桌面端帧缓存指针指向共享帧缓存,将屏幕数据绘制到共享帧缓存中,并向虚拟图形缓冲区生产者发送绘制完毕消息;当显示服务器接收到暂停屏幕数据共享请求时,停止向共享帧缓存写入屏幕数据,释放共享帧缓存桌面端所占资源。
进一步地,所述当显示服务器接收到屏幕数据共享请求时,若所述显示服务器采用的协议为X11协议且采用单缓冲方式,则在绘制完屏幕数据之后、调用glFlush之前,获取当前进程的桌面端帧缓存指针并保存为当前目标帧缓存指针,将桌面端帧缓存指针指向共享帧缓存再将屏幕数据绘制到共享帧缓存中,再将桌面端帧缓存指针恢复为当前目标帧缓存指针;若采用双缓存方式,则将共享帧缓存对应的桌面端指针加入缓存列表中,在绘制完屏幕数据之后调用glSwapBuffers将屏幕数据绘制到共享帧缓存中。
进一步地,所述当显示服务器接收到屏幕数据共享请求时,若所述显示服务器采用的协议为Wayland协议,则在完成所有桌面窗口的合成后,将屏幕数据从合成缓冲区复制到共享帧缓存中。
进一步地,所述当显示服务器接收到暂停屏幕数据共享请求时,停止向共享帧缓存写入屏幕数据,释放共享帧缓存桌面端所占资源,其中,若桌面系统支持将内存作为显存共享给显卡,则采用ioctl命令通知GPU做DMA缓存同步后,再释放共享帧缓存,并释放显存。
进一步地,所述虚拟显示设备的单一图层的实现方式为:将图层的绘制状态设置为不透明且始终可见,且可视区域的尺寸与桌面系统的屏幕尺寸相同。
有益效果:
1、本发明通过在安卓兼容环境中为虚显创建虚拟图形缓冲区生产者,虚拟图形缓冲区生产者创建共享帧缓存并将共享帧缓存的句柄发送至桌面系统的显示服务器,桌面系统中的显示服务器在执行常规的显示操作之后,将屏幕数据复制到共享帧缓存中,再由虚拟图形缓冲区生产者与虚拟显示设备配合完成对屏幕数据的显示,根据桌面系统中内存与显存的共享关系可确定上述过程中至多只涉及两次内存复制的操作,因此进一步降低了CPU利用率,减少了共享截屏数据的系统延时,提高了共享过程的流畅性,从而改善了用户体验。
2、本发明通过在安卓系统内进行系统级的设计实现,进一步提高了桌面系统屏幕共享的执行效率,提升了使用效果。
附图说明
图1为本发明提供的一种基于异构渲染的跨运行环境显示输出共享方法的流程图。
具体实施方式
下面结合附图并举实施例,对本发明进行详细描述。
为了便于理解本专利提供的技术方案,现将与本专利相关的安卓系统技术名词以及桌面系统相关名词列举如下:
SurfaceFlinger服务,是用于在安卓系统中将接收到的多个来源的图形显示数据合成后发送到显示设备。例如,安卓应用一般包括三个图层:顶部的状态栏、底部或者侧面的导航栏以及应用的界面,单独更新和渲染图层,再将图层发送到SurfaceFlinger服务进行合成后刷新到硬件显示。
绘制表面(Surface),是安卓应用窗口第一次显示时请求安卓系统内的WindowManagerService服务为其创建的用于记录窗口显示内容的类。安卓系统中,窗口(Window)是从设计者角度定义的关于层次和布局的类,Surface则是从工程师实现角度定义的类。窗口的内容是变化的,Surface需要有空间来记录每个时刻窗口的内容。在安卓系统的SurfaceFlinger实现里,Surface一般具有两个缓冲区,分别用于绘画和显示,两个缓冲区按照固定的频率进行交换,从而实现窗口的动态刷新。
图层(Layer),是SurfaceFlinger 进行合成的基本操作单元。Layer在安卓应用请求创建Surface时在SurfaceFlinger内部创建,因此Surface与Layer对应。
显示(Display),是用于从帧缓冲区中取出数据信息并将数据信息展示到屏幕上的类,其中,虚显(VirtualDisplay)是Display的子类。Display的状态一般包括读取状态(mCurrentState)和待绘制状态(mDrawingState)两类,其中,处于待绘制状态的Display通常为处于读取状态的Display的子集。
虚拟显示绘制表面(VirtualDisplaySurface),是安卓系统为虚显创建的用于渲染图形数据的类。
显示设备(DisplayDevice),是用于描述显示屏的类,用于是将DisplaySurface中的渲染数据显示在显示屏上。
显示服务器,是运行在桌面操作系统中的程序,负责协调客户端与操作系统的其他部分之间、硬件与操作系统之间的输入和输出。显示服务器基于显示服务器协议与客户端进行通信将客户端的信息显示在显示设备中,Windows系统中显示服务器协议为 XWindow,Linux系统中显示服务器协议包括X11、Wayland 和 Mir,其中,X11是 Linux 发行版中最常用的显示服务器协议。本发明中,为了避免混淆便于表述,将桌面系统中的显示设备(DisplayDevice)称为桌面显示设备,将安卓系统中的显示设备(DisplayDevice)成为安卓显示设备。
本发明提供的一种基于异构渲染的跨运行环境显示输出共享方法,其核心思想是:在安卓兼容环境中为虚显创建虚拟图形缓冲区生产者、虚拟显示绘制表面及虚拟显示设备,通过在虚拟图形缓冲区生产者中创建共享帧缓存并将共享帧缓存的句柄发送至桌面系统的显示服务器;桌面系统中的显示服务器,采用共享帧缓存句柄创建共享帧缓存,当显示服务器处理屏幕数据时,将屏幕数据渲染到共享帧缓存中,由此实现了安卓兼容环境与桌面系统显示输出的共享。
本发明提供的一种基于异构渲染的跨运行环境显示输出共享方法,流程如图1所示,包括以下步骤:
在安卓兼容环境中,当安卓应用创建虚显时为该虚显创建虚拟图形缓冲区生产者、虚拟显示绘制表面及虚拟显示设备,虚拟图形缓冲区生产者创建共享帧缓存、类型为可读的帧缓存数据结构及共享帧缓存安卓端指针,并向桌面系统的显示服务器发出带有共享帧缓存句柄的屏幕数据共享请求;当接收到显示服务器发送的绘制完毕消息时,将共享帧缓存中的屏幕数据渲染到虚拟显示绘制表面生成渲染数据,再由虚拟显示设备将从虚拟显示绘制表面接收到的渲染数据输出到屏幕显示;当虚显被销毁时,虚拟图形缓冲区生产者向显示服务器发送暂停屏幕数据共享请求,并释放共享帧缓存所占的资源,资源包括帧缓存数据结构和物理内存资源;其中,虚拟显示设备为包含单一图层的DisplayDevice;
在桌面系统中,当显示服务器接收到屏幕数据共享请求时,在完成桌面端屏幕数据绘制后获取当前进程相关的桌面端帧缓存指针,并根据接收到的句柄使桌面端帧缓存指针指向共享帧缓存,创建类型为可写的帧缓存数据结构,令桌面端帧缓存指针作为可写的帧缓存数据结构的指针,将屏幕数据绘制到桌面端帧缓存指针所指向的共享帧缓存中,并向虚拟图形缓冲区生产者发送绘制完毕消息;当显示服务器接收到暂停屏幕数据共享请求时,停止向共享帧缓存写入屏幕数据,释放共享帧缓存桌面端所占资源。
进一步地,为了提高桌面系统屏幕共享的执行效率,本发明通过修改安卓系统的显示设备及桌面系统的显示服务器的实现方式,实现屏幕数据在桌面系统与安卓兼容环境之间的共享,具体包括以下步骤:
在安卓兼容环境中,在SurfaceFlinger::handleTransactionLocked方法中,增加创建与虚显相关的虚拟图形缓冲区生产者、虚拟显示绘制表面及虚拟显示设备的过程;
在桌面系统中,当显示服务器采用的协议为X11协议时,若显示服务器采用单缓冲方式,则在绘制完屏幕数据之后、调用glFlush之前,即先将屏幕数据渲染到桌面系统的显示设备中后,在强制刷新缓冲之前将内存中保存的屏幕数据渲染到安卓端的显示设备中,保存当前目标帧缓存指针,以便在将屏幕数据渲染到安卓端后能够恢复桌面端正常的执行过程,将目标帧缓存指针指向共享帧缓存再将屏幕数据绘制到共享帧缓存中,最后将目标帧缓存指针恢复为当前目标帧缓存指针;若显示服务器采用双缓存方式,则将共享帧缓存的指针加入缓存列表中,在绘制完屏幕数据之后调用glSwapBuffers将屏幕数据绘制到共享帧缓存中;当显示服务器采用的协议为Wayland协议时,则在完成所有桌面窗口的合成后,将屏幕数据从合成缓冲区复制到共享帧缓存中;
在安卓兼容环境中,在glGenFramebuffers方法中,创建共享帧缓存、类型为可读的帧缓存数据结构及共享帧缓存安卓端指针,将共享帧缓存安卓端指针作为帧缓存数据结构的指针,共享帧缓存安卓端指针指向共享帧缓存,再将共享帧缓存的句柄发送到显示服务器;在桌面系统中,在glGenFramebuffers方法中,获取当前进程相关的桌面端帧缓存指针,根据共享帧缓存的句柄使桌面端帧缓存指针指向共享帧缓存,创建类型为可写的帧缓存数据结构,令桌面端帧缓存指针作为可写的帧缓存数据结构的指针。
进一步地,针对Linux系统,本发明提供了类型为IGraphicBufferProducer的虚拟图形缓冲区生产者的一用实现方式:
步骤1.1、采用glGenFramebuffers创建共享帧缓存,该共享帧缓存为提供给Linux内显示服务器的、支持OpenGL/OpenGL ES/Vulkan接口的缓存。具体包括以下步骤:
S1、分配共享帧缓存sharedFrameBufferInAndroid。
首先,使用通用内存函数分配按系统内存页对齐的内存作为共享帧缓存sharedFrameBufferInAndroid,即起始地址按内存页对齐、且分配长度为内存页的整数倍,以便于能够提供更高的内存复制性能。其次,对于支持将内存作为显存共享给显卡的平台,如Intel的集显平台,则采用ioctl命令通知GPU将共享帧缓存映射到显存,即GPU可使用共享帧缓存作为显存使用。
其中,采用的ioctl命令为DMA_IOCTL_PRIME_HANDLE_TO_FD。
S2、创建类型为GL_READ_FRAMEBUFFER的可读的帧缓存数据结构,并使该帧缓存数据结构对应的渲染缓冲区指向共享帧缓存。
S3、将共享帧缓存的句柄sharedFrameBufferHandle封装为屏幕数据共享请求通过RPC传递给Linux端的显示服务器。
步骤1.2、当接收到显示服务器发送的绘制完毕消息时,若桌面系统支持将内存作为显存共享给显卡,则将共享帧缓存内的屏幕数据渲染到虚拟显示绘制表面(VirtualDisplaySurface)生成渲染数据;若桌面系统不支持将内存作为显存共享给显卡,则将共享帧缓存的屏幕数据复制到虚拟显示绘制表面对应的显存中。
进一步地,针对Linux系统,本发明提供了Linux系统中显示服务器的相关实现方式,具体包括以下步骤:
步骤2.1、当显示服务器接收到屏幕数据共享请求时,执行步骤2.2;当显示服务器接收到暂停屏幕数据共享请求时,执行步骤2.6。
步骤2.2、获取本进程内的目标帧缓存指针sharedFrameBufferInLinux,根据请求中的共享帧缓存的句柄,使指针sharedFrameBufferInLinux指向共享帧缓存sharedFrameBufferInAndroid;创建类型为GL_DRAW_FRAMEBUFFER的可写的帧缓存数据结构,使指针sharedFrameBufferInLinux作为该帧缓存数据结构的指针。
步骤2.3、当显示服务器基于X11协议时,执行步骤2.4;当显示服务器基于Wayland协议时,执行步骤2.5。
步骤2.4、若显示服务器采用单缓冲技术,由于glFlush函数可能会清除源缓存,因此,在绘制完屏幕数据之后、调用glFlush之前,首先,保存当前目标帧缓存的数据为oldFrameBuffer,具体来说,可通过调用glBindFramebuffer等函数实现对当前目标帧缓存的设置;其次,将目标帧缓存设置为指针sharedFrameBufferInLinux所指向的共享帧缓存,再调用glBlitFramebuffer等复制帧缓存函数或glReadPixels等像素复制函数实现将屏幕数据绘制到sharedFrameBufferInLinux中;最后,将目标帧缓存恢复为oldFrameBuffer;
若显示服务器采用多缓存技术,则将指针sharedFrameBufferInLinux加入缓存列表,在绘制完屏幕数据之后,调用glSwapBuffers函数实现将屏幕数据绘制到指针sharedFrameBufferInLinux所指向的共享帧缓存中。
步骤2.5、在显示服务器完成对所有桌面窗口的合成并将合成结果保存在合成缓冲区中后,将屏幕数据从合成缓冲区复制到指针sharedFrameBufferInLinux所指向的共享帧缓存中。
具体来说,若桌面系统的处理器支持SIMD指令集(如x86的SSE、ARM的Neon等),则调用SIMD指令批量将屏幕数据复制到指针sharedFrameBufferInLinux所指向的共享帧缓存中;否则,按照内存页的整数倍将屏幕数据复制到指针sharedFrameBufferInLinux所指向的共享帧缓存中。
步骤2.6、停止向共享帧缓存写入屏幕数据,调动glDeleteFramebuffers函数释放帧缓存数据结构所占资源,该资源包含了共享帧缓存相关的数据结构和指针。其中,对于支持将内存作为显存共享给显卡的桌面系统(如Intel的集显平台),则采用ioctl命令通知GPU做DMA缓存同步后,再释放共享帧缓存,释放显存,例如,ioctl命令为DMA_BUF_IOCTL_SYNC,释放缓存的操作方式为调用munmap函数实现。
进一步地,为了避免由虚拟显示设备导致的安卓系统误刷新操作,以提高跨环境的显示输出的效率,本发明提供了虚拟显示设备中单一图层的一种实现方式,具体为:将图层的绘制状态设置为不透明且始终可见,且可视区域的尺寸与桌面系统的屏幕尺寸相同。
综上所述,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (4)
1.一种基于异构渲染的跨运行环境显示输出共享方法,其特征在于,包括以下步骤:
在安卓兼容环境中,当安卓应用创建虚显时为该虚显创建虚拟图形缓冲区生产者、虚拟显示绘制表面及虚拟显示设备,虚拟图形缓冲区生产者创建共享帧缓存后向桌面系统的显示服务器发送带有共享帧缓存的句柄的屏幕数据共享请求;当接收到显示服务器发送的绘制完毕消息时,虚拟图形缓冲区生产者将共享帧缓存中的屏幕数据渲染到虚拟显示绘制表面生成渲染数据,再由虚拟显示设备将渲染数据输出到屏幕显示,其中,若桌面系统支持将内存作为显存共享给显卡,则将共享帧缓存内的屏幕数据渲染到虚拟显示绘制表面生成渲染数据;若桌面系统不支持将内存作为显存共享给显卡,则将共享帧缓存的屏幕数据复制到虚拟显示绘制表面对应的显存中;当虚显被销毁时,虚拟图形缓冲区生产者向显示服务器发送暂停屏幕数据共享请求,释放共享帧缓存所占系统资源;其中,虚拟显示设备为包含单一图层的DisplayDevice;
在桌面系统中,当显示服务器接收到屏幕数据共享请求时,完成桌面端屏幕数据绘制后获取当前进程的桌面端帧缓存指针,根据接收到的句柄使桌面端帧缓存指针指向共享帧缓存,将屏幕数据绘制到共享帧缓存中,并向虚拟图形缓冲区生产者发送绘制完毕消息;当显示服务器接收到暂停屏幕数据共享请求时,停止向共享帧缓存写入屏幕数据,释放共享帧缓存桌面端所占资源。
其中,所述当显示服务器接收到屏幕数据共享请求时,若所述显示服务器采用的协议为X11协议且采用单缓冲方式,则在绘制完屏幕数据之后、调用glFlush之前,获取当前进程的桌面端帧缓存指针并保存为当前目标帧缓存指针,将桌面端帧缓存指针指向共享帧缓存再将屏幕数据绘制到共享帧缓存中,再将桌面端帧缓存指针恢复为当前目标帧缓存指针;若采用双缓存方式,则将共享帧缓存对应的桌面端指针加入缓存列表中,在绘制完屏幕数据之后调用glSwapBuffers将屏幕数据绘制到共享帧缓存中。
2.根据权利要求1的跨运行环境显示输出共享方法,其特征在于,所述当显示服务器接收到屏幕数据共享请求时,若所述显示服务器采用的协议为Wayland协议,则在完成所有桌面窗口的合成后,将屏幕数据从合成缓冲区复制到共享帧缓存中。
3.根据权利要求1的跨运行环境显示输出共享方法,其特征在于,所述当显示服务器接收到暂停屏幕数据共享请求时,停止向共享帧缓存写入屏幕数据,释放共享帧缓存桌面端所占资源,其中,若桌面系统支持将内存作为显存共享给显卡,则采用ioctl命令通知GPU做DMA缓存同步后,再释放共享帧缓存,并释放显存。
4.根据权利要求1的跨运行环境显示输出共享方法,其特征在于,所述虚拟显示设备的单一图层的实现方式为:将图层的绘制状态设置为不透明且始终可见,且可视区域的尺寸与桌面系统的屏幕尺寸相同。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210658931.5A CN114741044B (zh) | 2022-06-13 | 2022-06-13 | 一种基于异构渲染的跨运行环境显示输出共享方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210658931.5A CN114741044B (zh) | 2022-06-13 | 2022-06-13 | 一种基于异构渲染的跨运行环境显示输出共享方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114741044A CN114741044A (zh) | 2022-07-12 |
CN114741044B true CN114741044B (zh) | 2022-09-30 |
Family
ID=82287250
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210658931.5A Active CN114741044B (zh) | 2022-06-13 | 2022-06-13 | 一种基于异构渲染的跨运行环境显示输出共享方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114741044B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115409687B (zh) * | 2022-10-31 | 2023-01-13 | 北京麟卓信息科技有限公司 | 一种基于显示缓冲区合成的渲染差异检测方法 |
CN115562793B (zh) * | 2022-12-05 | 2023-02-03 | 北京麟卓信息科技有限公司 | 一种基于镜像操作的跨运行环境ui快速渲染方法 |
CN116248884B (zh) * | 2023-05-12 | 2023-06-30 | 北京麟卓信息科技有限公司 | 一种基于会话复用的多路视频解码方法 |
CN116471446B (zh) * | 2023-06-19 | 2023-08-11 | 北京麟卓信息科技有限公司 | 一种跨运行环境的视频播放优化方法 |
CN116991619B (zh) * | 2023-08-02 | 2024-03-12 | 中国舰船研究设计中心 | 一种舰船信息系统数字模型集成管理系统及方法 |
CN117435112B (zh) * | 2023-12-20 | 2024-04-05 | 摩尔线程智能科技(成都)有限责任公司 | 数据处理方法、系统及装置、电子设备和存储介质 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108427545A (zh) * | 2018-02-01 | 2018-08-21 | 广州视源电子科技股份有限公司 | 截屏数据的处理方法、装置、系统、存储介质及处理器 |
CN109725867A (zh) * | 2019-01-04 | 2019-05-07 | 中科创达软件股份有限公司 | 虚拟化屏幕共享方法、装置及电子设备 |
CN113220474A (zh) * | 2021-04-21 | 2021-08-06 | 麒麟软件有限公司 | 一种基于Android-EMUGL的安卓应用共享Linux系统屏幕数据的方法 |
CN113641320A (zh) * | 2021-08-16 | 2021-11-12 | 深圳技德智能科技研究院有限公司 | 一种Linux兼容Android的共享屏幕方法及装置 |
CN113900754A (zh) * | 2021-10-09 | 2022-01-07 | 深圳技德智能科技研究院有限公司 | 共享桌面方法、装置、计算机设备和存储介质 |
CN114385305A (zh) * | 2022-03-23 | 2022-04-22 | 麒麟软件有限公司 | 一种录制Linux屏幕并分享给安卓应用的系统和方法 |
CN114489888A (zh) * | 2022-01-10 | 2022-05-13 | 麒麟软件有限公司 | 基于DRM的Android应用共享Linux系统屏幕数据的方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8726294B2 (en) * | 2010-10-01 | 2014-05-13 | Z124 | Cross-environment communication using application space API |
-
2022
- 2022-06-13 CN CN202210658931.5A patent/CN114741044B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108427545A (zh) * | 2018-02-01 | 2018-08-21 | 广州视源电子科技股份有限公司 | 截屏数据的处理方法、装置、系统、存储介质及处理器 |
CN109725867A (zh) * | 2019-01-04 | 2019-05-07 | 中科创达软件股份有限公司 | 虚拟化屏幕共享方法、装置及电子设备 |
CN113220474A (zh) * | 2021-04-21 | 2021-08-06 | 麒麟软件有限公司 | 一种基于Android-EMUGL的安卓应用共享Linux系统屏幕数据的方法 |
CN113641320A (zh) * | 2021-08-16 | 2021-11-12 | 深圳技德智能科技研究院有限公司 | 一种Linux兼容Android的共享屏幕方法及装置 |
CN113900754A (zh) * | 2021-10-09 | 2022-01-07 | 深圳技德智能科技研究院有限公司 | 共享桌面方法、装置、计算机设备和存储介质 |
CN114489888A (zh) * | 2022-01-10 | 2022-05-13 | 麒麟软件有限公司 | 基于DRM的Android应用共享Linux系统屏幕数据的方法 |
CN114385305A (zh) * | 2022-03-23 | 2022-04-22 | 麒麟软件有限公司 | 一种录制Linux屏幕并分享给安卓应用的系统和方法 |
Non-Patent Citations (1)
Title |
---|
Android中的GraphicBuffer同步机制-Fence;ariesjzj;《CSDN https://blog.csdn.net/jinzhuojun/article/details/39698317》;20141001;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN114741044A (zh) | 2022-07-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN114741044B (zh) | 一种基于异构渲染的跨运行环境显示输出共享方法 | |
US7475197B1 (en) | Cross process memory management | |
US7889202B2 (en) | Transparent multi-buffering in multi-GPU graphics subsystem | |
US7262776B1 (en) | Incremental updating of animated displays using copy-on-write semantics | |
CN112269603B (zh) | 一种在Linux上兼容运行Android应用的图形显示方法与装置 | |
US7065630B1 (en) | Dynamically creating or removing a physical-to-virtual address mapping in a memory of a peripheral device | |
CN112114916B (zh) | 一种在Linux操作系统上兼容运行Android应用的方法和装置 | |
US20060028479A1 (en) | Architecture for rendering graphics on output devices over diverse connections | |
US10558496B2 (en) | Techniques for accessing a graphical processing unit memory by an application | |
CN114741081B (zh) | 一种基于异构缓存访问的跨运行环境显示输出共享方法 | |
US11204790B2 (en) | Display method for use in multi-operating systems and electronic device | |
JP2001084154A (ja) | スレッドを使用する、コンピュータ・システム内でのグラフィックス・テクスチャ管理の同期化 | |
CN105190701B (zh) | 基于原语的合成系统及方法 | |
CN114972607B (zh) | 加速图像显示的数据传输方法、装置及介质 | |
TW201301195A (zh) | 多重顯示器控制方法及其系統 | |
CN116821040B (zh) | 基于gpu直接存储器访问的显示加速方法、装置及介质 | |
CN114895961B (zh) | 一种跨运行环境的显示输出共享方法 | |
CN117170883B (zh) | 渲染显示的方法、装置、设备及存储介质 | |
US5553228A (en) | Accelerated interface between processors and hardware adapters | |
GB2561451A (en) | Data processing | |
WO2022087981A1 (zh) | 一种基于安卓系统的笔迹显示的方法、装置及存储介质 | |
CN113835816A (zh) | 一种虚拟机桌面显示方法、装置、设备及可读存储介质 | |
CN117724797B (zh) | 一种基于异构混合渲染的自由缩放优化方法 | |
CN115543333A (zh) | 一种显示缓存读写的方法与终端 | |
CN114706543A (zh) | 接口输入数据的显示方法和设备及计算机可读介质 |
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 |