CN113051047B - 识别安卓系统绘制线程的方法、装置、移动终端及存储介质 - Google Patents

识别安卓系统绘制线程的方法、装置、移动终端及存储介质 Download PDF

Info

Publication number
CN113051047B
CN113051047B CN202110239090.XA CN202110239090A CN113051047B CN 113051047 B CN113051047 B CN 113051047B CN 202110239090 A CN202110239090 A CN 202110239090A CN 113051047 B CN113051047 B CN 113051047B
Authority
CN
China
Prior art keywords
thread
state
current running
identifying
threads
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
Application number
CN202110239090.XA
Other languages
English (en)
Other versions
CN113051047A (zh
Inventor
丁唐
王斌宏
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Yuxin Zhixing Technology Ningbo Co ltd
Original Assignee
Yuxin Zhixing Technology Ningbo Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Yuxin Zhixing Technology Ningbo Co ltd filed Critical Yuxin Zhixing Technology Ningbo Co ltd
Priority to CN202110239090.XA priority Critical patent/CN113051047B/zh
Publication of CN113051047A publication Critical patent/CN113051047A/zh
Priority to US18/548,904 priority patent/US20240143395A1/en
Priority to EP22762325.3A priority patent/EP4303725A1/en
Priority to PCT/CN2022/072611 priority patent/WO2022183856A1/zh
Application granted granted Critical
Publication of CN113051047B publication Critical patent/CN113051047B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/526Mutual exclusion algorithms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/54Indexing scheme relating to G06F9/54
    • G06F2209/545Gui
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/54Indexing scheme relating to G06F9/54
    • G06F2209/548Queue
    • YGENERAL 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
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE 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/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Image Generation (AREA)

Abstract

本发明公开了一种识别安卓程序绘制线程的方法、装置、移动终端及存储介质,所述方法包括:创建多个线程,所述线程包括应用进程的主线程、安卓系统的硬件渲染线程和自定义线程中的一种或多种线程;通过线程进行跨进程通信并申请图形缓存区,调用BufferQueue的QueueBuffer函数将客户端绘制好的图形内容递交给系统图形缓冲区;根据进程状态切换时的状态识别线程任务,识别当前运行线程,标记线程当前的task_struct为ui_thread,得到绘制线程状态;根据进程状态切换时的状态识别线程任务,若不是当前运行线程,则重置绘制线程状态。本发明能够识别移动终端上绘制相关的进程并给予最大的资源利用,能够提高移动的系统的利用率。

Description

识别安卓系统绘制线程的方法、装置、移动终端及存储介质
技术领域
本发明涉及Android操作系统终端的技术领域,具体的涉及一种识别安卓系统绘制线程的方法、装置、移动终端及存储介质。
背景技术
随着计算机技术的不断发展,手机、平板电脑、台式电脑等移动终端上安装的软件越来越多,进而软件对移动终端上的资源的争夺越来越激烈,如中央处理器CPU、存储器Memory、IO等。处理器厂商受到功耗和温度的限制,同时为了保持高性能运算持续增长,计算机技术已经朝着多核计算机体系架构方向发展。为了充分利用多核架构,应用程序被拆分成多个可独立运行在单个CPU上面的线程,这样设计程序可以并行执行提高整体运行效率。目前,当软件在移动终端上运行时,移动终端上可能还会存在多个软件残留的辅助进程、用于收集数据以制定用户策略的进程、用于弹出弹窗的进程等。由于这些残留进程占用了移动终端的资源,导致移动终端经常出现卡顿或运行较慢等现象。
线程是程序执行流的最小单元,是进程中的一个实体,是被系统独立调度和分派的基本单位。线程包括就绪、卡顿(阻塞)和运行三种基本状态。就绪状态是指线程具备运行的所有条件,逻辑上可以运行,在等待处理机;运行状态是指线程占有处理机正在运行;卡顿状态是指线程在等待一个事件(如某个信号量),逻辑上不可执行。线程处于卡顿状态将直接影响整个程序的运行效果。因此,如何识别移动终端上绘制相关的线程并给予最大的资源利用成为一个需要解决的技术问题。
因此,有必要提供一种识别安卓系统绘制线程的方法、移动终端及存储介质以解决上述问题。
发明内容
本发明要解决的技术问题在于,软件在移动终端上运行时,移动终端上可能还会存在多个软件残留的辅助进程、用于收集数据以制定用户策略的进程、用于弹出弹窗的进程等,残留进程占用了移动终端的资源,导致移动终端经常出现卡顿或运行较慢等现象,而线程处于卡顿状态将直接影响整个程序的运行效果,因此本发明人提供一种识别安卓系统绘制线程的方法、移动终端及存储介质用以解决上述问题。
本发明解决技术问题所采用的技术方案如下:
第一方面,本发明提供一种识别安卓系统绘制线程的方法,用于基于安卓操作系统的客户端,包括以下步骤:
创建多个线程,所述线程包括应用进程的主线程、安卓系统的硬件渲染线程和自定义线程中的一种或多种线程;
通过线程进行跨进程通信并申请图形缓存区,调用BufferQueue的QueueBuffer函数将客户端绘制好的图形内容递交给系统图形缓冲区;
根据进程状态切换时的状态识别线程任务,识别当前运行线程,标记线程当前的task_struct为ui_thread,得到绘制线程状态;
根据进程状态切换时的状态识别线程任务,若不是当前运行线程,则重置绘制线程状态。
在上述技术方案中,优选的,根据进程状态切换时的状态识别线程任务的步骤包括:
当前运行线程为主线程时,通过是否是前台状态进行绘制线程状态的设置,若是前台状态,则标记为绘制线程并进入绘制流程,否则重置绘制线程状态或采用默认优先级进入流程;
当前运行线程为硬件渲染线程时,对于该绘制线程在进行初始化时设置绘制状态,并设置到内核维护的线程表中,当识别为设置绘制标志则进入绘制流程,否则采用默认优先级进入流程;
当前运行线程为自定义线程时,在绘制接口queueBuffer中进行识别并进行绘制线程状态的设置,当有客户端通过此接口进行图形缓存填充时,标记调用端为绘制线程,当识别为设置绘制标志则进入绘制流程,否则采用默认优先级进入流程。
在上述技术方案中,优选的,根据进程状态切换时的状态识别线程任务的步骤包括:当前运行线程为主线程时,所述主线程的识别通过更新进程状态,再进行判断是否是前台状态进行绘制线程状态的设置。
在上述技术方案中,优选的,所述通过线程进行跨进程通信并申请图形缓存区步骤中:所述图形缓存区为GraphicBuffer。
在上述技术方案中,优选的,所述识别安卓系统绘制线程的方法步骤还包括:当前运行线程发送绘制请求,调用接口控制ioctl函数,所述ioctl函数对所述服务请求进行解析。
在上述技术方案中,优选的,所述识别安卓系统绘制线程的方法步骤还包括:当前进程调用服务器并绘制应用,绘制应用中通过SurfaceFlinger控制窗口的合成并进行绘制。
在上述技术方案中,优选的,所述绘制应用中通过SurfaceFlinger控制窗口的合成并进行绘制步骤中,所述SurfaceFlinger与HWComposer连接,合成的帧缓存区发送至HWComposer,使其作为目标缓存区。
第三方面,本发明实施例还提供一种识别安卓系统绘制线程的装置,用于基于安卓操作系统的客户端,所述装置包括:
线程创建模块,用于创建多个线程,所述线程包括应用进程的主线程、安卓系统的硬件渲染线程和自定义线程中的一种或多种线程;
缓存获取模块,用于通过线程进行跨进程通信并申请图形缓存区,调用BufferQueue的QueueBuffer函数将客户端绘制好的图形内容递交给系统图形缓冲区;
线程绘制模块,用于根据进程状态切换时的状态识别线程任务,识别当前运行线程,标记线程当前的task_struct为ui_thread,得到绘制线程状态;
线程绘制控制模块,用于根据进程状态切换时的状态识别线程任务,若不是当前运行线程,则重置绘制线程状态。
第三方面,本发明提供一种移动终端,其包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的识别安卓系统绘制线程程序,所述处理器执行所述识别安卓系统绘制线程程序时,所述处理器用于执行如上所述的方法。
第四方面,本发明提供一种存储介质,所述存储介质存储用于电子数据交换的计算机程序,其中,所述计算机程序使得计算机执行如上所述的方法。
有益效果:本发明提供的识别安卓系统绘制线程的方法通过根据进程状态切换时的状态识别线程任务,识别当前运行线程,尤其对于主线程、硬件渲染线程和自定义线程通过不同方式进行标记,具体的识别所述主线程是否是前台状态进而决定是否进入绘制流程、识别所述硬件渲染状态是否在初始化时设置绘制状态进而决定是否进入绘制流程、以及识别所述自定义线程是否在绘制接口queueBuffer中设置绘制状态进而决定是否进入绘制流程,该方法有助于识别每一线程的状态,标识出每一任务的状态,使得无论哪个线程进行跨进程通信申请GraphicBuffer时,均可以通过识别标识的每一任务的状态,使得后续处理时能够给予识别出来的任务更多的资源避让;进而能够识别移动终端上绘制相关的进程并给予最大的资源利用,能够提高移动的系统的利用率。
附图说明
图1是本发明提供的识别安卓系统绘制线程的方法的步骤流程图;
图2是本发明提供的绘制线程数据流的框架图;
图3是本发明提供的绘制线程识别的具体流程图;
图4是本发明提供的识别安卓系统绘制线程的装置的原理框图。
具体实施方式
为使本发明的目的、技术方案及优点更加清楚、明确,以下参照附图,并举实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本发明的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。
本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语),具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语,应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样被特定定义,否则不会用理想化或过于正式的含义来解释。
后面所讨论的方法(其中一些通过流程图示出)可以通过硬件、软件、固件、中间件、微代码、硬件描述语言或者其任意组合来实施。当用软件、固件、中间件或微代码来实施时,用以实施必要任务的程序代码或代码段可以被存储在机器或计算机可读介质(比如存储介质)中。(一个或多个)处理器可以实施必要的任务。
这里所公开的具体结构和功能细节仅仅是代表性的,并且是用于描述本申请的示例性实施例的目的。但是本申请可以通过许多替换形式来具体实现,并且不应当被解释成仅仅受限于这里所阐述的实施例。
在更加详细地讨论示例性实施例之前应当提到的是,一些示例性实施例被描述成作为流程图描绘的处理或方法。虽然流程图将各项操作描述成顺序的处理,但是其中的许多操作可以被并行地、并发地或者同时实施。此外,各项操作的顺序可以被重新安排。当其操作完成时所述处理可以被终止,但是还可以具有未包括在附图中的附加步骤。所述处理可以对应于方法、函数、规程、子例程、子程序等等。
请同时参阅图1-图3,其中,图1为本发明提供的识别安卓系统绘制线程的方法的步骤流程图,图2是本发明提供的绘制线程数据流的框架图,图3是本发明提供的绘制线程识别的具体流程图。
根据图1提供的步骤流程图,本发明提供一种识别安卓系统绘制线程的方法,用于基于安卓操作系统的客户端,其包括以下步骤:
S01、创建多个线程,所述线程包括应用进程的主线程、安卓系统的硬件渲染线程和自定义线程中的一种或多种线程;
S02、通过线程进行跨进程通信并申请图形缓存区,调用BufferQueue的QueueBuffer函数将客户端绘制好的图形内容递交给系统图形缓冲区;
S03、根据进程状态切换时的状态识别线程任务,识别当前运行线程,标记线程当前的task_struct为ui_thread,得到绘制线程状态;
S04、根据进程状态切换时的状态识别线程任务,若不是当前运行线程,则重置绘制线程状态。
S05、当前运行进程调用服务器并绘制应用,绘制应用中通过SurfaceFlinger控制窗口的合成并进行绘制。
具体的,本发明提供一个实施例用于详细阐述上述步骤。
Android系统提供了一个图形绘制系统,应用程序可以通过一定的接口调用,将自身的绘制指令通过给定的接口传递给SurfaceFlinger进行绘制显示,其中本发明提供的识别安卓系统绘制线程的方法的具体步骤及原理如下:
S01、创建多个线程,所述线程包括应用进程的主线程、安卓系统的硬件渲染线程和自定义线程中的一种或多种。
线程是程序执行流的最小单元,是进程中的一个实体,是被系统独立调度和分派的基本单位。一个Android程序默认情况下只有一个进程(Process),而一个Process下可以设置多个线程(Thread)。线程是一个进程中的执行场景,一个进程可以启动多个线程。线程包括就绪、卡顿(阻塞)和运行三种基本状态。就绪状态是指线程具备运行的所有条件,逻辑上可以运行,在等待处理机;运行状态是指线程占有处理机正在运行;卡顿状态是指线程在等待一个事件(如某个信号量),逻辑上不可执行。本发明提供的方法是为了识别线程的运行状态。
Android中的线程主要分为两类:UIThread,即主线程,又称UI线程;另一类是WorkerThread,即自定义线程,或者称为工作线程。UIThread是应用程序执行的主要线程,是运行大多数应用程序代码的地方。所有应用程序组件都是在这个线程中创建的,所述应用程序组件包括活动、服务、内容提供程序、BroadCastReceivers等,对所述这应用程序组件的任何系统调用都是在这个线程中执行的。一个Android进程运行起来后,jvm(Java虚拟机)自动启动一个线程,即主线程,在这个线程里原则上可以进行任何合法操作。访问网络一般耗时比较长,在主线程里访问网络会造成程序卡顿甚至卡死。只要是比较耗时的操作,都不应该在主线程中进行。因此,如果应用程序中存在耗时较长的操作,那么必须开启新线程。从而,程序中就可以同时存在UIThread线程和一个或者多个WorkerThread。除此之外,Android系统默认存在一个硬件渲染线程HardwareRenderer,HardwareRenderer是整个硬件加速绘制的入口,实现是一个ThreadedRenderer对象,ThreadedRenderer应该跟一个Render线程息息相关,并且ThreadedRenderer是在UI线程中创建的,其主要作用在于负责跟渲染线程通信。
S02、通过绘制线程进行跨进程通信并申请图形缓存区,调用BufferQueue的dequeueBuffer函数将客户端绘制好的图形内容递交给系统图形缓冲区。特别的,所述图形缓存区为GraphicBuffer。
具体的,所述图形缓存区为GraphicBuffer。根据Android系统图形系统的绘制原理,无论是系统内置应用还是三方应用,都需要从BufferQueue中申请一块图形缓存用来准备绘制应用的内容。基于所述当前应用线程申请显示的图像数据,向本地操作系统的显示系统中的SurfaceFlinger申请对应的GraphicBuffer;然后,将所述当前应用进程申请显示的图像数据绘制到GraphicBuffer;通过所述SurfaceFlinger将绘制图像数据后的GraphicBuffer合成最终图像内容,作为当前屏幕信息以进行显示。
除此之外,无论是软件绘制还是硬件加速,绘制内存的分配都是类似的,都是需要请求SurfaceFlinger服务分配一块内存,不同的是硬件加速有可能从FrameBuffer硬件缓存区直接分配内存,两者的绘制都是在应用程序端,绘制完成之后同样需要通知SurfaceFlinger进行合成。
S03、根据进程状态切换时的状态识别任务,识别当前运行线程,标记线程当前的task_struct为ui_thread,得到绘制线程状态。
当前运行线程为线程A(主线程)时,线程A先进行更新进程状态(updateProcessState),再通过是否是前台状态进行绘制线程状态的设置。若判断线程A是前台状态,则标记线程A当前的task_struct为ui_thread,得到绘制线程状态,并通过系统调用IOCTL函数。其中,IOCTL是设备驱动程序中对设备的I/O通道进行管理的函数。所谓对I/O通道进行管理,就是对设备的一些特性进行控制,例如串口的传输波特率、马达的转速等等。在本实施例中,则是对当前运行线程发送的绘制请求进行解析。
当前运行线程为线程B(硬件渲染线程HardwareRender)时,对于线程B在进行初始化时设置绘制状态,并设置到内核维护的线程表中。当识别到所述线程B为设置绘制状态时,则标记线程当前的task_struct为ui_thread,得到绘制线程状态,并通过系统调用IOCTL函数。
当前运行线程为线程N(未知自定义线程)时,在绘制接口QueueBuffer中进行识别并进行绘制线程状态的设置,当有客户端通过所述绘制接口QueueBuffer进行图形缓存填充时,标记调用端线程当前的task_struct为ui_thread,得到绘制线程状态。当识别到所述线程N为设置绘制状态时,则进入绘制流程,并通过系统调用IOCTL函数。
S04、根据进程状态切换时的状态识别任务,若不是当前运行线程,则重置绘制线程状态并采用默认优先级进入流程。
当前运行线程为线程A(主线程)时,线程A先进行更新进程状态(updateProcessState),再通过是否是前台状态进行绘制线程状态的设置。若判断线程A不是前台状态,则重置绘制线程状态,并通过系统调用IOCTL函数。
当前运行线程为线程B(硬件渲染线程HardwareRender)时,对于线程B在进行初始化时设置绘制状态,并设置到内核维护的线程表中。当识别到所述线程B为未设置绘制状态时,则采用默认优先级进入流程。
当前运行线程为线程N(未知自定义线程)时,在绘制接口QueueBuffer中进行识别并进行绘制线程状态的设置,当识别到所述线程N为未设置绘制状态时,则采用默认优先级进入流程。
S05、当前运行进程调用服务器并绘制应用,绘制应用中通过SurfaceFlinger控制窗口的合成并进行绘制。优选的,所述SurfaceFlinger与HWComposer连接,合成的帧缓存区发送至HWComposer,使其作为目标缓存区。
为了便于阐述安卓系统绘制线程的数据流程原理,根据图2提供的绘制线程数据流的框架图,我们可以得知:
每一应用程序App包括多个线程(Thread),应用程序App可创建多个子线程Thread,具体由哪一线程执行绘制任务并不确定。当子线程需要执行绘制任务时,将从BufferQueue中申请一块图形缓存用来准备绘制应用的内容,最后通过queueBuffer的方式传递给BufferQueue,交给SurfaceFlinger进行绘制。
在Android中,一个窗口用一个Surface描述。多个窗口需要同时显示,则需要将多个窗口进行合并。这需要显示系统中的服务Surfaceflinger控制窗口的合成,将多个窗口合并成一个,再送到LCD。其中,Surfaceflinger采用图层的概念,即Layer。SurfaceFlinger合成,就是基于Display HAL的实现,将多个Layer合并。SurfaceFlinger就是将多个Surface里的内容进行合成,最后提交到屏幕的后缓存区,等待屏幕的下一个垂直同步信号的到来,再显示到屏幕上。
Surface内部存在多个缓存区,形成一个BufferQueue,图形的传递是通过Buffer作为载体,Surface是对Buffer的进一步封装,也就是说Surface内部具有多个Buffer供上层使用。
在Android系统中,在系统帧缓存区中分配的图形缓存区是在SurfaceFlinger服务中使用的,而在内存中分配的图形缓存区既可以在SurfaceFlinger服务中使用,也可以在其它的应用程序中使用。当其它的应用程序需要使用图形缓存区的时候,它们就会请求SurfaceFlinger服务为它们分配,因此,对于其它的应用程序来说,它们只需要将SurfaceFlinger服务返回来的图形缓存区映射到自己的进程地址空间来使用就可以了。
SurfaceFlinger是整个Android显示系统的管理核心,控制各个窗口的叠加,调用GPU或2D加速器进行合成。接口中,首先调用BufferQueue的dequeueBuffer函数获得一片帧缓存区,然后启动GPU把各个窗口的内容合成到这片帧缓存区上,接着调用BufferQueue的queueBuffer函数。BufferQueue就会调用HWComposer的fbPost函数,把这片合成好的帧缓存区交给HWComposer,作为2D加速器的目标缓存区。最后,SurfaceFlinger调用HWComposer的commit函数,HWComposer就会调用framebuffer_device_t的接口fb_post,把目标缓存区交给framebuffer_device_t送入屏幕显示。
具体的,根据图3提供的绘制线程识别的具体流程图,进一步的我们可以得知:
线程A表示应用程序的主程序,每一应用程序在创建时会默认创建一个主线程,用于进行生命周期的管理。线程A先进行更新进程状态(updateProcessState),再通过是否是前台状态进行绘制线程状态的设置。若判断线程A是前台状态,则标记线程当前的task_struct为ui_thread,得到绘制线程状态,并通过系统调用IOCTL函数;若判断线程A不是前台状态,则重置绘制线程状态,并通过系统调用IOCTL函数。
线程B是安卓系统默认存在的一个硬件渲染线程HardwareRenderer,对于线程B在进行初始化时设置绘制状态,并设置到内核维护的线程表中。当识别到所述线程B为设置绘制状态时,则标记线程当前的task_struct为ui_thread,得到绘制线程状态,并通过系统调用IOCTL函数。当识别到所述线程B为未设置绘制状态时,则并采用默认优先级进入流程。
线程N是未自定义线程,其没有特定的标记位可以进行识别,因此本发明中通过Surface内部多个缓存区形成的QueueBuffer进行识别。具体的,当有客户端通过绘制接口QueueBuffer进行图形缓存填充时,标记调用端线程当前的task_struct为ui_thread,得到绘制线程状态。后续识别步骤与线程B一致,当识别到所述线程N为设置绘制状态时,则标记线程当前的task_struct为ui_thread,得到绘制线程状态,并通过系统调用IOCTL函数。当识别到所述线程N为未设置绘制状态时,则采用默认优先级进入流程B。
在一个实施例中,提供了一种移动终端,包括处理器和存储器,所述存储器存储有程序,所述处理器用于执行以下操作:
创建多个线程,所述线程包括应用进程的主线程、安卓系统的硬件渲染线程和自定义线程中的一种或多种线程;
通过线程进行跨进程通信并申请图形缓存区,调用BufferQueue的QueueBuffer函数将客户端绘制好的图形内容递交给系统图形缓冲区;
根据进程状态切换时的状态识别线程任务,识别当前运行线程,标记线程当前的task_struct为ui_thread,得到绘制线程状态;
根据进程状态切换时的状态识别线程任务,若不是当前运行线程,则重置绘制线程状态;
当前运行进程调用服务器并绘制应用,绘制应用中通过SurfaceFlinger控制窗口的合成并进行绘制。
其中,所述移动终端的处理器用于提供计算和控制能力。所述移动终端的存储器包括非易失性存储介质、内存储器。所述非易失性存储介质存储有操作系统和计算机程序。所述内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。所述移动终端的网络接口用于与外部的终端通过网络连接通信。所述计算机程序被处理器执行时以实现一种识别安卓系统绘制线程的方法。
在其他实施中,如图3中所示,本发明实施例还提供一种识别安卓系统绘制线程的装置,用于基于安卓操作系统的客户端,所述装置包括:
线程创建模块10,用于创建多个线程,所述线程包括应用进程的主线程、安卓系统的硬件渲染线程和自定义线程中的一种或多种线程;
缓存获取模块20,用于通过线程进行跨进程通信并申请图形缓存区,调用BufferQueue的QueueBuffer函数将客户端绘制好的图形内容递交给系统图形缓冲区;
线程绘制模块30,用于根据进程状态切换时的状态识别线程任务,识别当前运行线程,标记线程当前的task_struct为ui_thread,得到绘制线程状态;
线程绘制控制模块40,用于根据进程状态切换时的状态识别线程任务,若不是当前运行线程,则重置绘制线程状态。
在另外的一个实施例中,本发明提供了一种存储介质,所述存储介质存储用于电子数据交换的计算机程序,其中,所述计算机程序使得计算机执行如上所述的方法。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本发明所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
综上所述,本发明提供的识别安卓系统绘制线程的方法通过根据进程状态切换时的状态识别线程任务,识别当前运行线程,尤其对于主线程、硬件渲染线程和自定义线程通过不同方式进行标记,具体的识别所述主线程是否是前台状态进而决定是否进入绘制流程、识别所述硬件渲染状态是否在初始化时设置绘制状态进而决定是否进入绘制流程、以及识别所述自定义线程是否在绘制接口queueBuffer中设置绘制状态进而决定是否进入绘制流程,该方法有助于识别每一线程的状态,标识出每一任务的状态,使得无论哪个线程进行跨进程通信申请GraphicBuffer时,均可以通过识别标识的每一任务的状态,使得后续处理时能够给予识别出来的任务更多的资源避让;进而能够识别移动终端上绘制相关的进程并给予最大的资源利用,能够提高移动的系统的利用率。
另外,本申请的一部分可被应用为计算机程序产品,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本申请的方法和/或技术方案。而调用本申请的方法的程序指令,可能被存储在固定的或可移动的记录介质中,和/或通过广播或其他信号承载媒体中的数据流而被传输,和/或被存储在根据所述程序指令运行的计算机设备的工作存储器中。在此,根据本申请的一个实施例包括一个装置,该装置包括用于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发该装置运行基于前述根据本申请的多个实施例的方法和/或技术方案。
最后应说明的是:对于本领域技术人员而言,显然本申请不限于上述示范性实施例的细节,而且在不背离本申请的精神或基本特征的情况下,能够以其他的具体形式实现本申请。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本申请的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本申请内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。系统权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。本发明的应用不限于上述的举例,其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

Claims (7)

1.一种识别安卓系统绘制线程的方法,用于基于安卓操作系统的客户端,其特征在于,包括以下步骤:
创建多个线程,所述线程包括应用进程的主线程、安卓系统的硬件渲染线程和自定义线程中的一种或多种线程;
通过线程进行跨进程通信并申请图形缓存区,调用BufferQueue的QueueBuffer函数将客户端绘制好的图形内容递交给系统图形缓冲区;
根据进程状态切换时的状态识别线程任务,识别当前运行线程,标记线程当前的task_struct为ui_thread,得到绘制线程状态;
根据进程状态切换时的状态识别线程任务,若不是当前运行线程,则重置绘制线程状态;
当前运行进程调用服务器并绘制应用,绘制应用中通过SurfaceFlinger控制窗口的合成并进行绘制;
所述SurfaceFlinger与HWComposer连接,合成的帧缓存区发送至HWComposer,使其作为目标缓存区;
所述根据进程状态切换时的状态识别线程任务的步骤包括:
当前运行线程为主线程时,通过是否是前台状态进行绘制线程状态的设置,若是前台状态,则标记为绘制线程并进入绘制流程,否则重置绘制线程状态并采用默认优先级进入流程;
当前运行线程为硬件渲染线程时,对于绘制线程在进行初始化时设置绘制状态,并设置到内核维护的线程表中,当识别为设置绘制标志则进入绘制流程,否则并采用默认优先级进入流程;
当前运行线程为自定义线程时,在绘制接口queueBuffer中进行识别并进行绘制线程状态的设置,当有客户端通过绘制接口queueBuffer进行图形缓存填充时,标记调用端为绘制线程,当识别为设置绘制标志则进入绘制流程,否则并采用默认优先级进入流程;根据进程状态切换时的状态识别线程任务,若不是当前运行线程,则重置绘制线程状态。
2.根据权利要求1所述的识别安卓系统绘制线程的方法,其特征在于,根据进程状态切换时的状态识别线程任务的步骤包括:
当前运行线程为主线程时,所述主线程的识别通过更新进程状态,再进行判断是否是前台状态进行绘制线程状态的设置。
3.根据权利要求1所述的识别安卓系统绘制线程的方法,其特征在于,所述通过线程进行跨进程通信并申请图形缓存区步骤中:
所述图形缓存区为GraphicBuffer。
4.根据权利要求1所述的识别安卓系统绘制线程的方法,其特征在于,所述识别安卓系统绘制线程的方法步骤还包括:
当前运行线程发送绘制请求,调用接口控制ioctl函数,所述ioctl函数对所述绘制请求进行解析。
5.一种识别安卓系统绘制线程的装置,用于基于安卓操作系统的客户端,其特征在于,所述装置包括:
线程创建模块,用于创建多个线程,所述线程包括应用进程的主线程、安卓系统的硬件渲染线程和自定义线程中的一种或多种线程;
缓存获取模块,用于通过线程进行跨进程通信并申请图形缓存区,调用BufferQueue的QueueBuffer函数将客户端绘制好的图形内容递交给系统图形缓冲区;
线程绘制模块,用于根据进程状态切换时的状态识别线程任务,识别当前运行线程,标记线程当前的task_struct为ui_thread,得到绘制线程状态;
线程绘制控制模块,用于根据进程状态切换时的状态识别线程任务,若不是当前运行线程,则重置绘制线程状态;
当前运行进程调用服务器并绘制应用,绘制应用中通过SurfaceFlinger控制窗口的合成并进行绘制;
所述SurfaceFlinger与HWComposer连接,合成的帧缓存区发送至HWComposer,使其作为目标缓存区;
所述根据进程状态切换时的状态识别线程任务的步骤包括:
当前运行线程为主线程时,通过是否是前台状态进行绘制线程状态的设置,若是前台状态,则标记为绘制线程并进入绘制流程,否则重置绘制线程状态并采用默认优先级进入流程;
当前运行线程为硬件渲染线程时,对于绘制线程在进行初始化时设置绘制状态,并设置到内核维护的线程表中,当识别为设置绘制标志则进入绘制流程,否则并采用默认优先级进入流程;
当前运行线程为自定义线程时,在绘制接口queueBuffer中进行识别并进行绘制线程状态的设置,当有客户端通过绘制接口queueBuffer进行图形缓存填充时,标记调用端为绘制线程,当识别为设置绘制标志则进入绘制流程,否则并采用默认优先级进入流程;根据进程状态切换时的状态识别线程任务,若不是当前运行线程,则重置绘制线程状态。
6.一种移动终端,其特征在于,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的识别安卓系统绘制线程程序,所述处理器执行所述识别安卓系统绘制线程程序时,实现权利要求1-4任一项所述的方法。
7.一种存储介质,其特征在于,所述存储介质存储用于电子数据交换的计算机程序,其中,所述计算机程序使得计算机执行如权利要求1-4任一项所述的方法。
CN202110239090.XA 2021-03-03 2021-03-03 识别安卓系统绘制线程的方法、装置、移动终端及存储介质 Active CN113051047B (zh)

Priority Applications (4)

Application Number Priority Date Filing Date Title
CN202110239090.XA CN113051047B (zh) 2021-03-03 2021-03-03 识别安卓系统绘制线程的方法、装置、移动终端及存储介质
US18/548,904 US20240143395A1 (en) 2021-03-03 2022-01-18 Method and device for identifying android system drawing thread, and mobile terminal and storage medium
EP22762325.3A EP4303725A1 (en) 2021-03-03 2022-01-18 Method and device for identifying android system drawing thread, and mobile terminal and storage medium
PCT/CN2022/072611 WO2022183856A1 (zh) 2021-03-03 2022-01-18 识别安卓系统绘制线程的方法、装置、移动终端及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110239090.XA CN113051047B (zh) 2021-03-03 2021-03-03 识别安卓系统绘制线程的方法、装置、移动终端及存储介质

Publications (2)

Publication Number Publication Date
CN113051047A CN113051047A (zh) 2021-06-29
CN113051047B true CN113051047B (zh) 2023-06-27

Family

ID=76510086

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110239090.XA Active CN113051047B (zh) 2021-03-03 2021-03-03 识别安卓系统绘制线程的方法、装置、移动终端及存储介质

Country Status (4)

Country Link
US (1) US20240143395A1 (zh)
EP (1) EP4303725A1 (zh)
CN (1) CN113051047B (zh)
WO (1) WO2022183856A1 (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113051047B (zh) * 2021-03-03 2023-06-27 驭新智行科技(宁波)有限公司 识别安卓系统绘制线程的方法、装置、移动终端及存储介质
CN113918249B (zh) * 2021-09-14 2023-11-21 北京房江湖科技有限公司 一种背景模糊控件的实现方法及装置
CN117130774A (zh) * 2023-04-28 2023-11-28 荣耀终端有限公司 一种线程加速处理方法和装置

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110109528A (zh) * 2019-03-29 2019-08-09 努比亚技术有限公司 应用程序的管控方法、移动终端及计算机可读存储介质

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8629878B2 (en) * 2009-08-26 2014-01-14 Red Hat, Inc. Extension to a hypervisor that utilizes graphics hardware on a host
CN108509260B (zh) * 2018-01-31 2021-08-13 深圳市万普拉斯科技有限公司 线程识别处理方法、装置、计算机设备和存储介质
CN110489228B (zh) * 2019-07-16 2022-05-17 华为技术有限公司 一种资源调度的方法和电子设备
CN111367741B (zh) * 2020-02-28 2022-07-08 Oppo广东移动通信有限公司 用户界面卡顿检测方法与装置、电子设备
CN111831462A (zh) * 2020-07-01 2020-10-27 Oppo广东移动通信有限公司 Io请求的处理方法、装置、存储介质及电子设备
CN113051047B (zh) * 2021-03-03 2023-06-27 驭新智行科技(宁波)有限公司 识别安卓系统绘制线程的方法、装置、移动终端及存储介质

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110109528A (zh) * 2019-03-29 2019-08-09 努比亚技术有限公司 应用程序的管控方法、移动终端及计算机可读存储介质

Also Published As

Publication number Publication date
EP4303725A1 (en) 2024-01-10
CN113051047A (zh) 2021-06-29
US20240143395A1 (en) 2024-05-02
WO2022183856A1 (zh) 2022-09-09

Similar Documents

Publication Publication Date Title
CN113051047B (zh) 识别安卓系统绘制线程的方法、装置、移动终端及存储介质
US11164280B2 (en) Graphics layer processing in a multiple operating systems framework
US10127628B2 (en) Method and system to virtualize graphic processing services
US10074206B1 (en) Network-optimized graphics library for virtualized graphics processing
CN113110910B (zh) 一种安卓容器实现的方法、系统及设备
CN112269603B (zh) 一种在Linux上兼容运行Android应用的图形显示方法与装置
US9047102B2 (en) Instant remote rendering
US8963939B2 (en) Extended graphics context with divided compositing
US9734546B2 (en) Split driver to control multiple graphics processors in a computer system
CN107292807B (zh) 一种图形合成方法、窗口设置方法及系统
US20150193904A1 (en) Graphics acceleration for applications executing on mobile devices with multi-operating system environment
US20220292628A1 (en) Image processing method and apparatus
EP3441877A2 (en) Systems and methods for using egl with an opengl api and a vulkan graphics driver
WO2018120992A1 (zh) 一种窗口渲染方法及终端
WO2019238145A1 (zh) 一种基于WebGL的图形绘制方法、装置及系统
US9041719B2 (en) Method and system for transparently directing graphics processing to a graphical processing unit (GPU) of a multi-GPU system
WO2023087778A1 (zh) 窗口信息处理方法、装置、电子设备及存储介质
US20140059114A1 (en) Application service providing system and method and server apparatus and client apparatus for application service
CN111414150B (zh) 游戏引擎渲染方法、装置、电子设备及计算机存储介质
CN114924837A (zh) 数据处理方法、电子设备和可读存储介质
CN114116227A (zh) 一种无GPU支持的基于Wayland协议的显示方法、装置及设备
US9754560B2 (en) Pooling and tiling data images from memory to draw windows on a display device
WO2019079940A1 (zh) 图形处理方法及相关装置和设备
CN117149318A (zh) 一种数据处理方法及电子设备
CN113626506A (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
TA01 Transfer of patent application right

Effective date of registration: 20230511

Address after: Z0042, 1st Floor, Building 4, No. 88 Meishan Qixing Road, Beilun District, Ningbo City, Zhejiang Province, 315800

Applicant after: Yuxin Zhixing Technology (Ningbo) Co.,Ltd.

Address before: 516003 No.86, hechangqi Road West, Zhongkai high tech Zone, Huizhou City, Guangdong Province

Applicant before: HUIZHOU TCL MOBILE COMMUNICATION Co.,Ltd.

TA01 Transfer of patent application right
GR01 Patent grant
GR01 Patent grant