CN117742835A - 一种请求vSync信号的方法及电子设备 - Google Patents

一种请求vSync信号的方法及电子设备 Download PDF

Info

Publication number
CN117742835A
CN117742835A CN202211116851.3A CN202211116851A CN117742835A CN 117742835 A CN117742835 A CN 117742835A CN 202211116851 A CN202211116851 A CN 202211116851A CN 117742835 A CN117742835 A CN 117742835A
Authority
CN
China
Prior art keywords
application
request
vsync signal
interface
state
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.)
Pending
Application number
CN202211116851.3A
Other languages
English (en)
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.)
Honor Device Co Ltd
Original Assignee
Honor Device 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 Honor Device Co Ltd filed Critical Honor Device Co Ltd
Priority to CN202211116851.3A priority Critical patent/CN117742835A/zh
Priority to PCT/CN2023/117580 priority patent/WO2024055904A1/zh
Publication of CN117742835A publication Critical patent/CN117742835A/zh
Pending legal-status Critical Current

Links

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/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • 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/44Arrangements for executing specific programs
    • G06F9/451Execution arrangements for user interfaces
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Digital Computer Display Output (AREA)

Abstract

本申请提供一种请求vSync信号的方法及电子设备,涉及图像显示技术领域,在需要显示动态变化的连续多帧图像时,可以降低卡顿、不流畅的可能性。在第一时刻,电子设备中的第一应用调用电子设备中窗口系统SF的setVsyncRate接口,向SF发送第一请求,第一请求用于请求vSync信号。响应于第一请求,SF周期性向第一应用分发vSync信号。在第二时刻,第一应用调用setVsyncRate接口,向SF发送第二请求,第二请求用于请求取消vSync信号,SF在接收到第二请求之后,结束周期性向第一应用分发vSync信号。

Description

一种请求vSync信号的方法及电子设备
技术领域
本申请涉及图像显示技术领域,尤其涉及一种请求vSync信号的方法及电子设备。
背景技术
手机、平板等电子设备的显示屏亮屏的情况下,应用在需要显示新一帧图像时,可以请求垂直同步(Vertical Synchronization,vSync)信号,并且电子设备的显示屏在一次刷新完成后,可以将vSync信号分发给请求vSync信号的应用,即分发给有渲染需求的应用。vSync信号可以触发应用完成新一帧图像的渲染,然后经过合成,最终送显。如此,在显示屏刷新一次后,才触发有渲染需求的应用开始渲染新一帧图像,然后合成并送显。从而可以保证画面每秒传输帧数(Frame Per Second,FPS)不会超过显示屏的刷新率。例如,刷新率为60赫兹(HZ),则可以保证FPS不超过每秒60帧。
然而,发明人在实施本申请实施例的过程中发现,在现有技术中,在电子设备的负载较高时,如中央处理器(Central Processing Unit,CPU)的占用超过97%以上时,应用请求vSync信号的时延会很长。若未及时收到应用对vSync信号的请求,自然就不会将vSync信号分发给该应用,从而无法及时触发应用完成新一帧图像的渲染,导致显示屏无法获得该新一帧图像,最终只能显示旧的图像。尤其在需要显示动态变化的连续多帧图像时,若出现上述问题,则会造成动态变化的过程卡顿、不流畅。
发明内容
有鉴于此,本申请提供了一种请求vSync信号的方法及电子设备,在需要显示动态变化的连续多帧图像时,可以降低卡顿、不流畅的可能性。
第一方面,本申请实施例提供一种请求vSync信号的方法,用于具有显示功能的电子设备,如应用于手机、平板中,电子设备中安装有第一应用。其中,在第一时刻,电子设备中的第一应用调用电子设备中窗口系统SF的setVsyncRate接口,向SF发送第一请求,第一请求用于请求vSync信号。响应于第一请求,SF周期性向第一应用分发vSync信号。
应理解,SF周期性向第一应用分发vSync信号,则第一应用可以周期性的接收到vSync信号。vSync信号可以触发渲染图像。第一应用周期性的接收到vSync信号,则可以周期性的渲染图像。这样,第一应用仅请求一次vSync信号,则可以完成多帧图像的渲染,而无需针对多帧图像请求多次vSync信号。从而可以减少应用进程和SF进程之间的跨进程调用,降低了对Binder线程的依赖。如此,在需要显示动态变化的连续多帧图像的场景中,可以降低出现显示卡顿、不流畅的现象的可能。
并且,在第二时刻,第一应用调用setVsyncRate接口,向SF发送第二请求,第二请求用于请求取消vSync信号,SF在接收到第二请求之后,结束周期性向第一应用分发vSync信号。如此,可以在不需要SF周期性分发vSync信号后,及时触发SF结束向第一应用周期性分发vSync信号,避免长期周期性分发造成资源浪费。
在一种可能的设计方式中,上述方法还包括:第一应用确定需要渲染连续多帧图像,第一时刻包括请求渲染第一图像的时刻,第一图像为多帧图像中的第一帧图像。如此,在需要渲染多帧图像中的第一帧图像时,则调用setVsyncRate接口向SF请求vSync信号,从而可以在确定需要渲染连续多帧图像后,及时使SF开始周期性分发vSync信号,触发依次完成多帧图像的渲染。
在一种可能的设计方式中,第一应用记录第一开关状态,电子设备的框架层的渲染模块中记录第二开关状态,第一开关状态和第二开关状态的初始值均为关闭状态。在第一应用确定需要渲染连续多帧图像之后,上述方法还包括:第一应用更新第一开关状态为开启状态,使第一开关状态指示需要渲染连续多帧图像。
上述在第一时刻,电子设备中的第一应用调用电子设备中窗口系统SF的setVsyncRate接口,向SF发送第一请求,包括:在第一时刻,第一应用向渲染模块发送第一消息,第一消息用于请求vSync信号。响应于第一消息,且第一开关状态为开启状态,第二开关状态为关闭状态,渲染模块调用setVsyncRate接口,向SF发送第一请求。
其中,第一开关状态为开启状态,第二开关状态为关闭状态,表明第一应用刚从不需要渲染连续多帧图像转变为需要渲染连续多帧图像,因此,渲染模块需要调用setVsyncRate接口来请求vSync信号,及时触发SF周期性分发vSync信号。
在一种可能的设计方式中,第一开关状态为开启状态,第二开关状态为关闭状态,上述方法还包括:渲染模块更新第二开关状态为开启状态,从而使渲染模块中的第二开关状态也可以同步指示第一应用需要渲染连续多帧图像。
在一种可能的设计方式中,上述方法还包括:在第三时刻,第一应用不向SF请求vSync信号,第三时刻为请求渲染第二图像的时刻,第二图像为多帧图像中除第一帧图像之外的任一图像。如此,在需要渲染多帧图像中的第二帧图像以及之后的图像时,第一应用不会重复调用setVsyncRate接口向SF请求vSync信号。从而可以在需要渲染连续多帧图像的情况下,仅请求一次vSync信号,减少跨进程调用。
具体地,在第三时刻,第一应用向渲染模块发送第一消息,第一消息用于请求vSync信号。响应于第一消息,且第一开关状态为开启状态,第二开关状态为开启状态,渲染模块不向SF请求vSync信号。其中,第一开关状态为开启状态,表示第一应用需要渲染连续多帧图像的需求。但是,第二开关状态也为开启状态,表明第一应用并不是刚从不需要渲染连续多帧图像转变为需要渲染连续多帧图像,因此,渲染模块不需要重复调用setVsyncRate接口来请求vSync信号。那么,在第一开关状态为开启状态,第二开关状态为开启状态的情况下,无需重复调用requestNextVsync接口来请求vSync信号。从而可以避免重复调用requestNextVsync接口来请求vSync信号,保证在需要渲染连续多帧图像的场景中,仅通过调用requestNextVsync接口来请求一次vSync信号。
在一种可能的设计方式中,上述方法还包括:第一应用确定结束渲染连续多帧图像,第二时刻包括请求渲染第三图像的时刻,第三图像为完成多帧图像的渲染后,第一应用需要渲染的第一帧图像。如此,在多帧图像渲染完成后,需要渲染新一帧图像时,则调用setVsyncRate接口向SF请求取消vSync信号,从而可以在多帧图像渲染完成后,及时使SF结束周期性分发vSync信号,节省资源。
在一种可能的设计方式中,在第一应用确定结束渲染连续多帧图像之后,上述方法还包括:第一应用更新第一开关状态为关闭状态。上述在第二时刻,第一应用调用setVsyncRate接口,向SF发送第二请求,包括:在第二时刻,第一应用向渲染模块发送第一消息,第一消息用于请求vSync信号。响应于第一消息,且第一开关状态为关闭状态,第二开关状态为开启状态,渲染模块调用setVsyncRate接口,向SF发送第二请求。
其中,第一开关状态为关闭状态,第二开关状态为开启状态,表明第一应用刚从需要渲染连续多帧图像转变为不需要渲染连续多帧图像,因此,渲染模块需要先调用setVsyncRate接口来请求取消vSync信号,避免在结束渲染连续多帧图像的需求后,SF仍然周期性的分发vSync信号。
在一种可能的设计方式中,第一开关状态为关闭状态,第二开关状态为开启状态,上述方法还包括:渲染模块更新第二开关状态为关闭状态,从而使渲染模块中的第二开关状态也可以同步指示第一应用不需要渲染连续多帧图像。
在一种可能的设计方式中,在向SF发送第二请求之后,上述方法还包括:第一应用调用SF的requestNextVsync接口,向SF发送第三请求,第三请求用于请求vSync信号。响应于第三请求,SF向第一应用分发一次vSync信号。
也就是说,采用本实施例的方法,可以在触发SF结束周期性分发vSync信号后,进一步向SF请求vSync信号,使SF可以分发vSync信号来触发第一应用渲染多帧图像之后的第一帧图像。从而可以在结束渲染连续多帧图像后,请求一次vSync信号,则分发一次vSync信号。
在一种可能的设计方式中,SF周期性向第一应用分发vSync信号,包括:SF周期性向渲染模块分发vSync信号。应理解,第一应用需要渲染模块来实现渲染,SF向渲染模块分发vSync信号,则可以触发渲染模块来完成第一应用的图像渲染。因此,SF向渲染模块分发vSync信号,相当于实现了向第一应用分发vSync信号。
在一种可能的设计方式中,上述方法还包括:在第一应用需要渲染第四图像时,向渲染模块发送第一消息,第四图像是第一应用需要显示的任一帧图像,第四图像包括第一图像或者第二图像。响应于第一消息,渲染模块记录第一标记,并在接收到来自SF的vSync信号后,删除第一标记。渲染模块在每次接收到来自SF的vSync信号后,可以判断处理状态是否为未处理状态。若处理状态为未处理状态,表明第一应用有需要渲染的图像,则可以触发渲染模块渲染该图像,并更新处理状态为已处理状态。若处理状态不是未处理状态,则表明第一应用并没有需要渲染的图像。也就是说,当前接收到的vSync信号是多余的。应理解,若通过调用requestNextVsync接口向SF请求vSync信号,SF是请求一次,分发一次vSync信号,不会分发多余的vSync信号。那么,该多余的vSync信号极有可能是通过调用setVsyncRate接口向SFSF请求vSync信号后,SF周期性分发的。第一应用在第二时刻向SF请求取消vSync信号,则该第二时刻可以为渲染模块在不包括第一标记的情况下,接收到来自SF的vSync信号的时刻。如此,渲染模块可以在发现多余的vSync信号后,及时触发SF结束周期性分发vSync信号。
在一种可能的设计方式中,上述方法还包括:在第二时刻,渲染模块通知第一应用将第一开关状态更新为关闭状态,渲染模块更新第二开关状态为关闭状态,使第一开关状态和第二开关状态均指示结束渲染连续多帧图像。
在一种可能的设计方式中,上述方法还包括:在第四时刻,第一应用向渲染模块发送第一消息,第一消息用于请求vSync信号。响应于第一消息,且第一开关状态和第二开关状态均为关闭状态,渲染模块调用requestNextVsync接口,向SF发送第四请求,第四请求用于请求vSync信号。
其中,第一开关状态为关闭状态,则表示第一应用不需要渲染连续多帧图像。并且,渲染模块本地的开关状态为关闭状态,表示此时并不是刚结束渲染连续多帧图像。因此,渲染模块无需调用requestNextVsync接口来请求取消vSync信号。那么,在第一开关状态和第二开关状态均为关闭状态的情况下,则可以调用requestNextVsync接口来请求vSync信号。
在一种可能的设计方式中,SF位于电子设备的本地层,第一应用位于电子设备的应用程序层,在向SF发送第一请求之前,上述方法还包括:在电子设备的框架层中新增第一接口,在电子设备的Java本地接口层中新增第二接口,第一接口和第二接口是setVsyncRate接口对Java开放的接口。第一应用调用setVsyncRate接口,包括:第一应用依次经过第一接口和第二接口调用setVsyncRate接口。
也就是说,采用本实施例,通过第一接口、第二接口和setVsyncRate接口,打通第一应用到本地层中的SF之间的通路,使得应用可以调用setVsyncRate接口,实现向SF请求vSync信号。
在一种可能的设计方式中,第一请求中包括周期n,n≥1,n为整数。响应于第一请求,SF周期性向第一应用分发vSync信号,包括:响应于第一请求,SF在每接收到n次vSync信号后,向第一应用分发一次vSync信号。
也就是说,采用本实施例,第一应用可以根据显示需求,灵活指定SF分发vSync信号的周期。
第二方面,本申请实施例提供一种电子设备,电子设备包括存储器和处理器,所述存储器和所述处理器耦合;其中,存储器中存储有计算机程序代码,计算机程序代码包括计算机指令,当计算机指令被处理器执行时,使得电子设备执行如第一方面及其任一种可能的设计方式的方法。
第三方面,本申请实施例提供一种芯片系统,该芯片系统应用于包括显示屏和存储器的电子设备;所述芯片系统包括一个或多个接口电路和一个或多个处理器;所述接口电路和所述处理器通过线路互联;所述接口电路用于从所述电子设备的存储器接收信号,并向所述处理器发送所述信号,所述信号包括所述存储器中存储的计算机指令;当所述处理器执行所述计算机指令时,所述电子设备执行如第一方面及其任一种可能的设计方式所述的方法。
第四方面,本申请提供一种计算机存储介质,该计算机存储介质包括计算机指令,当所述计算机指令在电子设备上运行时,使得电子设备执行如第一方面及其任一种可能的设计方式所述的方法。
第五方面,本申请提供一种计算机程序产品,当所述计算机程序产品在计算机上运行时,使得所述计算机执行如第一方面及其任一种可能的设计方式所述的方法。
可以理解地,上述提供的第二方面所述的电子设备,第三方面所述的芯片系统,第四方面所述的计算机存储介质,第五方面所述的计算机程序产品所能达到的有益效果,可参考第一方面及其任一种可能的设计方式中的有益效果,此处不再赘述。
附图说明
图1为本申请实施例提供的一种桌面动效的界面示意图;
图2为本申请实施例提供的一种图像处理过程的示意图;
图3为本申请实施例提供的一种图像处理方法的时序图;
图4为本申请实施例提供的另一种桌面动效的界面示意图;
图5为本申请实施例提供的一种请求vSync信号的方法的原理示意图;
图6为本申请实施例提供的电子设备的硬件结构图;
图7为本申请实施例提供的电子设备的软件架构图;
图8为本申请实施例提供的一种请求vSync信号的方法的时序图;
图9为本申请实施例提供的一种请求状态的状态转移示意图;
图10为本申请实施例提供的另一种请求vSync信号的方法的时序图;
图11为本申请实施例提供的又一种请求vSync信号的方法的时序图;
图12为本申请实施例提供的再一种请求vSync信号的方法的时序图;
图13为本申请实施例提供的一种芯片系统的结构示意图。
具体实施方式
下面结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。其中,在本申请实施例的描述中,以下实施例中所使用的术语只是为了描述特定实施例的目的,而并非旨在作为对本申请的限制。如在本申请的说明书和所附权利要求书中所使用的那样,单数表达形式“一种”、“所述”、“上述”、“该”和“这一”旨在也包括例如“一个或多个”这种表达形式,除非其上下文中明确地有相反指示。还应当理解,在本申请以下各实施例中,“至少一个”、“一个或多个”是指一个或两个以上(包含两个)。术语“和/或”,用于描述关联对象的关联关系,表示可以存在三种关系;例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B的情况,其中A、B可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。
在本说明书中描述的参考“一个实施例”或“一些实施例”等意味着在本申请的一个或多个实施例中包括结合该实施例描述的特定特征、结构或特点。由此,在本说明书中的不同之处出现的语句“在一个实施例中”、“在一些实施例中”、“在其他一些实施例中”、“在另外一些实施例中”等不是必然都参考相同的实施例,而是意味着“一个或多个但不是所有的实施例”,除非是以其他方式另外特别强调。术语“包括”、“包含”、“具有”及它们的变形都意味着“包括但不限于”,除非是以其他方式另外特别强调。术语“连接”包括直接连接和间接连接,除非另外说明。“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。
在本申请实施例中,“示例性地”或者“例如”等词用于表示作例子、例证或说明。本申请实施例中被描述为“示例性地”或者“例如”的任何实施例或设计方案不应被解释为比其它实施例或设计方案更优选或更具优势。确切而言,使用“示例性地”或者“例如”等词旨在以具体方式呈现相关概念。
本申请实施例提供一种请求vSync信号的方法,可用于需要显示动态变化的连续多帧图像的场景。其中,需要显示动态变化的连续多帧图像的场景具体是指在用户的触摸操作结束后、应用需要继续显示滑动、缩放等动效的场景。
示例性的,参见图1,手机在检测到用户对桌面101上视频应用的应用图标102的点击操作后(即点击操作结束后),会依次显示如桌面103、桌面104、桌面105、桌面106以及桌面107所示的动态变化的动效来过渡,并最终显示视频应用的应用界面(图1中未示出)。上述图1所示的场景即为需要显示动态变化的连续多帧图像的场景。
通常情况下,一帧图像的显示包括渲染、合成以及送显三个步骤。其中,由产生待显示图像的应用执行渲染的步骤,完成待显示图像的各个图层中内容的渲染。然后,应用将渲染得到的图层数据发送给窗口系统(SurfaceFlinger,SF),由SF基于图层数据执行合成的步骤,完成图层合成,得到待处理图像。再后,SF执行送显的步骤,将待显示图像送往显示屏显示。
与此同时,参见图2,数字1-4表示第1-4帧图像,实线无填充矩形框表示渲染的过程,虚线无填充矩形框表示合成的过程,实线有填充矩形框表示显示的过程。很显然,除第1帧图像之外,其它图像的渲染都是由vSync信号触发的。具体地,显示屏会按照其刷新率来刷新。例如,显示屏的刷新率为60HZ,即每秒刷新60次,则显示屏会以1/60s≈16.67ms的时间间隔刷新。当然,显示屏的刷新率也可以是90Hz、120Hz等。显示屏在完成一次刷新后,会产生vSync信号,并通过SF分发给应用,以触发应用开始渲染。应用渲染完成后,SF再进行合成,最后送显。如此,显示屏每刷新一次后,才触发渲染、合成一帧新图像。从而可以保证FPS不会超过显示屏的刷新率。
在电子设备的使用过程中,不同应用对渲染的需求是不同的。通常情况下,应用是否有渲染的需求,需要应用基于自身的显示逻辑来确定。以图1为例,只有Launcher知道在检测到用户对桌面上应用图标的点击操作后,需要显示桌面103-桌面107对应的动效,相应的,则需要连续渲染该动效包括的多帧图像。例如,桌面103-桌面107依次对应第1帧-第5帧动效,则需要连续渲染5个动效帧。因此,需要应用在产生渲染需求后,向SF请求vSync信号,以指示SF在接收到来自显示屏的vSync信号后进一步分发,从而才能触发有渲染需求的应用(如Launcher)开始渲染,满足渲染的需求。
在一些实施例中,参见图3,从应用产生渲染需求,到最终显示一帧图像的具体实现包括:
S301、应用1在需要渲染图像1时,调用SF的requestNextVsync接口向SF请求vSync信号。
其中,应用1(也可以称为第一应用)可以是电子设备中的任一应用,图像1是应用1需要显示的任一帧图像。SF可用于将vSync信号分发给有渲染需求的应用(如应用1),从而触发应用(如应用1)开始渲染。SF中的requestNextVsync接口供应用(如应用1)用来请求vSync信号,即供应用(如应用1)请求SF将vSync信号分发给应用(如应用1),以触发应用(如应用1)开始渲染。
以应用1是Launcher为例,在Launcher确定需要渲染图1所示桌面103对应的第1帧动效时,则可以调用SF的requestNextVsync接口请求vSync信号,即请求SF将vSync信号分发给Launcher,以触发Launcher开始渲染第1帧动效。
在本实施例中,应用1通过调用requestNextVsync接口来请求vSync信号具有如下特性:应用1请求一次vSync信号后,SF仅向应用1分发一次vSync信号,从而只能触发应用1完成图像1的渲染。后续,若应用1需要继续渲染,如渲染图像2、图像3……,则需要再次调用requestNextVsync接口来请求vSync信号。
示例性的,SF中记录有应用1的请求状态,请求状态包括未请求和已请求两种。请求状态的初始值为未请求。SF在接收到应用1对vSync信号的请求后,则更新请求状态为已请求,如下S302所示,以指示应用1有渲染需求。而在SF向应用1分发一次vSync信号后,则更新请求状态为未请求,如下S305所示,以指示应用1没有渲染需求。
S302、SF更新请求状态为已请求。
S303、在一次刷新完成后,显示屏向SF发送vSync信号。
显示屏在每一次刷新完成后,则会向SF发送vSync信号,以指示开始下一帧图像的显示流程,如渲染、合成以及送显。
应理解,显示屏会按照其刷新率来刷新显示。例如,显示屏的刷新率为60赫兹(HZ),即每秒刷新60次,则显示屏会以1/60s≈16.67ms的时间间隔刷新显示。
S304、在请求状态为已请求的情况下,SF向应用1分发vSync信号。
SF在接收到vSync信号后,可查询应用1的请求状态。若查询到请求状态为已请求,则表示应用1有渲染需求。该情况下,SF则将vSync信号分发给应用1,以触发应用1开始渲染。
应理解,若有多个应用请求vSync信号,则表明多个应用具有渲染需求,SF需要将vSync信号分发给多个应用。
S305、SF更新请求状态为未请求。
S306、应用1响应于vSync信号,渲染图像1。
应用1在每次接收到vSync信号后,才会开始渲染,以使应用的帧率与显示屏的数显率保持一致。
S307、应用1向SF发送渲染后的图层数据。
S308、SF对图像1完成合成处理。
SF还可以用于合成处理,合成处理主要是指将一个或多个图层进行合成。
S309、SF向显示屏发送合成后的图像1。
S310、显示屏显示图像1。
采用本实施例,应用1可以在需要渲染任一帧图像时,通过调用SF的requestNextVsync接口来请求vSync信号,后续SF则会向应用1分发一次vSync信号,从而触发应用1完成一帧图像的渲染。相应的,在需要显示动态变化的连续多帧图像的场景中,应用1则需要连续渲染多帧图像,相应的,应用1需要连续多次调用SF的requestNextVsync接口来请求vSync信号。以图1为例,应用1为Launcher,Launcher在需要渲染桌面103对应的第1帧动效时,需要调用requestNextVsync接口第一次请求vSync信号;Launcher在需要渲染桌面104对应的第2帧动效时,需要调用requestNextVsync接口第二次请求vSync信号……Launcher在需要渲染桌面107对应的第5帧动效时,需要调用requestNextVsync接口第五次请求vSync信号。
然而,上述应用1调用SF中的requestNextVsync接口,属于不同进程之间的跨进程调用,需要SF中的Binder线程来实现该调用。Binder线程的优先级较低,在电子设备的负载较高时,如CPU占用高达97%及以上时,电子设备通常无法优先为Binder线程分配CPU资源用于处理requestNextVsync接口的调用,则Binder线程只能一直等待CPU资源。从而导致Binder线程会长时间处于等待资源(即Runnable)的状态,无法及时处理requestNextVsync接口的调用。那么,SF也不会及时接收到应用1对vSync信号的请求。后续,当SF接收到vSync信号后,则不会分发给应用1,无法触发应用1渲染图像。最终,显示屏中则只能显示历史的图像,而无法显示新一帧图像。尤其在需要显示动态变化的连续多帧图像的场景中,应用1需要渲染连续多帧图像,则需要频繁使用Binder线程来处理requestNextVsync接口的调用,因此更有可能存在上述问题。
并且,在需要显示动态变化的连续多帧图像的场景中,若无法及时显示新一帧图像,最终会导致动态变化的过程出现显示卡顿、不流畅的现象。如图4所示,在手机的负载正常时,可以按照前述图3所示的流程来显示图像,显示屏中可以依次显示第1帧动效(如桌面401)和第2帧动效(如桌面402a)。此后手机的负载增大,无法按照前述图3所示的流程来显示图像,显示屏则只能一直显示第2帧动效,如桌面402b和桌面402c。再后,当手机的负载降下来后,手机可以继续按照前述图3所示的流程来显示图像,但是此时已经需要渲染第5帧动效了,Launcher则会渲染第5帧动效,最终会显示桌面403对应的第5帧动效。很显然,显示屏连续显示了3帧第2帧动效,出现了卡顿,并且直接从第2帧动效过渡到第5帧动效,动效过渡的不流畅。
基于上述问题,本申请实施例提供了一种请求vSync信号的方法,该方法可应用于类似图1需要显示动态变化的连续多帧图像的场景,在这些场景中,相应的应用需要渲染连续多帧图像。参见图5,应用1在确定需要连续渲染多帧图像后,可以调用SF的setVsyncRate接口向SF请求vSync信号(如在图5中的t1时刻请求)。SF在接收到应用1通过setVsyncRate接口对vSync信号的请求后,周期性将vSync信号分发给应用1。从而可以周期性触发应用1渲染图像。如此,应用1可以实现渲染连续多帧图像。然后,应用1在确定结束渲染连续多帧图像后,可以调用SF的setVsyncRate接口向SF请求取消vSync信号(如在图5中的t2时刻请求)。SF在接收到应用1通过setVsyncRate接口取消对vSync信号的请求后,则结束周期性将vSync信号分发给应用1。为了方便说明,可以将t1时刻称为第一时刻,将t2时刻称为第二时刻,将调用setVsyncRate接口请求vSync信号的请求称为第一请求,将调用setVsyncRate接口请求取消vSync信号的请求称为第二请求。
综上所述,采用本申请实施例,应用1仅需要向SF请求一次vSync信号,则可以接收到SF周期性分发的vSync信号,从而周期性触发应用1开始渲染。尤其在需要显示动态变化的连续多帧图像的场景中,SF周期性分发vSync信号,从而可以周期性触发应用1完成该连续多帧图像的渲染。无需应用1连续请求多次vSync信号,极大地减少了跨进程调用的次数,降低了对Binder线程的依赖。如此,可以降低动态变化的过程出现显示卡顿、不流畅的现象的可能。并且,应用1可以请求取消vSync信号,使SF结束向应用1周期性分发vSync信号,避免长期周期性分发造成资源浪费。
仍以图1所示显示桌面动效的场景为例,Launcher在检测到用户对桌面101中视频应用的应用图标102的点击操作后,Launcher可以确定需要渲染桌面103-桌面107所示的多帧动效,即需要渲染连续多帧图像。该情况下,Launcher可以调用SF的setVsyncRate接口向SF请求vSync信号,触发SF周期性的将vSync信号分发给Launcher。周期性的vSync信号可以触发Launcher依次渲染桌面103-桌面107所示的多帧动效。在完成多帧动效的渲染后,Launcher可以确定结束渲染连续多帧图像。该情况下,Launcher可以调用SF的setVsyncRate接口向SF请求取消vSync信号,触发SF结束周期性的将vSync信号分发给Launcher,减少资源浪费。
示例性的,本申请实施例中的电子设备可以是手机、平板电脑、桌面型、膝上型、手持计算机、笔记本电脑、超级移动个人计算机(ultra-mobile personal computer,UMPC)、上网本,以及蜂窝电话、个人数字助理(personal digital assistant,PDA)、增强现实(augmented reality,AR)\虚拟现实(virtual reality,VR)设备等支持显示功能的设备。本申请实施例对该电子设备的具体形态不作特殊限制。下文中,将主要以电子设备是手机为例,来说明本申请方案。
参见图6,为本申请实施例提供的一种电子设备的硬件结构图。如图6所示,以电子设备是手机600为例,电子设备可以包括处理器610,外部存储器接口620,内部存储器621,通用串行总线(universal serial bus,USB)接口630,充电管理模块640,电源管理模块641,电池642,天线1,天线2,移动通信模块650,无线通信模块660,音频模块670,扬声器670A,受话器670B,麦克风670C,耳机接口670D,传感器模块680,按键690,马达691,指示器692,摄像头693,显示屏694,以及用户标识模块(subscriber identification module,SIM)卡接口695等。
可以理解的是,本实施例示意的结构并不构成对手机600的具体限定。在另一些实施例中,手机600可以包括比图示更多或更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置。图示的部件可以以硬件,软件或软件和硬件的组合实现。
处理器610可以包括一个或多个处理单元,例如:处理器610可以包括应用处理器(application processor,AP),调制解调处理器,图形处理器(graphics processingunit,GPU),图像信号处理器(image signal processor,ISP),控制器,存储器,视频编解码器,数字信号处理器(digital signal processor,DSP),基带处理器,和/或神经网络处理器(neural-network processing unit,NPU)等。其中,不同的处理单元可以是独立的器件,也可以集成在一个或多个处理器中。
充电管理模块640用于从充电器接收充电输入。其中,充电器可以是无线充电器,也可以是有线充电器。在一些有线充电的实施例中,充电管理模块640可以通过USB接口630接收有线充电器的充电输入。在一些无线充电的实施例中,充电管理模块640可以通过手机600的无线充电线圈接收无线充电输入。充电管理模块640为电池642充电的同时,还可以通过电源管理模块641为手机600供电。
电源管理模块641用于连接电池642,充电管理模块640与处理器610。电源管理模块641接收电池642和/或充电管理模块640的输入,为处理器610,内部存储器621,外部存储器,显示屏694,摄像头693,和无线通信模块660等供电。电源管理模块641还可以用于监测电池容量,电池循环次数,电池健康状态(漏电,阻抗)等参数。在其他一些实施例中,电源管理模块641也可以设置于处理器610中。在另一些实施例中,电源管理模块641和充电管理模块640也可以设置于同一个器件中。
手机600的无线通信功能可以通过天线1,天线2,移动通信模块650,无线通信模块660,调制解调处理器以及基带处理器等实现。
显示屏694用于显示图像,视频等。在一些实施例中,显示屏694可用于显示动态变化的界面内容,如图1所示的桌面动效。显示屏694包括显示面板。显示面板可以采用液晶显示屏(liquid crystal display,LCD),有机发光二极管(organic light-emitting diode,OLED),有源矩阵有机发光二极体或主动矩阵有机发光二极体(active-matrix organiclight emitting diode,AMOLED),柔性发光二极管(flex light-emitting diode,FLED),Miniled,MicroLed,Micro-oLed,量子点发光二极管(quantum dot light emittingdiodes,QLED)等。
手机600通过GPU,显示屏694,以及应用处理器等实现显示功能。GPU为图像处理的微处理器,连接显示屏694和应用处理器。GPU用于执行数学和几何计算,用于图形渲染。处理器610可包括一个或多个GPU,其执行程序指令以生成或改变显示信息。
手机600可以通过ISP,摄像头693,视频编解码器,GPU,显示屏694以及应用处理器等实现拍摄功能。ISP用于处理摄像头693反馈的数据。摄像头693用于捕获静态图像或视频。物体通过镜头生成光学图像投射到感光元件。在一些实施例中,手机600可以包括1个或N个摄像头693,N为大于1的正整数。
外部存储器接口620可以用于连接外部存储卡,例如Micro SD卡,实现扩展手机600的存储能力。外部存储卡通过外部存储器接口620与处理器610通信,实现数据存储功能。例如将音乐,视频等文件保存在外部存储卡中。
内部存储器621可以用于存储计算机可执行程序代码,所述可执行程序代码包括指令。处理器610通过运行存储在内部存储器621的指令,从而执行手机600的各种功能应用以及数据处理。
手机600可以通过音频模块670,扬声器670A,受话器670B,麦克风670C,耳机接口670D,以及应用处理器等实现音频功能。例如音乐播放,录音等。
按键690包括电源键(也可称开机键),音量键等。按键690可以是机械按键。也可以是触摸式按键。手机600可以接收按键输入,产生与手机600的用户设置以及功能控制有关的键信号输入。马达691可以产生振动提示。马达691可以用于来电振动提示,也可以用于触摸振动反馈。指示器692可以是指示灯,可以用于指示充电状态,电量变化,也可以用于指示消息,未接来电,通知等。SIM卡接口695用于连接SIM卡。
本申请实施例中,手机600的软件系统可以采用分层架构,事件驱动架构,微核架构,微服务架构或云架构。下文实施例,将主要以分层架构的Android系统为例,示例性说明手机600的软件架构。
分层架构将软件分成若干个层,每一层都有清晰的角色和分工。层与层之间通过软件接口通信。在一些实施例中,参见图7,可以将Android系统分为六层,从上至下分别为应用程序层(applications)、框架层(framework)、Java本地接口层(Java NativeInterface,JNI)、本地层(Native)、硬件抽象层(HAL)以及内核层(kernel)。
其中,应用程序层中可以安装通话、备忘录、桌面、浏览器、联系人、相机、图库、日历等应用。图7中仅示出了桌面应用(Launcher)。这些应用基本都需要通过手机600的显示屏来显示其应用界面。例如,Launcher需要通过显示屏来显示图1所示桌面101,桌面103-桌面107上的应用图标,以及显示图1所示桌面103-桌面107对应的动效。
框架层为应用程序层提供应用编程接口(application programming interface,API)和编程框架。框架层中包括显示屏渲染模块(Choreographer)以及标记模块(AnimationSmooth)。AnimationSmooth可用于应用保存渲染连续多帧图像的开关状态,开关状态包括开启状态和关闭状态。开启状态指示需要渲染连续多帧图像,关闭状态指示结束渲染连续多帧图像。
Choreographer可用于应用向SF请求vSync信号。也就是说,应用1需要通过Choreographer实现向SF请求vSync信号。那么,本文中应用1调用requestNextVsync接口或者setVsyncRate接口向SF请求vSync信号,实质是Choreographer调用requestNextVsync接口或者setVsyncRate接口向SF请求vSync信号;以及,应用1调用setVsyncRate接口向SF请求取消vSync信号,实质是Choreographer调用setVsyncRate接口向SF请求取消vSync信号。
并且,Choreographer可用于应用实现渲染。也就是说,应用1需要通过Choreographer实现渲染。那么,本文中SF向应用1分发vSync信号,触发应用1渲染,实质是SF向Choreographer分发vSync信号,触发Choreographer渲染。
本地层为上层(如框架层)提供各种服务。本地层中包括SF,SF可用于合成和送显,以及刷新率控制。其中,刷新率控制即:通过向应用分发vSync信号,控制应用在显示屏刷新一次后开始渲染。本地层中包括SF的requestNextVsync接口和setVsyncRate接口,这两个接口都可以实现请求vSync信号。其中,requestNextVsync接口可以实现每请求一次vSync信号,SF则分发一次vSync信号。setVsyncRate接口可以实现每请求一次vSync信号,SF则周期性分发vSync信号。
需要在此说明的是,框架层通常是采用Java语言编写的,因此,框架层也可以称为Java层。本地层是采用C++/C语言编写的,因此,本地层也可以称为C++/C层。Java本地接口层则是连接框架层和本地层之间的桥梁,用于打通框架层和本地层,使框架层和本地层之间可以相互访问。
Java本地接口层中包括对Java开放的接口,以便框架层通过该接口调用本地层提供的服务。本申请实施例中,需要调用SF的setVsyncRate接口向SF请求vSync信号,而SF中的setVsyncRate接口只是本地层中的接口,其并没有对Java开放接口。基于此,在一些实施例中,需要在框架层和Java本地接口层中分别新增一个接口,如图7中的第一接口和第二接口。通过第一接口、第二接口和setVsyncRate接口,打通框架层中的Choreographer到本地层中的SF之间的通路,使得应用可以调用setVsyncRate接口,实现向SF请求vSync信号。
硬件抽象层对底层硬件驱动进行了一层封装,并向上层提供调用驱动的通用接口,以供上层调用驱动从而驱动相应的硬件工作。硬件抽象层中包括硬件混合渲染器(Hwcomposer,HWC)。HWC可以和SF结合,完成合成处理。其中,SF可以使用OpenGL ES合成图层,但是该合成需要占用并消耗GPU资源。而HWC通过硬件设备进行图层合成,可以减轻GPU的合成压力。
内核层中包括驱动硬件工作的驱动,如显示驱动(Display drivers)。显示驱动用于驱动显示屏工作,并且将来上层的(如硬件抽象层)的图像数据流(如RGB图像数据流)传输给显示屏显示(即送显)。
本申请实施例提供的请求vSync信号的方法,可以在具有上述硬件结构和软件结构的手机600中实现。下面先结合上述手机600的软件架构,对本申请实施例提供的请求vSync信号的方法做简单介绍:
应用1在确定需要渲染连续多帧图像后,可以通过Choreographer,依次调用框架层中的第一接口、Java本地接口层中的第二接口以及本地层中的setVsyncRate接口,向SF请求vSync信号。SF在接收到Choreographer调用setVsyncRate接口对vSync信号的请求后,周期性将vSync信号分发给Choreographer,从而可以周期性触发Choreographer渲染应用1的图像。
然后,应用1在确定结束渲染连续多帧图像后,可以通过Choreographer,依次调用第一接口、第二接口以及setVsyncRate接口,向SF请求取消vSync信号。SF在接收到Choreographer调用setVsyncRate接口取消对vSync信号的请求后,则结束周期性将vSync信号分发给Choreographer。从而不会继续周期性触发Choreographer渲染应用1的图像。
其中,应用1可基于自身的显示逻辑确定是否需要渲染连续多帧图像。
示例一,以前文图1所示的场景为例,Launcher检测到用户对桌面上某应用图标(如视频应用的应用图标102)的点击操作后,其显示逻辑为:显示从应用图标放大到应用界面的桌面动效。该桌面动效需要Launcher显示动态变化的连续多个动效帧,即多帧图像来实现。那么,Launcher检测到用户对桌面上某应用图标的点击操作后,则可以确定需要渲染连续多帧图像。
示例二,仍以Launcher为例,Launcher检测到用户在桌面上的滑动(如向左或向右滑动)操作后,随着用户的滑动操作,桌面也会随之滑动。并且,在用户的滑动操作结束后,Launcher的显示逻辑为:继续滑动桌面直至完全显示桌面的某一个屏(如返回滑动操作前显示的屏,或者切换到上一屏,或者切换到下一屏)。上述继续滑动桌面直至完全显示桌面的某一个屏的过程需要Launcher显示动态变化的连续多帧图像来实现。那么,Launcher检测到用户在桌面上的滑动操作结束后,则可以确定需要渲染连续多帧图像。
示例三,以日历应用为例,日历应用在检测到用户对月份的视图中某天的点击操作后,其显示逻辑为:显示从月份的视图变化到某天的视图的过渡动效,最终显示某天的视图。该过渡动效需要日历应用显示动态变化的连续多帧图像来实现。那么,日历应用检测到用户对月份的视图中某天的点击操作后,则可以确定需要渲染连续多帧图像。
也就是说,若在用户的触摸操作结束后,应用1需要在短时间内显示动态变化的连续多帧图像,如应用1需要以小于20ms的间隔显示滑动、缩放等动效,则应用1可以确定需要渲染连续多帧图像。而在完成该多帧图像的渲染后,或者,在结束该多帧图像的显示前、检测的到退出在前台运行应用1后,或者,在结束该多帧图像的显示前、检测到显示屏息屏,则应用1可以确定结束渲染连续多帧图像。
通常情况下,应用1在每次需要渲染新一帧图像之前,都需要通过Choreographer来请求vSync信号,以请求SF分发vSync信号。并且,Choreographer在接收到SF分发的vSync信号后,才会渲染应用1的图像。而在本申请实施例中,应用1仅需在确定需要渲染连续多帧图像后,通过Choreographer来请求一次vSync信号;以及,在确定结束渲染连续多帧图像后,通过Choreographer来请求取消vSync信号。也就是说,尽管需要渲染连续多帧图像,也仅需通过Choreographer来请求一次vSync信号,而无需在每次渲染一帧图像之前,均通过Choreographer来请求vSync信号。
参见图8,在一些实施例中,在需要渲染连续多帧图像的情况下,仅通过Choreographer来请求一次vSync信号的具体实现包括:
S801、应用1确定需要渲染连续多帧图像。
S802、在需要渲染多帧图像中的第一帧图像(也可以称为第一图像)时,应用1向Choreographer请求vSync信号。
应用1在需要渲染任一帧图像时,首先向Choreographer请求vSync信号,以请求渲染该任一帧图像(如第一图像)。从而触发Choreographer进一步向SF请求vSync信号。示例性的,应用1可以调用Choreographer的scheduleVsyncLocked接口,触发Choreographer向SF请求vSync信号。
为了方便说明,可以将应用1向Choreographer发送的、用于请求vSync信号的消息称为第一消息。
S803、Choreographer调用setVsyncRate接口向SF请求vSync信号。
也就是说,Choreographer在应用1确定渲染多帧图像后,首次接收到应用1对vSync信号的请求时,会调用setVsyncRate接口向SF请求vSync信号。即,在请求渲染多帧图像中的第一帧图像时,调用setVsyncRate接口向SF请求vSync信号,则图5中的t1时刻可以是请求渲染多帧图像中的第一帧图像的时刻。
示例性的,Choreographer调用第一接口、第二接口以及setVsyncRate接口时携带的参数为第一参数,用于指示请求vSync信号。例如,第一参数为1,则调用setVsyncRate接口具体为setVsyncRate(1),表示调用setVsyncRate接口请求vSync信号。
S804、SF更新请求状态为周期性请求,SF中请求状态的初始值为未请求。
在本实施例中,请求状态进一步包括周期性请求。请求状态为周期性请求,可以指示SF将vSync信号周期性的分发给Choreographer。
示例性的,请求状态及其状态转移过程如图9所示,请求状态包括未请求(如none)、已请求(如single)以及周期性请求(如period)。请求状态为未请求,则指示无需分发vSync信号给应用1。请求状态为已请求,指示需要分发一次vSync信号给应用1。请求状态为周期性请求,指示需要周期性分发vSync信号给应用1。请求状态的初始值为未请求,在请求状态为未请求的情况下,Choreographer调用requestNextVsync接口向SF请求vSync信号,则请求状态会更新为已请求(可参见前文图5中的相关说明)。在请求状态为已请求的情况下,SF分发一次vSync信号给应用1后,则请求状态会更新为未请求(可参见前文图5中的相关说明)。在请求状态为未请求的情况下,Choreographer调用setVsyncRate接口向SF请求vSync信号(如setVsyncRate(1)),则请求状态会更新为周期性请求,如S803-S804所述。
需要在此说明的是,本文中的请求状态都是针对应用1而言的,实际上,SF中维护有各个应用的请求状态。每个应用的请求状态可以指示相应的应用对vSync信号的需求情况。
本实施例中,在需要渲染多帧图像中的第一帧图像时,则调用setVsyncRate接口向SF请求vSync信号,从而可以在确定需要渲染连续多帧图像后,及时使SF将请求状态更新为周期性请求。后续,SF则可以周期性分发vSync信号,触发依次完成多帧图像的渲染。
S805、显示屏向SF发送vSync信号。
显示屏完成一次刷新,则会向SF发送一次vSync信号。
S806、在请求状态为周期性请求的情况下,SF向Choreographer分发vSync信号。
需要在此说明的是,继续参见图9,在请求状态为周期性请求的情况下,SF向Choreographer分发vSync信号后,并不会将请求状态更新为未请求,而是会保持周期性请求不变。如此,SF后续接收到vSync信号后,才会继续分发给Choreographer,从而实现周期性分发。
Choreographer在接收到vSync信号后,则可以渲染多帧图像中的第一帧图像,然后发送给SF进行合成,最后送显,此处不再赘述。
S807、在需要渲染多帧图像中的第二帧图像时,应用1向Choreographer请求vSync信号。
经过前述S802-S804,SF已经将请求状态更新为周期性请求了,后续,SF则可以周期性分发vSync信号,触发依次完成多帧图像的渲染。因此,在请求渲染多帧图像中除第一帧图像之外的图像(也可以称为第二图像)时,即使应用1会向Choreographer请求vSync信号,Choreographer也无需再重复向SF请求vSync信号,如调用setVsyncRate接口向SF请求vSync信号。如此,可以实现在需要渲染连续多帧图像的情况下,仅通过Choreographer来请求一次vSync信号。
为了方便说明,可以将请求渲染多帧图像中除第一帧图像之外的任一帧图像的时刻称为第三时刻。
S808、显示屏向SF发送vSync信号。
显示屏再完成一次刷新,则可以显示S806之后Choreographer渲染,然后发送给SF进行合成,最后送显的图像,并且向SF发送vSync信号。
S809、在请求状态为周期性请求的情况下,向Choreographer分发vSync信号。
Choreographer在接收到vSync信号后,则可以渲染多帧图像中的第二帧图像,然后发送给SF进行合成,最后送显,此处不再赘述。
之后,只要请求状态保持为周期性请求,显示屏向SF发送vSync信号后,SF还会继续向Choreographer分发vSync信号,Choreographer则可以继续渲染多帧图像中的第三帧图像、第四帧图像……。
S810、应用1确定结束渲染连续多帧图像。
S811、在需要渲染多帧图像后的第一帧图像时,应用1向Choreographer请求vSync信号。
多帧图像渲染完成后,当需要渲染新一帧图像(即多帧图像后的第一帧图像,也可以称为第三图像)时,应用1同样会向Choreographer请求vSync信号,以请求渲染该新一帧图像。
S812、Choreographer调用setVsyncRate接口向SF请求取消vSync信号。
本实施例中,在完成多帧图像的渲染后,Choreographer首次接收到应用1对vSync信号的请求时,首先会调用setVsyncRate接口,向SF请求取消vSync信号。即,在请求渲染多帧图像后的第一帧图像时,调用setVsyncRate接口向SF请求取消vSync信号,则图5中的t2时刻可以是请求渲染多帧图像后的第一帧图像的时刻。
示例性的,Choreographer调用第一接口、第二接口以及setVsyncRate接口时携带的参数均为第二参数,用于指示请求取消vSync信号。例如,第二参数为0,则调用setVsyncRate接口具体为setVsyncRate(0),表示调用setVsyncRate接口请求取消vSync信号。
S813、SF更新请求状态为未请求。
继续参见图9,在请求状态为周期性请求的情况下,Choreographer调用setVsyncRate接口向SF请求取消vSync信号(如setVsyncRate(0)),则请求状态会更新为未请求。
在请求状态更新为未请求之后,后续SF接收到vSync信号后,则不会继续周期性分发vSync信号。
本实施例中,在多帧图像渲染完成后,需要渲染新一帧图像时,则调用setVsyncRate接口向SF请求取消vSync信号,从而可以在多帧图像渲染完成后,及时使SF将请求状态更新为未请求。后续,SF则不会周期性分发vSync信号,可以节省资源。
上述实施例中,主要以周期为1来说明。即:Choreographer在调用setVsyncRate接口向SF请求vSync信号时,携带指示周期为1的参数,如setVsyncRate(1),括号中的1指示周期为1;然后,SF每次接收vSync信号后,都会向Choreographer分发vSync信号。当然,周期也可以为2,3,4……。Choreographer在调用setVsyncRate接口向SF请求vSync信号时,携带指示周期n的参数,如setVsyncRate(n),括号中的n指示周期为n。周期为2时,SF每收到2次vSync信号后,SF则向Choreographer分发一次vSync。周期为3时,SF每收到3次vSync信号后,SF则向Choreographer分发一次vSync……。
在手机600的使用过程中,存在大量无需渲染连续多帧图像的场景。以时钟应用中的计时功能为例,其通常以秒(s)为单位更新倒计时,例如,倒计时15分钟,当前显示的是15:00,则下一次是过1s后显示14:59,而且1s完全足够用户执行退出在前台运行时钟应用的操作,或者足够用户执行息屏的操作。也就是说,时钟应用难以预估接下来是否需要继续显示倒计时的图像,如接着显示14:59,14:58,14:57……对应的图像。很显然,时钟应用的计时功能不属于需要渲染连续多帧图像的场景。在这些场景中,应用通常仅需在满足一定的条件时,渲染一帧图像即可。示例性的,以上述时钟应用的计时功能为例,时钟应用仅需每隔1s钟渲染一帧新的倒计时图像即可。又示例性的,以计算器应用为例,计算器应用在检测到用户对计算器的键盘中数字或者符号的一次点击操作,才需渲染一帧新的图像。
也就是说,在这些场景中,若采用前述周期性分发的方式,应用在每次渲染新一帧图像之前,需要调用setVsyncRate接口向SF请求vSync信号,以触发SF将来自显示屏的vSync信号分发给应用;并且,在该新一帧图像渲染完成后,应用则需要调用setVsyncRate接口向SF请求取消vSync信号,以触发SF结束将来自显示屏的vSync信号分发给应用。即,一帧图像的渲染,需要调用两次setVsyncRate接口。这显然会导致资源浪费。
基于此,在一些实施例中,在需要渲染连续多帧图像的场景中,调用setVsyncRate接口向SF请求vSync信号,在不需要渲染连续多帧图像的场景中,调用requestNextVsync接口向SF请求vSync信号。
在本实施例中,应用1可以记录是否需要渲染连续多帧图像的开关状态(也可以称为第一开关状态)。开关状态包括开启状态(如为true)和关闭状态(如为false)。其中,开关状态的初始值为关闭状态。开关状态为关闭状态,则指示不需要渲染连续多帧图像。开关状态为开启状态,则指示需要渲染连续多帧图像。应用1在需要渲染任一帧图像时,向Choreographer请求vSync信号后,Choreographer可先查询开关状态,并依据开关状态调用requestNextVsync接口或者setVsyncRate接口向SF请求vSync信号。
参见图10,以应用1将开关状态存储在前述图7所示框架层中的AnimationSmooth为例,本实施例的请求vSync信号的方法在图8的S801之前,进一步包括S1001-S1007:
S1001、在确定渲染连续多帧图像之前、需要渲染图像时,应用1向Choreographer请求vSync信号。
S1002、Choreographer从AnimationSmooth中查询开关状态,AnimationSmooth中开关状态的初始值为关闭状态。
S1003、Choreographer查询到的开关状态为关闭状态,调用requestNextVsync接口向SF请求vSync信号。
本实施例中,Choreographer在请求vSync信号之前,先查询AnimationSmooth中的开关状态。查询到为关闭状态,则表示当前没有渲染连续多帧图像的需求,因此,Choreographer可以调用requestNextVsync接口来请求vSync信号。从而实现请求一次vSync信号,分发一次vSync信号。
S1004、SF更新请求状态为已请求,SF中应用1的请求状态的初始值为未请求。
S1005、显示屏向SF发送vSync信号。
S1006、在请求状态为已请求的情况下,SF向Choreographer分发vSync信号。
Choreographer在接收到vSync信号之后,则可以开始渲染,然后发送给SF进行合成,最终送显。
S1007、SF更新请求状态为未请求。
经过上述S1001-S1007,可以在需要渲染连续多帧图像之前,针对一帧图像,仅需调用requestNextVsync接口向SF请求一次vSync信号,SF则可分发一次vSync信号以触发Choreographer完成渲染,而无需请求一次vSync信号和请求取消vSync信号,从而可以减少跨进程通信,节省资源。
需要说明的是,前述S1001-S1007仅说明了在确定渲染连续多帧图像之前,渲染一帧图像的处理过程,实际中,在确定需要渲染连续多帧图像之前,可能有至少两帧图像需要渲染,每帧图像都可以采用上述S1001-S1007的过程来处理。
继续参见图10,在应用1确定需要渲染连续多帧图像之后,与前述图8所示的实施例不同的是:在S801之后,还包括S1008-S1009;在应用1向Choreographer请求vSync信号之后,还包括查询AnimationSmooth中的开关状态的步骤,如S1010、S1011;以及S803具体为S803a:
S801、应用1确定需要渲染连续多帧图像。
S1008、应用1触发AnimationSmooth更新开关状态。
S1009、AnimationSmooth更新开关状态为开启状态。
在本实施例中,应用1在确定需要渲染连续多帧图像时,首先需要将AnimationSmooth中的开关状态更新为开启状态,以指示需要渲染连续多帧图像。
S802、在需要渲染多帧图像中的第一帧图像时,应用1向Choreographer请求vSync信号。
S1010、Choreographer从AnimationSmooth中查询开关状态。
S803a、Choreographer查询到开关状态为开启状态,调用setVsyncRate接口请求vSync信号。
本实施例中,Choreographer在请求vSync信号之前,先查询AnimationSmooth中的开关状态。查询到为开启状态,则表示当前有渲染连续多帧图像的需求,因此,Choreographer可以调用setVsyncRate接口来请求vSync信号。
S804、SF更新请求状态为周期性请求。
S805、显示屏向SF发送vSync信号。
S806、在请求状态为周期性请求的情况下,SF向Choreographer分发vSync信号。
S807、在需要渲染多帧图像中的第二帧图像时,应用1向Choreographer请求vSync信号。
S1010、Choreographer从AnimationSmooth中查询开关状态。
同样的,Choreographer在请求vSync信号之前,先查询AnimationSmooth中的开关状态。查询到为开启状态,则表示当前有渲染连续多帧图像的需求。但是,经过前述S802、S1010、S803a以及S804,SF已经将请求状态更新为周期性请求了,后续,SF则可以周期性分发vSync信号,触发依次完成多帧图像的渲染。因此,在需要渲染多帧图像中的第二帧图像以及之后的图像时,即使应用1请求vSync信号,Choreographer也查询到开关状态为开启状态,Choreographer无需再重复向SF请求vSync信号,如调用setVsyncRate接口向SF请求vSync信号。
S808、显示屏向SF发送vSync信号。
S809、在请求状态为周期性请求的情况下,向Choreographer分发vSync信号。
继续参见图10,在应用1确定结束渲染连续多帧图像之后,与前述图8所示的实施例不同的是:在S810之后,还包括S1012-S1013;在应用1向Choreographer请求vSync信号之后,还包括查询AnimationSmooth中的开关状态的步骤,如S1014;以及S812具体为S812a:
S810、应用1确定结束渲染连续多帧图像。
S1012、应用1触发AnimationSmooth更新开关状态。
S1013、AnimationSmooth更新开关状态为关闭状态。
在本实施例中,应用1在确定结束渲染连续多帧图像时,首先需要将AnimationSmooth中的开关状态更新为关闭状态,以指示结束渲染连续多帧图像。
S811、在需要渲染多帧图像后的第一帧图像时,应用1向Choreographer请求vSync信号。
S1014、Choreographer从AnimationSmooth中查询开关状态。
S812a、Choreographer查询到开关状态为关闭状态,并且前一次查询到为开启状态,调用setVsyncRate接口请求取消vSync信号。
Choreographer查询到开关状态为关闭状态,则表示当前无需连续渲染多帧需求;在此基础上,若前一次查询到的为开启状态,则表示刚结束渲染连续多帧图像的需求。此时,Choreographer则调用setVsyncRate接口请求取消vSync信号。
S813、SF更新请求状态为未请求。
进一步的,在一些实施例中,可以在AnimationSmooth和Choreographer中分别维护开关状态,从而可以在需要渲染连续多帧图像的场景中,调用setVsyncRate接口向SF请求vSync信号,在不需要渲染连续多帧图像的场景中,调用requestNextVsync接口向SF请求vSync信号;还可以准确确定调用setVsyncRate接口向SF请求vSync信号和取消vSync信号的时机。其中,AnimationSmooth和Choreographer中的开关状态的初始值均为关闭状态。为了区分第一开关状态,可以将Choreographer中的开关状态称为第二开关状态。
在本实施例中,Choreographer在请求vSync信号之前,需要先查询AnimationSmooth中的开关状态,并基于查询到的开关状态和Choreographer本地的开关状态,确定是否向SF请求vSync信号,以及确定调用setVsyncRate接口或者requestNextVsync接口向SF请求vSync信号。
参见图11,本实施例包括如下步骤:
S1001、在确定需要渲染连续多帧图像之前、需要渲染图像时,应用1向Choreographer请求vSync信号。
为了方便说明,可以将请求渲染多帧图像之前、需要渲染的任一帧图像的时刻称为第四时刻。
S1002、Choreographer从AnimationSmooth中查询开关状态,AnimationSmooth中开关状态的初始值为关闭状态。
继续参见图11,前述图10中的S1003具体可以为如下S1003a:
S1003a、Choreographer查询到的开关状态与Choreographer本地的开关状态均为关闭状态,调用requestNextVsync接口向SF请求vSync信号。
为了方便说明,可以将调用requestNextVsync接口请求vSync信号、以渲染多帧图像前的任一帧图像的请求称为第四请求。
本实施例中,Choreographer在请求vSync信号之前,先查询AnimationSmooth中的开关状态。查询到为关闭状态,则表示当前没有渲染连续多帧图像的需求,因此,Choreographer需要调用requestNextVsync接口来请求vSync信号,从而实现请求一次vSync信号,分发一次vSync信号。并且,Choreographer本地的开关状态为关闭状态,表示此时并不是刚结束渲染连续多帧图像的需求。因此,Choreographer无需调用requestNextVsync接口来请求取消vSync信号。那么,在查询到的开关状态和本地的开关状态均为关闭状态时,则可以调用requestNextVsync接口来请求vSync信号。
S1004、SF更新请求状态为已请求,SF中应用1的请求状态的初始值为未请求。
S1005、显示屏向SF发送vSync信号。
S1006、在请求状态为已请求的情况下,SF向Choreographer分发vSync信号。
S1007、SF更新请求状态为未请求。
S801、应用1确定需要渲染连续多帧图像。
S1008、应用1触发AnimationSmooth更新开关状态。
S1009、AnimationSmooth更新开关状态为开启状态。
S802、在需要渲染多帧图像中的第一帧图像时,应用1向Choreographer请求vSync信号。
S1010、Choreographer从AnimationSmooth中查询开关状态。
继续参见图11,前述图10中的S803a进一步包括如下S1101-S1102:
S1101、Choreographer查询到的开关状态为开启状态,Choreographer本地的开关状态为关闭状态,更新Choreographer本地的开关状态为开启状态。
更新Choreographer本地的开关状态为开启状态,从而使Choreographer本地的开关状态与应用1是否需要渲染连续多帧图像的需求保持一致。例如,应用1需要渲染连续多帧图像,则Choreographer本地的开关状态更新为开启状态。
S1102、Choreographer调用setVsyncRate接口向SF请求vSync信号。
本实施例中,Choreographer在请求vSync信号之前,先查询AnimationSmooth中的开关状态。查询到为开启状态,并且更新前Choreographer本地的开关状态为关闭状态,表明应用1刚从不需要渲染连续多帧图像转变为需要渲染连续多帧图像,因此,Choreographer需要调用setVsyncRate接口来请求vSync信号,及时触发SF周期性分发vSync信号。从而实现请求一次vSync信号,SF周期性分发vSync信号。
S804、SF更新请求状态为周期性请求。
S805、显示屏向SF发送vSync信号。
S806、在请求状态为周期性请求的情况下,SF向Choreographer分发vSync信号。
S807、在需要渲染多帧图像中的第二帧图像时,应用1向Choreographer请求vSync信号。
S1011、Choreographer从AnimationSmooth中查询开关状态。
继续参见图11,在前述图10中的S1011之后,还包括如下S1103:
S1103、Choreographer查询的开关状态与本地的开关状态均为开启状态,则不继续请求vSync信号。
Choreographer查询的开关状态为开启状态,表示当前有渲染连续多帧图像的需求,因此,Choreographer需要调用setVsyncRate接口来请求vSync信号。但是,查询到的开关状态与更新前Choreographer本地的开关状态一致,表明应用1并不是刚从不需要渲染连续多帧图像转变为需要渲染连续多帧图像,此前Choreographer应该已经调用setVsyncRate接口来请求过vSync信号(如S1102),因此,Choreographer不需要重复调用setVsyncRate接口来请求vSync信号。那么,在查询到的开关状态和本地的开关状态均为开启状态时,则无需重复调用requestNextVsync接口来请求vSync信号。从而可以避免重复调用requestNextVsync接口来请求vSync信号,保证在需要渲染连续多帧图像的场景中,仅通过调用requestNextVsync接口来请求一次vSync信号。
S808、显示屏向SF发送vSync信号。
S809、在请求状态为周期性请求的情况下,向Choreographer分发vSync信号。
S810、应用1确定结束渲染连续多帧图像。
S1012、应用1触发AnimationSmooth更新开关状态。
S1013、AnimationSmooth更新开关状态为关闭状态。
S811、在需要渲染多帧图像后的第一帧图像时,应用1向Choreographer请求vSync信号。
S1014、Choreographer从AnimationSmooth中查询开关状态。
继续参见图11,前述图10中的S812a进一步包括如下S1104-S1105:
S1104、Choreographer查询到的开关状态为关闭状态,本地的开关状态为开启状态,更新本地的开启状态为关闭状态。
更新Choreographer本地的开关状态为关闭状态,从而使Choreographer本地的开关状态与应用1是否需要渲染连续多帧图像的需求保持一致。例如,应用1不需要渲染连续多帧图像,则Choreographer本地的开关状态更新为关闭状态。
S1105、Choreographer调用setVsyncRate接口向SF请求取消vSync信号。
Choreographer查询的开关状态为关闭状态,并且,更新前Choreographer本地的开关状态为开启状态,表明应用1刚从需要渲染连续多帧图像转变为不需要渲染连续多帧图像,因此,Choreographer需要先调用setVsyncRate接口来请求取消vSync信号,避免在结束渲染连续多帧图像的需求后,SF仍然周期性的分发vSync信号。从而可以在结束渲染连续多帧图像的需求后,及时触发SF结束周期性发送vSync信号。
S813、SF更新请求状态为未请求。
截止前述S813,将请求状态由周期性请求更新为未请求,那么,SF则不会继续周期性分发vSync信号。但是,应用1当前需要渲染多帧图像之后的第一帧图像,因此,继续参见图11,在S813之后,还需要执行下述S1106-S1110,以完成多帧图像后的新一帧图像的渲染:
S1106、Choreographer调用requestNextVsync接口向SF请求vSync信号。
由于当前已经结束渲染连续多帧图像,因此,Choreographer需要调用requestNextVsync接口向SF请求vSync信号,以实现请求一次vSync信号,SF则分发一次vSync信号。
也就是说,本实施例中,Choreographer在调用setVsyncRate接口向SF请求取消vSync信号后,还需要调用requestNextVsync接口向SF请求vSync信号。为了方便说明,可以将调用requestNextVsync接口请求vSync信号、以渲染多帧图像后的第一帧图像的请求称为第三请求。
S1107、SF更新请求状态为已请求。
S1108、显示屏向SF发送vSync信号。
S1109、在请求状态为已请求的情况下,SF向Choreographer分发vSync信号。
SF向Choreographer分发vSync信号,则可以触发Choreographer完成多帧图像后的新一帧图像的渲染,然后发送给SF进行合成,最终送显。
S1110、SF更新请求状态为未请求。
至此,需要说明的是,前述图11的实施例中仅说明到多帧图像之后的一帧图像的处理过程,此后,若还有需要渲染的图像,则可以重复按照前述图11所示的流程来处理。本实施例这种不再一一赘述。
另外,前述图11的实施例中,针对AnimationSmooth中的开关状态和Choreographer中的开关状态的四种不同组合,Choreographer需要分别采用对应的方式来处理,包括前述S1003a所示的第一种方式,S1101-S1102所示的第二种方式,S1103所示的第三种方式,以及S1104-S1105、S1106所示的第四种方式。从而可以保证准确的调用requestNextVsync接口或者setVsyncRate接口请求vSync信号,或者调用setVsyncRate接口请求取消vSync信号。
在另一些实施例中,与前述图11中S1104-S1105、S1106所示的第四种方式不同的是:Choreographer在查询到的开关状态为关闭状态(即AnimationSmooth中开关状态为关闭状态),本地的开关状态为开启状态(即Choreographer中的开关状态为开启状态)的情况下,首先更新本地的开启状态为关闭状态,然后直接调用requestNextVsync接口向SF请求vSync信号。在本实施例中,请求状态可以在周期性请求和已请求之间转移,如图9中的虚线箭头所示,在请求状态为周期性请求的情况下,Choreographer调用requestNextVsync接口向SF请求vSync信号,则请求状态会更新为已请求。那么,后续则可以继续执行S1107-S1110,完成对多帧图像之后的新一帧图像的渲染。也就是说,与图11所示的实施例不同的是:本实施例中可以省略S1105和S813,而可以通过直接调用requestNextVsync接口向SF请求vSync信号,使请求状态由周期性请求转变为已请求,从而可以在结束周期性分发的同时,实现请求一次vSync信号,分发一次vSync信号。
前述实施例中,都是在应用1确定结束渲染连续多帧图像后,SF则结束周期性分发vSync信号。而在另一些实施例中,也可以由Choreographer确定是否结束渲染连续多帧图像。本实施例中,应用1在每次需要渲染任一帧图像(也可以称为第四图像)时,可以向Choreographer请求vSync信号,此时Choreographer可以记录处理状态为未处理状态(也可以称为第一标记)。未处理状态指示有需要渲染的图像。然后,当Choreographer接收到来自SF的vSync信号后,则可以更新处理状态为已处理状态。已处理状态指示没有需要渲染的图像。
在本实施例中,Choreographer在每次接收到来自SF的vSync信号后,可以判断处理状态是否为未处理状态。若处理状态为未处理状态,表明应用1有需要渲染的图像,则可以触发Choreographer渲染该图像,并更新处理状态为已处理状态。若处理状态不是未处理状态,则表明应用1并没有需要渲染的图像。也就是说,当前接收到的vSync信号是多余的。应理解,若通过调用requestNextVsync接口向SF请求vSync信号,SF是请求一次,分发一次vSync信号,不会分发多余的vSync信号。那么,该多余的vSync信号极有可能是通过调用setVsyncRate接口向SFSF请求vSync信号后,SF周期性分发的。针对这种情况,Choreographer可以确定当前已经结束渲染连续多帧图像的需求,Choreographer可以调用setVsyncRate接口向SF请求取消vSync信号。后续,SF则可以结束周期性分发vSync信号。如此,Choreographer可以在发现多余的vSync信号后,及时触发SF结束周期性分发vSync信号。
参见图12,本实施例中,Choreographer发现多余的vSync信号后,上述图11所示的实施例中的S810及其之后的步骤可以替换为图12中S1201-S1213的处理过程:
S1201、Choreographer接收到vSync信号,但处理状态不是未处理状态,确定结束渲染连续多帧图像。
S1202、Choreographer调用setVsyncRate接口向SF请求取消vSync信号。
即,在Choreographer不包括未处理状态、但接收到来自SF的vSync信号时,调用setVsyncRate接口向SF请求取消vSync信号。为了方便说明,可以将Choreographer不包括未处理状态、但接收到来自SF的vSync信号的时刻也称为第二时刻。
S1203、SF更新请求状态为未请求。
S1204、Choreographer触发AnimationSmooth更新开关状态。
S1205、AnimationSmooth更新开关状态为关闭状态。
S1206、Choreographer更新开关状态为关闭状态。
也就是说,Choreographer在确定结束渲染连续多帧图像后:第一方面如S1202所示,Choreographer需要向SF请求取消vSync信号,使SF结束周期性分发vSync信号。第二方面如S1204所示,Choreographer需要触发AnimationSmooth更新开关状态为关闭状态,使AnimationSmooth中的开关状态指示应用1结束渲染连续多帧图像。第三方面如S1206所示,Choreographer更新本地的开关状态为关闭状态,使本地的开关状态指示应用1结束渲染连续多帧图像。需要说明的是,上述三个方面的执行顺序并不以图12所示为限,实际实施时,上述三个方面的先后顺序没有严格限制。
S1207、应用1在需要渲染多帧图像后的第一帧图像时,向Choreographer请求vSync信号。
S1208、Choreographer查询开关状态。
S1209、Choreographer查询到的开关状态和本地的开关状态均为关闭状态,调用requestNextVsync接口向SF请求vSync信号。
也就是说,本实施例中,针对多帧图像之后的第一帧图像,Choreographer可以直接调用requestNextVsync接口向SF请求vSync信号,而无需先调用setVsyncRate接口向SF请求取消vSync信号。
S1210、SF更新请求状态为已请求。
S1211、显示屏向SF发送vSync信号。
S1212、在请求状态为已请求的情况下,SF向分发ChoreographervSync信号。
S1213、SF更新请求状态为未请求。
本申请实施例还提供一种电子设备,该电子设备可以包括:存储器和一个或多个处理器。存储器和处理器耦合。该存储器用于存储计算机程序代码,该计算机程序代码包括计算机指令。当处理器执行计算机指令时,电子设备可执行上述方法实施例中手机执行的各个功能或者步骤。
本申请实施例还提供一种芯片系统,如图13所示,该芯片系统1300包括至少一个处理器1301和至少一个接口电路1302。处理器1301和接口电路1302可通过线路互联。例如,接口电路1302可用于从其它装置(例如电子设备的存储器)接收信号。又例如,接口电路1302可用于向其它装置(例如处理器1301)发送信号。示例性的,接口电路1302可读取存储器中存储的指令,并将该指令发送给处理器1301。当所述指令被处理器1301执行时,可使得电子设备执行上述实施例中的各个步骤。当然,该芯片系统还可以包含其他分立器件,本申请实施例对此不作具体限定。
本实施例还提供一种计算机存储介质,该计算机存储介质中存储有计算机指令,当该计算机指令在电子设备上运行时,使得电子设备执行上述相关方法步骤实现上述实施例中的图像处理方法。
本实施例还提供了一种计算机程序产品,当该计算机程序产品在计算机上运行时,使得计算机执行上述相关步骤,以实现上述实施例中的图像处理方法。
另外,本申请的实施例还提供一种装置,这个装置具体可以是芯片,组件或模块,该装置可包括相连的处理器和存储器;其中,存储器用于存储计算机执行指令,当装置运行时,处理器可执行存储器存储的计算机执行指令,以使芯片执行上述各方法实施例中的图像处理方法。
其中,本实施例提供的电子设备、计算机存储介质、计算机程序产品或芯片均用于执行上文所提供的对应的方法,因此,其所能达到的有益效果可参考上文所提供的对应的方法中的有益效果,此处不再赘述。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,该模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个装置,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
该作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是一个物理单元或多个物理单元,即可以位于一个地方,或者也可以分布到多个不同地方。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
该集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该软件产品存储在一个存储介质中,包括若干指令用以使得一个设备(可以是单片机,芯片等)或处理器(processor)执行本申请各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是,以上实施例仅用以说明本申请的技术方案而非限制,尽管参照较佳实施例对本申请进行了详细说明,本领域的普通技术人员应当理解,可以对本申请的技术方案进行修改或等同替换,而不脱离本申请技术方案的精神和范围。

Claims (18)

1.一种请求vSync信号的方法,其特征在于,用于具有显示功能的电子设备,所述电子设备中安装有第一应用,所述方法包括:
在第一时刻,所述电子设备中的第一应用调用所述电子设备中窗口系统SF的setVsyncRate接口,向所述SF发送第一请求,所述第一请求用于请求vSync信号;
响应于所述第一请求,所述SF周期性向所述第一应用分发所述vSync信号;
在第二时刻,所述第一应用调用所述setVsyncRate接口,向所述SF发送第二请求,所述第二请求用于请求取消vSync信号,所述SF在接收到所述第二请求之后,结束周期性向所述第一应用分发所述vSync信号。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
所述第一应用确定需要渲染连续多帧图像,所述第一时刻包括请求渲染第一图像的时刻,所述第一图像为所述多帧图像中的第一帧图像。
3.根据权利要求2所述的方法,其特征在于,所述第一应用记录第一开关状态,所述电子设备的框架层的渲染模块中记录第二开关状态,所述第一开关状态和所述第二开关状态的初始值均为关闭状态;
在所述第一应用确定需要渲染连续多帧图像之后,所述方法还包括:
所述第一应用更新所述第一开关状态为开启状态;
所述在第一时刻,所述电子设备中的第一应用调用所述电子设备中窗口系统SF的setVsyncRate接口,向所述SF发送第一请求,包括:
在所述第一时刻,所述第一应用向所述渲染模块发送第一消息,所述第一消息用于请求vSync信号;
响应于所述第一消息,且所述第一开关状态为所述开启状态,所述第二开关状态为所述关闭状态,所述渲染模块调用所述setVsyncRate接口,向所述SF发送第一请求。
4.根据权利要求3所述的方法,其特征在于,所述第一开关状态为所述开启状态,所述第二开关状态为所述关闭状态,所述方法还包括:
所述渲染模块更新所述第二开关状态为所述开启状态。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括:
在第三时刻,所述第一应用向所述渲染模块发送第一消息,所述第一消息用于请求vSync信号,所述第三时刻为请求渲染第二图像的时刻,所述第二图像为所述多帧图像中除所述第一帧图像之外的任一图像;
响应于所述第一消息,且所述第一开关状态为所述开启状态,所述第二开关状态为所述开启状态,所述渲染模块不向所述SF请求所述vSync信号。
6.根据权利要求4或5所述的方法,其特征在于,在所述向所述SF发送第一请求之后,所述方法还包括:
所述第一应用确定结束渲染连续多帧图像,所述第二时刻包括请求渲染第三图像的时刻,所述第三图像为完成所述多帧图像的渲染后、所述第一应用需要渲染的第一帧图像。
7.根据权利要求6所述的方法,其特征在于,在所述第一应用确定结束渲染连续多帧图像之后,所述方法还包括:
所述第一应用更新所述第一开关状态为所述关闭状态;
所述在第二时刻,所述第一应用调用所述setVsyncRate接口,向所述SF发送第二请求,包括:
在所述第二时刻,所述第一应用向所述渲染模块发送第一消息,所述第一消息用于请求vSync信号;
响应于所述第一消息,且所述第一开关状态为所述关闭状态,所述第二开关状态为所述开启状态,所述渲染模块调用所述setVsyncRate接口,向所述SF发送第二请求。
8.根据权利要求7所述的方法,其特征在于,所述第一开关状态为所述关闭状态,所述第二开关状态为所述开启状态,所述方法还包括:
所述渲染模块更新所述第二开关状态为所述关闭状态。
9.根据权利要求7或8所述的方法,其特征在于,在所述向所述SF发送第二请求之后,所述方法还包括:
所述第一应用调用所述SF的requestNextVsync接口,向所述SF发送第三请求,所述第三请求用于请求vSync信号;
响应于所述第三请求,所述SF向所述第一应用分发一次所述vSync信号。
10.根据权利要求4或5所述的方法,其特征在于,所述SF周期性向所述第一应用分发所述vSync信号,包括:
所述SF周期性向所述渲染模块分发所述vSync信号。
11.根据权利要求10所述的方法,其特征在于,所述方法还包括:
在第一应用需要渲染第四图像时,向渲染模块发送所述第一消息,第四图像是第一应用需要显示的任一帧图像,所述第四图像包括所述第一图像或者所述第二图像;
响应于第一消息,渲染模块记录第一标记,并在接收到来自所述SF的所述vSync信号后,删除所述第一标记;
其中,第二时刻包括所述渲染模块在不包括所述第一标记的情况下,接收到来自所述SF的所述vSync信号的时刻。
12.根据权利要求11所述的方法,其特征在于,所述方法还包括:
在所述第二时刻,所述渲染模块通知所述第一应用将所述第一开关状态更新为所述关闭状态,所述渲染模块更新所述第二开关状态为所述关闭状态。
13.根据权利要求3-12中任一项所述的方法,其特征在于,所述方法还包括:
在第四时刻,所述第一应用向所述渲染模块发送第一消息,所述第一消息用于请求vSync信号;
响应于所述第一消息,且所述第一开关状态和所述第二开关状态均为所述关闭状态,所述渲染模块调用所述requestNextVsync接口,向所述SF发送第四请求,所述第四请求用于请求vSync信号。
14.根据权利要求1-13中任一项所述的方法,其特征在于,所述SF位于所述电子设备的本地层,所述第一应用位于所述电子设备的应用程序层,在所述向所述SF发送第一请求之前,所述方法还包括:
在所述电子设备的框架层中新增第一接口,在所述电子设备的Java本地接口层中新增第二接口,所述第一接口和所述第二接口是所述setVsyncRate接口对Java开放的接口;
所述第一应用调用所述setVsyncRate接口,包括:
所述第一应用依次经过所述第一接口和所述第二接口调用所述setVsyncRate接口。
15.根据权利要求1-14中任一项所述的方法,其特征在于,所述第一请求中包括周期n,n≥1,n为整数;
所述响应于所述第一请求,所述SF周期性向所述第一应用分发所述vSync信号,包括:
响应于所述第一请求,所述SF在每接收到n次所述vSync信号后,向所述第一应用分发一次所述vSync信号。
16.一种电子设备,其特征在于,所述电子设备包括存储器和处理器,所述存储器和所述处理器耦合;其中,所述存储器中存储有计算机程序代码,所述计算机程序代码包括计算机指令,当所述计算机指令被所述处理器执行时,使得所述电子设备执行如权利要求1-15中任一项所述的方法。
17.一种计算机可读存储介质,其特征在于,包括计算机指令,当所述计算机指令在电子设备上运行时,使得所述电子设备执行如权利要求1-15中任一项所述的方法。
18.一种芯片系统,其特征在于,所述芯片系统应用于包括处理器和存储器的电子设备,所述芯片系统包括一个或多个接口电路和一个或多个处理器,所述接口电路和所述处理器通过线路互联,所述接口电路用于从所述电子设备的存储器接收信号,并向所述处理器发送所述信号,所述信号包括所述存储器中存储的计算机指令,当所述处理器执行所述计算机指令时,使得所述电子设备执行如权利要求1-15中任一项所述的方法。
CN202211116851.3A 2022-09-14 2022-09-14 一种请求vSync信号的方法及电子设备 Pending CN117742835A (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN202211116851.3A CN117742835A (zh) 2022-09-14 2022-09-14 一种请求vSync信号的方法及电子设备
PCT/CN2023/117580 WO2024055904A1 (zh) 2022-09-14 2023-09-07 一种请求vSync信号的方法及电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211116851.3A CN117742835A (zh) 2022-09-14 2022-09-14 一种请求vSync信号的方法及电子设备

Publications (1)

Publication Number Publication Date
CN117742835A true CN117742835A (zh) 2024-03-22

Family

ID=90259670

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211116851.3A Pending CN117742835A (zh) 2022-09-14 2022-09-14 一种请求vSync信号的方法及电子设备

Country Status (2)

Country Link
CN (1) CN117742835A (zh)
WO (1) WO2024055904A1 (zh)

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102606693B1 (ko) * 2016-08-23 2023-11-28 삼성전자 주식회사 전자 장치 및 전자 장치의 동작 제어 방법
CN108228358B (zh) * 2017-12-06 2021-03-02 Oppo广东移动通信有限公司 修正垂直同步信号的方法、装置、移动终端以及存储介质
CN114443269B (zh) * 2021-08-27 2023-08-01 荣耀终端有限公司 帧率调节方法和相关装置
CN116501210B (zh) * 2022-01-10 2024-06-11 荣耀终端有限公司 一种显示方法、电子设备及存储介质

Also Published As

Publication number Publication date
WO2024055904A1 (zh) 2024-03-21

Similar Documents

Publication Publication Date Title
CN114648951B (zh) 控制屏幕刷新率动态变化的方法及电子设备
CN116501210B (zh) 一种显示方法、电子设备及存储介质
CN114661263B (zh) 一种显示方法、电子设备及存储介质
CN113556598A (zh) 多窗口投屏方法及电子设备
CN112767231B (zh) 图层合成方法和设备
CN114023272B (zh) 消除墨水屏残影的方法和终端设备
US20230419454A1 (en) Control blurring method and apparatus, terminal device, and readable storage medium
CN116052618B (zh) 一种屏幕刷新率切换方法及电子设备
WO2023109185A1 (zh) 刷新率的设置方法及相关设备
WO2023001163A1 (zh) 一种可提升动效性能的屏幕刷新方法及设备
CN117234319A (zh) 一种屏幕刷新率的设置方法及电子设备
CN117742835A (zh) 一种请求vSync信号的方法及电子设备
CN117707406B (zh) 一种亮屏显示方法、电子设备及存储介质
CN118796279A (zh) 一种窗口动画处理方法及电子设备
CN118626201A (zh) 运行帧率控制方法、电子设备、芯片系统及可读存储介质
CN115567666B (zh) 屏幕录制方法、电子设备及可读存储介质
CN117135253B (zh) 联系人查找方法、终端设备及存储介质
WO2023169276A1 (zh) 投屏方法、终端设备及计算机可读存储介质
WO2024078121A1 (zh) 图像处理方法和电子设备
WO2024016798A1 (zh) 图像显示方法和相关装置
KR100613517B1 (ko) 멀티윈도우 표시가 가능한 이동통신 단말기 및 그멀티윈도우 표시방법
CN117724779A (zh) 一种生成界面图像的方法及电子设备
CN117707406A (zh) 一种亮屏显示方法、电子设备及存储介质
CN118588028A (zh) 电子设备及其显示方法
CN117991961A (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