一种屏幕刷新率切换方法及电子设备转让专利

申请号 : CN202211021875.0

文献号 : CN116052618B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 李时进周健

申请人 : 荣耀终端有限公司

摘要 :

本申请提供一种屏幕刷新率切换方法及电子设备,涉及图像处理及显示技术领域,可以使显示屏的屏幕刷新率从低刷新率快速切换到高刷新率。电子设备的SurfaceFlinger接收第一刷新率切换指令。该第一刷新率切换指令用于指示屏幕刷新率由第一刷新率切换为第二刷新率。其中,第一刷新率小于或等于预设阈值,第二刷新率大于预设阈值。SurfaceFlinger响应于当前的第一Vsync信号的信号周期结束,向显示驱动发送第一刷新率切换指令。其中,第一Vsync信号的信号周期在显示屏的屏幕刷新率为第一刷新率的情况下,被设置为预设周期。该预设周期小于第一刷新率的倒数。显示驱动响应于第一刷新率切换指令,将屏幕刷新率由第一刷新率切换为第二刷新率。

权利要求 :

1.一种屏幕刷新率切换方法,其特征在于,应用于电子设备,所述电子设备包括显示屏,所述方法包括:在所述显示屏的屏幕刷新率为第三刷新率的情况下,响应于所述电子设备由显示动态图像切换为显示静态图像,所述显示屏的屏幕刷新率由所述第三刷新率切换至第一刷新率,并设置第一Vsync信号的信号周期为预设周期,其中,所述第三刷新率大于所述第一刷新率,且所述第一刷新率小于或等于预设阈值,所述预设周期小于所述第一刷新率的倒数;

响应于所述电子设备由显示静态图像切换为显示动态图像,所述电子设备的SurfaceFlinger接收到第一刷新率切换指令,其中,所述第一刷新率切换指令用于指示所述显示屏的屏幕刷新率由第一刷新率切换为第二刷新率,所述第二刷新率大于所述预设阈值;

响应于当前的第一Vsync信号的信号周期结束,所述SurfaceFlinger向所述电子设备的显示驱动发送所述第一刷新率切换指令,其中,所述第一Vsync信号用于触发所述SurfaceFlinger进行图层合成;

所述显示驱动响应于所述第一刷新率切换指令,将所述显示屏的屏幕刷新率由所述第一刷新率切换为所述第二刷新率。

2.一种屏幕刷新率切换方法,其特征在于,应用于电子设备,所述电子设备包括显示屏,所述方法包括:所述电子设备的SurfaceFlinger接收来自上层的第一刷新率切换指令;其中,所述第一刷新率切换指令用于指示所述显示屏的屏幕刷新率由第一刷新率切换为第二刷新率,所述第一刷新率小于或等于预设阈值,所述第二刷新率大于所述预设阈值;

所述SurfaceFlinger响应于当前的第一Vsync信号的信号周期结束,向所述电子设备的显示驱动发送所述第一刷新率切换指令;其中,所述第一Vsync信号用于触发所述SurfaceFlinger进行图层合成;所述第一Vsync信号的信号周期在所述显示屏的屏幕刷新率为所述第一刷新率的情况下,被设置为预设周期,所述预设周期小于所述第一刷新率的倒数;

所述显示驱动响应于所述第一刷新率切换指令,将所述显示屏的屏幕刷新率由所述第一刷新率切换为所述第二刷新率。

3.根据权利要求2所述的方法,其特征在于,在所述显示驱动响应于所述第一刷新率切换指令,将所述显示屏的屏幕刷新率由所述第一刷新率切换为所述第二刷新率之后,所述方法还包括:所述显示驱动按照第一信号周期,向所述SurfaceFlinger发送第二Vsync信号,以向所述SurfaceFlinger指示所述显示屏的屏幕刷新率;其中,所述第二Vsync信号用于触发所述显示屏刷新显示图像帧,所述第一信号周期等于所述第二刷新率的倒数。

4.根据权利要求2或3所述的方法,其特征在于,在所述电子设备的SurfaceFlinger接收来自上层的第一刷新率切换指令之前,所述方法还包括:所述显示屏接收第二刷新率切换指令;其中,所述第二刷新率切换指令用于指示所述显示屏的屏幕刷新率切换为所述第一刷新率;

所述显示屏响应于所述第二刷新率切换指令,将所述显示屏的屏幕刷新率切换为预设刷新率,按照所述预设周期,通过所述显示驱动向所述SurfaceFlinger发送所述第二Vsync信号;其中,所述预设周期等于所述预设刷新率的倒数,所述预设刷新率大于所述预设阈值;

所述SurfaceFlinger接收来自所述显示驱动的所述第二Vsync信号;

如果第二信号周期等于所述预设周期,所述SurfaceFlinger将第一Vsync信号的信号周期设置为所述预设周期,并停止接收来自所述显示驱动的所述第二Vsync信号;

其中,所述第二信号周期是所述SurfaceFlinger从所述显示驱动接收所述第二Vsync信号的周期。

5.根据权利要求4所述的方法,其特征在于,所述方法还包括:

所述显示屏响应于所述第二刷新率切换指令,在预设时长后将所述显示屏的屏幕刷新率切换为所述第一刷新率。

6.根据权利要求4所述的方法,其特征在于,所述预设刷新率是所述显示屏支持的一个屏幕刷新率。

7.根据权利要求6所述的方法,其特征在于,所述第一刷新率为所述显示屏显示静态图像时的目标刷新率。

8.根据权利要求4所述的方法,其特征在于,所述预设刷新率为120Hz;所述第一刷新率为10Hz或1Hz;所述第二刷新率为60Hz、90Hz或120Hz中的任一种。

9.根据权利要求2、3或5‑7中任一项所述的方法,其特征在于,所述第一刷新率切换指令是所述电子设备在显示静态图像的情况下,接收到通知或用户操作后触发的;其中,所述通知或用户操作用于触发所述电子设备更新界面。

10.根据权利要求4所述的方法,其特征在于,所述第二刷新率切换指令是所述电子设备由显示动态图像切换为显示静态图像时触发的。

11.一种电子设备,其特征在于,所述电子设备包括显示屏、存储器和一个或多个处理器;所述显示屏、所述存储器与所述处理器耦合;所述存储器中存储有计算机程序代码,所述计算机程序代码包括计算机指令,当所述计算机指令被所述处理器执行时,使得所述电子设备执行如权利要求1‑7任一项所述的方法。

12.一种计算机可读存储介质,其特征在于,包括计算机指令,当所述计算机指令在电子设备上运行时,使得所述电子设备执行如权利要求1‑7中任一项所述的方法。

说明书 :

一种屏幕刷新率切换方法及电子设备

技术领域

[0001] 本申请涉及图像处理及显示技术领域,尤其涉及一种屏幕刷新率切换方法及电子设备。

背景技术

[0002] 在将显示屏的屏幕刷新率从低刷新率切换回高刷新率的处理机制上,根据Android系统的原生机制,最少需要经过显示屏起始的屏幕刷新率下两个信号周期的时间,比如说如果显示屏起始的屏幕刷新率为10Hz,对应的信号周期为100ms,则最少需要经过200ms才能将显示屏的屏幕刷新率从10Hz这一低刷新率切换回60Hz、90Hz或120Hz这种高刷新率。在这样的机制下,显示屏的屏幕刷新率从低刷新率切换回高刷新率时可能会产生卡顿。

发明内容

[0003] 有鉴于此,本申请提供了一种屏幕刷新率切换方法及电子设备,可以使显示屏的屏幕刷新率从低刷新率快速切换到高刷新率,优化切换性能。
[0004] 第一方面,本申请提供一种屏幕刷新率切换方法,该方法可以应用于电子设备,该电子设备包括显示屏。该方法包括:在显示屏的屏幕刷新率为第三刷新率的情况下,响应于电子设备由显示动态图像切换为显示静态图像,显示屏的屏幕刷新率由第三刷新率切换至第一刷新率,并设置第一Vsync信号的信号周期为预设周期。其中,第三刷新率大于第一刷新率,且第一刷新率小于或等于预设阈值,预设周期小于第一刷新率的倒数。响应于电子设备由显示静态图像切换为显示动态图像,电子设备的SurfaceFlinger接收到第一刷新率切换指令。该第一刷新率切换指令用于指示显示屏的屏幕刷新率由第一刷新率切换为第二刷新率。该第二刷新率大于预设阈值。响应于当前的第一Vsync信号的信号周期结束,SurfaceFlinger向电子设备的显示驱动发送第一刷新率切换指令。其中,第一Vsync信号用于触发SurfaceFlinger进行图层合成。显示驱动响应于第一刷新率切换指令,将显示屏的屏幕刷新率由第一刷新率切换为第二刷新率。
[0005] 上述技术方案中,在电子设备由显示动态图像切换为显示静态图像的情况下,将显示屏的屏幕刷新率由第三刷新率切换至第一刷新率,由于该第一刷新率小于或等于预设阈值,为低刷新率,因此这样可以降低电子设备显示静态图像时的功耗。并且,设置第一Vsync信号的信号周期为预设周期,这样,在之后电子设备由显示静态图像切换为显示动态图像,需要将显示屏的屏幕刷新率由第一刷新率切换为第二刷新率(高刷新率)的情况下,电子设备可以在当前的第一Vsync信号的信号周期(即预设周期)结束就下发相应的第一刷新率切换指令,由于预设周期小于第一刷新率的倒数,相对于Android系统的原生机制下SurfaceFlinger需要等到一个长度为第一刷新率的倒数的周期结束才能下发第一刷新率切换指令,SurfaceFlinger下发第一刷新率切换指令的及时性提高了,这样显示屏也可以及时接收并响应该第一刷新率切换指令,快速完成屏幕刷新率切换。
[0006] 第二方面,本申请提供一种屏幕刷新率切换方法,该方法可以应用于电子设备,该电子设备包括显示屏。该方法包括:电子设备的SurfaceFlinger接收来自上层的第一刷新率切换指令。该第一刷新率切换指令用于指示显示屏的屏幕刷新率由第一刷新率切换为第二刷新率。其中,第一刷新率小于或等于预设阈值,第二刷新率大于预设阈值。SurfaceFlinger响应于当前的第一垂直同步Vsync信号的信号周期结束,向电子设备的显示驱动发送第一刷新率切换指令。其中,第一Vsync信号用于触发SurfaceFlinger进行图层合成。第一Vsync信号的信号周期在显示屏的屏幕刷新率为第一刷新率的情况下,被设置为预设周期。该预设周期小于第一刷新率的倒数。显示驱动响应于第一刷新率切换指令,将显示屏的屏幕刷新率由第一刷新率切换为第二刷新率。
[0007] 应理解,上述第一刷新率小于或等于预设阈值,为低刷新率,第二刷新率大于预设阈值,为高刷新率。
[0008] 上述技术方案中,在电子设备的显示屏的屏幕刷新率为第一刷新率(低刷新率)的情况下,第一Vsync信号的信号周期被设置为预设周期。这样,在需要将显示屏的屏幕刷新率从第一刷新率(低刷新率)切换到第二刷新率(高刷新率)时,SurfaceFlinger可以在当前的第一Vsync信号的信号周期(预设周期)结束就下发第一刷新率切换指令,由于预设周期小于第一刷新率的倒数,相对于Android系统的原生机制下SurfaceFlinger需要等到一个长度为第一刷新率的倒数的周期结束才能下发第一刷新率切换指令,SurfaceFlinger下发第一刷新率切换指令的及时性提高了,这样显示屏也可以及时接收第一刷新率切换指令,并及时响应该第一刷新率切换指令,进行屏幕刷新率切换,由此减少了显示屏的屏幕刷新率的切换时间,避免了卡顿,提升了电子设备的跟手性,提升了用户体验。
[0009] 在第二方面的一种可能的实现方式中,在显示驱动响应于第一刷新率切换指令,将显示屏的屏幕刷新率由第一刷新率切换为第二刷新率之后,上述方法还包括:显示驱动按照第一信号周期,向SurfaceFlinger发送第二Vsync信号,以向SurfaceFlinger指示显示屏的屏幕刷新率。其中,第二Vsync信号可以触发显示屏刷新显示图像帧,第一信号周期等于第二刷新率的倒数。
[0010] 也就是说,显示屏的屏幕刷新率由第一刷新率切换为第二刷新率之后,显示驱动按照第一信号周期(即第二刷新率的倒数),周期性地向SurfaceFlinger发送第二Vsync信号,用于SurfaceFlinger进行Vsync信号校准。这样,SurfaceFlinger可以根据接收到第二Vsync信号的周期,来确定显示屏的屏幕刷新率已经切换为了第二刷新率,SurfaceFlinger就可以按照第二刷新率的倒数,周期性地生成第一Vsync信号。由此,可以实现第一Vsync信号与第二Vsync信号保持周期同步。
[0011] 在第二方面的另一种可能的实现方式中,在电子设备的SurfaceFlinger接收来自上层的第一刷新率切换指令之前,上述方法还包括:显示屏接收第二刷新率切换指令。该第二刷新率切换指令用于指示显示屏的屏幕刷新率切换为第一刷新率。显示屏响应于第二刷新率切换指令,将所述显示屏的屏幕刷新率切换为预设刷新率,按照预设周期,通过显示驱动向SurfaceFlinger发送第二Vsync信号。其中,预设周期等于预设刷新率的倒数,预设刷新率大于预设阈值。SurfaceFlinger接收来自显示驱动的第二Vsync信号。如果SurfaceFlinger从显示驱动接收第二Vsync信号的周期(即第二信号周期)等于预设周期,SurfaceFlinger将第一Vsync信号的信号周期设置为预设周期,并停止接收来自显示驱动的第二Vsync信号。
[0012] 也就是说,显示屏接收到第二刷新率切换指令后,可以响应于该第二刷新率切换指令,先将显示屏的屏幕刷新率切换为预设刷新率,这样就可以按照预设周期,周期性地向SurfaceFlinger发送第二Vsync信号,用于SurfaceFlinger进行Vsync信号校准。SurfaceFlinger完成Vsync信号校准后,可以将第一Vsync信号的信号周期设置为预设周期,按照预设周期运行。这样,在后续接收到新的刷新率切换指令(如第一刷新率指令时)时,能够及时将新的刷新率切换指令下发。
[0013] 在第二方面的另一种可能的实现方式中,方法还包括:显示屏响应于第二刷新率切换指令,在预设时长后将显示屏的屏幕刷新率切换为第一刷新率。
[0014] 也就是说,显示屏接收到第二刷新率切换指令后,可以响应于该第二刷新率切换指令,先将显示屏的屏幕刷新率切换为预设刷新率。这样,显示屏可以按照预设周期,周期性地向SurfaceFlinger发送第二Vsync信号,用于SurfaceFlinger进行Vsync信号校准。SurfaceFlinger完成Vsync信号校准后,可以将第一Vsync信号的信号周期设置为预设周期。而显示屏响应于第二刷新率切换指令,在预设时长后可以将显示屏的屏幕刷新率切换为第一刷新率,也就是按照长度为第一刷新率的倒数的周期运行,即按照长度为第一刷新率的倒数的周期刷新显示图像帧,以降低功耗。
[0015] 在第二方面的另一种可能的实现方式中,预设刷新率是显示屏支持的一个屏幕刷新率。
[0016] 也就是说,显示屏接收到第二刷新率切换指令后,可以响应于该第二刷新率切换指令,在将显示屏的屏幕刷新率切换为第一刷新率之前,先将显示屏的屏幕刷新率切换为预设刷新率。这样,显示屏可以按照预设周期,向SurfaceFlinger发送第二Vsync信号,用于SurfaceFlinger进行Vsync信号校准。
[0017] 在第二方面的另一种可能的实现方式中,第一刷新率为显示屏显示静态图像时的目标刷新率。
[0018] 在显示屏显示静态图像时,可以将显示屏的屏幕刷新率设置为第一刷新率(低刷新率),以降低功耗。
[0019] 在第二方面的另一种可能的实现方式中,预设刷新率为120Hz;第一刷新率为10Hz或1Hz;第二刷新率为60Hz、90Hz或120Hz。
[0020] 也就是说,显示屏接收到第二刷新率切换指令后,可以响应于该第二刷新率切换指令,先将显示屏的屏幕刷新率切换为预设刷新率120Hz。这样,显示屏可以按照8ms的周期,向SurfaceFlinger发送第二Vsync信号,用于SurfaceFlinger进行Vsync信号校准。SurfaceFlinger完成Vsync信号校准后,就可以将第一Vsync信号的信号周期设置为8ms,按照8ms的周期运行。而显示屏响应于第二刷新率切换指令,在预设时长后可以将显示屏的屏幕刷新率切换为10Hz或1Hz,也就是按照100ms或1000ms的周期运行,即按照100ms或1000ms的周期刷新显示图像帧,以降低功耗。之后,若SurfaceFlinger接收到第一刷新率切换指令,SurfaceFlinger能够在当前的8ms的周期结束后,就将第一刷新率切换指令下发,以使显示屏及时接收第一刷新率切换指令,并及时响应该第一刷新率切换指令,将屏幕刷新率切换为60Hz、90Hz或120Hz。
[0021] 在第二方面的另一种可能的实现方式中,第一刷新率切换指令是电子设备在显示静态图像的情况下,接收到通知或用户操作后触发的。其中,通知或用户操作用于触发电子设备更新界面。
[0022] 也就是说,电子设备在显示静态图像的情况下,若接收到通知或用户操作后,可以触发第一刷新率切换指令,从而控制显示屏的屏幕刷新率从第一刷新率(低刷新率)切换到第二刷新率(高刷新率)。
[0023] 在第二方面的另一种可能的实现方式中,第二刷新率切换指令是电子设备由显示动态图像切换为显示静态图像时触发的。
[0024] 也就是说,电子设备由显示动态图像切换为显示静态图像时,可以触发第二刷新率切换指令,以控制显示屏的屏幕刷新率切换到第一刷新率(低刷新率),以降低功耗。
[0025] 第三方面,本申请提供一种电子设备,该电子设备包括显示屏、存储器和一个或多个处理器。该显示屏、存储器和处理器耦合。该存储器用于存储计算机程序代码,计算机程序代码包括计算机指令。当上述处理器执行计算机指令时,电子设备执行如第一方面或第二方面及其任一种可能的设计方式所述的方法。
[0026] 第四方面,本申请提供一种芯片系统,该芯片系统应用于包括显示屏的电子设备。该芯片系统包括一个或多个接口电路和一个或多个处理器。该接口电路和处理器通过线路互联。该接口电路用于从电子设备的存储器接收信号,并向处理器发送信号,信号包括存储器中存储的计算机指令。当处理器执行计算机指令时,电子设备执行如第一方面或第二方面及其任一种可能的设计方式所述的方法。
[0027] 第五方面,本申请提供一种计算机存储介质,该计算机存储介质包括计算机指令,当该计算机指令在电子设备上运行时,使得电子设备执行如第一方面或第二方面及其任一种可能的设计方式所述的方法。
[0028] 第六方面,本申请提供一种计算机程序产品,当该计算机程序产品在计算机上运行时,使得该计算机执行如第一方面或第二方面及其任一种可能的设计方式所述的方法。
[0029] 可以理解地,上述提供的第三方面所述的电子设备,第四方面所述的芯片系统,第五方面所述的计算机存储介质,第六方面所述的计算机程序产品所能达到的有益效果,可参考如第一方面或第二方面及其任一种可能的设计方式中的有益效果,此处不再赘述。

附图说明

[0030] 图1为本申请实施例中的一种Android系统的Vsync机制示意图;
[0031] 图2A是本申请实施例提供的一种电子设备软件结构框图;
[0032] 图2B为本申请实施例提供的一种电子设备的硬件结构示意图;
[0033] 图3为本申请实施例中的一种Android系统原生的刷新率切换流程图;
[0034] 图4为本申请实施例提供的一种刷新率切换流程图;
[0035] 图5为本申请实施例提供的一种刷新率切换原理图;
[0036] 图6为本申请实施例提供的另一种刷新率切换流程图;
[0037] 图7为本申请实施例提供的另一种刷新率切换原理图;
[0038] 图8A为本申请实施例提供的另一种刷新率切换流程图;
[0039] 图8B为本申请实施例提供的另一种刷新率切换原理图;
[0040] 图9为本申请实施例提供的一种屏幕刷新率切换方法中各模块交互流程图;
[0041] 图10为本申请实施例提供的一种芯片系统的结构示意图。

具体实施方式

[0042] 为了更好地理解本申请实施例中的技术方案,以下对本申请实施例中涉及的安卓(Android)终端设备的显示原理及相关术语进行介绍。
[0043] Android终端设备中应用程序(Application,APP)的显示流程可以分为APP绘制和渲染、图层整合器(SurfaceFlinger)合成、显示屏刷新显示三个阶段。
[0044] (1)屏幕刷新率(Refresh Rate或Scanning Frequency)
[0045] 屏幕刷新率分为垂直刷新率和水平刷新率,一般提到的屏幕刷新率通常指垂直刷新率。垂直刷新率表示显示屏显示的图像每秒钟刷新的次数,以Hz(赫兹)为单位。例如,60Hz的屏幕意味着一个显示屏在1秒内可以完成60次刷新显示图像帧。屏幕刷新率越高,显示屏1秒内可以完成刷新显示图像帧的次数也就越多。相应地,画面流畅度也就越高。
[0046] (2)帧率(Frame Rate,也称为帧速率)
[0047] 帧率是指显卡(图形处理器)每秒钟生成的图像的帧数。帧率(Frame rate)=帧数(Frames)/时间(Time),单位为帧每秒(frames per second,即f/s,也可以称为fps)。高的帧率可以得到更流畅、更逼真的动画。帧率(fps)越高,所显示的动作就会越流畅。现在显卡的性能大幅提高,能够实现的帧率越来越高。但如果帧率超过屏幕刷新率,只会浪费图形处理的能力,这样超过刷新率的帧率就浪费掉了。而且因为显示屏不能以同样的速度更新,帧率过高会出现画面撕裂。例如,屏幕刷新率为60Hz,如果显卡的输出大于60fps,两者不同步,画面便会撕裂。Android系统通过垂直同步(Vertical synchronization,简称Vsync,又称场同步)机制解决画面撕裂的问题。
[0048] (3)Vsync机制
[0049] Android系统的显示原理是基于Vsync机制。Vsync机制下,Android系统中有2种Vsync信号:一种是硬件生成的Vsync信号,可以称为硬件Vsync信号(Vsync‑HW信号,后称为第二Vsync信号);另一种是软件模拟的Vsync信号,可以称为软件Vsync信号(后称为第一Vsync信号)。该第一Vsync信号可以包括Vsync‑APP信号和Vsync‑SF信号。
[0050] SurfaceFlinger可以接收第二Vsync信号,进行Vsync信号校准,即根据第二Vsync信号产生第一Vsync信号,使第一Vsync信号与第二Vsync信号保持周期同步,也就是说,使第一Vsync信号的信号周期随第二Vsync信号的信号周期变化。其中,第二Vsync信号的信号周期等于显示屏的屏幕刷新率的倒数。例如,在进行屏幕刷新率切换的时候,SurfaceFlinger开启Vsync信号校准。以显示屏的屏幕刷新率从60Hz切换到120Hz为例,显示屏上报第二Vsync信号的频率从60Hz切换到120Hz,即第二Vsync信号的信号周期从16ms切换到8ms。这时,SurfaceFlinger开启Vsync信号校准,接收第二Vsync信号,并根据接收到第二Vsync信号的周期,确定显示屏完成了屏幕刷新率切换,则将第一Vsync信号的信号周期从16ms切换到8ms,以保持第一Vsync信号与第二Vsync信号周期同步。
[0051] SurfaceFlinger可以利用DiscSync::addResyncSample函数判断是否还需要输入第二Vsync信号。如果不需要,SurfaceFlinger可以通过EventControlThread线程关闭第二Vsync信号输入,从而即关闭Vsync信号校准。一段时间后,如果SurfaceFlinger需要再次接收第二Vsync信号来对第一Vsync信号进行校准,可以通过EventControlThread线程再次开启第二Vsync信号输入,从而开启Vsync信号校准。
[0052] 显示屏刷新过程是从左到右(水平刷新,Horizontal Scanning),从上到下(垂直刷新,Vertical Scanning),顺序显示图像上的像素点。当显示屏刷新完毕,即一个垂直刷新周期完成,会有短暂的空白期(即Vertical Blanking Interval,VBI,垂直回扫期),此时显示屏发出第二Vsync信号。所以,Vsync中的V指的是垂直刷新中的垂直(Vertical),显示屏发出第二Vsync信号的周期等于显示屏刷新显示一个图像帧的耗时。
[0053] 示例性地,在Vsync机制下,Android终端设备中APP的显示流程中APP绘制和渲染由Vsync‑APP信号触发,SurfaceFlinger合成由Vsync‑SF信号触发,显示屏刷新显示由第二Vsync信号触发。APP收到一个Vsync‑APP信号后,通过调用中央处理单元(Central Processing Unit,CPU)和图形处理单元(Graphic ProcessingUnit,GPU),开始进行下一个图像帧的绘制和渲染。SurfaceFlinger收到一个Vsync‑SF信号后,开始进行下一个图像帧的合成。显示屏收到一个Vsync‑HW信号后,开始进行下一个图像帧的显示。由此,完成APP绘制和渲染、SurfaceFlinger合成、显示屏刷新显示的同步。参见图1,图1示出了一种AndroidVsync机制示意图。如图1所示,基于Android系统的Vsync机制,Android终端设备显示流程如下:
[0054] 1)在第i个信号周期,显示屏显示经SurfaceFlinger合成好的图像帧Frame0;SurfaceFlinger合成经APP绘制和渲染好的图像帧Frame1;APP绘制和渲染图像帧Frame2;
[0055] 2)在第i+1个信号周期,显示屏显示经SurfaceFlinger合成好的图像帧Frame1;SurfaceFlinger合成经APP绘制和渲染好的图像帧Frame2;APP绘制和渲染图像帧Frame3;
[0056] 3)在第i+2个信号周期,显示屏显示经SurfaceFlinger合成好的图像帧Frame2;SurfaceFlinger合成经APP绘制和渲染好的图像帧Frame3;APP绘制和渲染图像帧Frame4;
[0057] 4)在第i+3个信号周期,显示屏显示经SurfaceFlinger合成好的图像帧Frame3;SurfaceFlinger合成经APP绘制和渲染好的图像帧Frame4;APP绘制和渲染图像帧Frame5,依次类推。
[0058] 其中,信号周期是指第一Vsync信号和第二Vsync信号的信号周期。第一Vsync信号与第二Vsync信号保持周期同步。
[0059] 由此可见,在Vsync机制下,Android终端设备从绘制一个图像帧开始,到该图像帧最终在显示屏上进行显示,会经过2个信号周期,也就是说有2个信号周期的延时。
[0060] 电子设备的软件系统可以采用分层架构,事件驱动架构,微核架构,微服务架构,或云架构。本申请实施例以分层架构的Android系统为例,示例性说明电子设备的软件结构。
[0061] 图2A是本申请实施例的电子设备的软件结构框图。
[0062] 分层架构将软件分成若干个层,每一层都有清晰的角色和分工。层与层之间通过软件接口通信。在一些实施例中,将Android系统分为五层,从上至下分别为应用程序层,应用程序框架层,安卓运行时(Android runtime,ART)和原生C/C++库,硬件抽象层(Hardware Abstract Layer,HAL)以及内核层。
[0063] 应用程序层可以包括一系列应用程序包。
[0064] 如图2A所示,应用程序包可以包括相机,图库,日历,通话,地图,导航,WLAN,蓝牙,音乐,视频,短信息等应用程序。
[0065] 应用程序框架层为应用程序层的应用程序提供应用编程接口(application programming interface,API)和编程框架。应用程序框架层包括一些预先定义的函数。
[0066] 如图2A所示,应用程序框架层可以包括刷新率控制模块、SurfaceFlinger、窗口管理器,内容提供器,视图系统,资源管理器,通知管理器,活动管理器,输入管理器等。
[0067] 其中,刷新率控制模块具有感知外部事件的能力。例如,刷新率控制模块可以通过API从应用程序层的应用程序或硬件抽象层或内核层来检测用户界面(User Interface,UI)事件。该UI事件可以是由用户对电子设备进行点击操作或滑动操作触发的。或者,该UI事件可以是由电子设备自动触发的。例如,电子设备的前台应用自动切换画面时,可以触发上述UI事件。前台应用是电子设备的显示屏当前显示的界面对应的应用。再例如,电子设备接收到消息通知,需要显示弹窗,即触发上述UI事件。基于检测到的UI事件,可以确定适合于当前显示场景的屏幕刷新率,并控制显示屏将屏幕刷新率切换到适合于当前显示场景的屏幕刷新率。
[0068] 而显示屏的屏幕刷新率的切换过程可以包括:刷新率控制模块向SurfaceFlinger发送刷新率切换指令,SurfaceFlinger下发该刷新率切换指令给HWC(hwcomposer,硬件合成模块),HWC再下发该刷新率切换指令给显示驱动,显示驱动在收到刷新率切换指令后,通知显示驱动芯片切换到目标刷新率,显示驱动芯片驱动显示屏(例如OLED或者LCD)完成屏幕刷新率切换,以新的屏幕刷新率进行图像刷新显示,并且显示驱动芯片周期性地发送第二Vsync信号给显示驱动。显示驱动上报第二Vsync信号。SurfaceFlinger接收到第二Vsync信号,根据接收到第二Vsync信号的周期,判断第二Vsync信号的信号周期是否为目标刷新率对应的周期,若是则可以确定完成了屏幕刷新率切换。SurfaceFlinger按照该目标刷新率对应的周期,生成相应的第一Vsync信号。APP和SurfaceFlinger会在接收到该第一Vsync信号后才执行图层绘制、图层渲染和图层合成操作。这样,便可以把APP和SurfaceFlinger进行图层绘制、图层渲染和图层合成操作的帧率切换为与目标刷新率一致。
[0069] 窗口管理器提供窗口管理服务(Window Manager Service,WMS),WMS可以用于窗口管理、窗口动画管理、surface管理以及作为输入系统的中转站。
[0070] 内容提供器用来存放和获取数据,并使这些数据可以被应用程序访问。该数据可以包括视频,图像,音频,拨打和接听的电话,浏览历史和书签,电话簿等。
[0071] 视图系统包括可视控件,例如显示文字的控件,显示图片的控件等。视图系统可用于构建应用程序。显示界面可以由一个或多个视图组成的。例如,包括短信通知图标的显示界面,可以包括显示文字的视图以及显示图片的视图。
[0072] 资源管理器为应用程序提供各种资源,比如本地化字符串,图标,图片,布局文件,视频文件等等。
[0073] 通知管理器使应用程序可以在状态栏中显示通知信息,可以用于传达告知类型的消息,可以短暂停留后自动消失,无需用户交互。比如通知管理器被用于告知下载完成,消息提醒等。通知管理器还可以是以图表或者滚动条文本形式出现在系统顶部状态栏的通知,例如后台运行的应用程序的通知,还可以是以对话窗口形式出现在屏幕上的通知。例如在状态栏提示文本信息,发出提示音,电子设备振动,指示灯闪烁等。
[0074] 活动管理器可以提供活动管理服务(Activity Manager Service,AMS),AMS可以用于系统组件(例如活动、服务、内容提供者、广播接收器)的启动、切换、调度以及应用进程的管理和调度工作。
[0075] 输入管理器可以提供输入管理服务(Input Manager Service,IMS),IMS可以用于管理系统的输入,例如触摸屏输入、按键输入、传感器输入等。IMS从输入设备节点取出事件,通过和WMS的交互,将事件分配至合适的窗口。
[0076] 安卓运行时包括核心库和安卓运行时。安卓运行时负责将源代码转换为机器码。安卓运行时主要包括采用提前(ahead or time,AOT)编译技术和及时(just in time,JIT)编译技术。
[0077] 核心库主要用于提供基本的Java类库的功能,例如基础数据结构、数学、IO、工具、数据库、网络等库。核心库为用户进行安卓应用开发提供了API。
[0078] 原生C/C++库可以包括多个功能模块。例如:表面管理器(surface manager),媒体框架(Media Framework),libc,OpenGL ES、SQLite、Webkit等。
[0079] 其中,表面管理器用于对显示子系统进行管理,并且为多个应用程序提供了2D和3D图层的融合。媒体框架支持多种常用的音频,视频格式回放和录制,以及静态图像文件等。媒体库可以支持多种音视频编码格式,例如:MPEG4,H.264,MP3,AAC,AMR,JPG,PNG等。
OpenGLES提供应用程序中2D图形和3D图形的绘制和操作。SQLite为电子设备100的应用程序提供轻量级关系型数据库。
[0080] 硬件抽象层运行于用户空间(user space),对内核层驱动进行封装,向上层提供调用接口。硬件抽象层可以包括HWC,HWC具有利用硬件完成图像数据组合并显示的功能或能力,具体图像显示可以由多个类如SurfaceFlinger、HWC、显示屏等协同完成。
[0081] HWC是Android系统中进行窗口/图层(layer)合成并显示的硬件抽象层的模块,为SurfaceFlinger服务提供硬件支持。
[0082] 其中,SurfaceFlinger提供所有软图层信息给HWC,并询问HWC处理方式。进一步地,HWC可以根据硬件性能决定是使用HWC底层的硬件(例如,硬件合成器)还是GPU合成;例如,HWC会为每个图层标注合成方式,是通过GPU还是通过HWC合成。一方面,SurfaceFlinger对需要GPU合成的软图层进行处理,并将结果通过HWC提交给显示屏;另一方面,需要硬件合成器合成的软图层由HWC自行处理。
[0083] SurfaceFlinger可以使用三维图形处理库(例如OpenGLES)合成图层,这需要占用并消耗GPU资源。大多数GPU都没有针对图层合成进行优化,当SurfaceFlinger通过GPU合成图层时,应用程序无法使用GPU进行自己的渲染。而HWC通过硬件合成器进行图层合成,可以减轻GPU的合成压力。
[0084] 内核层是硬件和软件之间的层。内核层至少包含显示驱动,摄像头驱动,音频驱动,传感器驱动。具体到本申请方案,涉及的硬件可以包括显示驱动芯片(例如显示驱动集成芯片,display driver integrated circuit,DDIC)以及显示屏(例如OLED或者LCD)。显示驱动用于驱动DDIC完成显示的处理和实现。
[0085] 以用户启动应用A为例,在用户启动应用A之后,显示屏将显示应用A的界面。具体的,应用A将待显示的界面的显示参数发送给SurfaceFlinger。SurfaceFlinger负责控制界面(surface)的融合。作为示例,这里的界面可能是状态栏、系统栏、应用本身(应用A待显示的界面)、壁纸、背景等呈现的界面。因此,SurfaceFlinger不仅可以获取到应用A待显示的界面的显示参数,还可以得到其他界面的显示参数。SurfaceFlinger通过接口(例如set Layer Buffer、set Layer Color等)将各个界面的显示参数(例如内存地址、颜色等)发送给HWC进行界面融合。通常,图像的合成(例如,电子设备显示图像时,需要将状态栏、系统栏、应用本身和壁纸背景合成)中,HWC通过HWC底层的硬件(如硬件合成器)根据各个界面的显示参数获得合成后的图像。需要说明,在HWC通过底层的硬件获得合成后的图像后,SurfaceFlinger才会结束本次合成图像的任务。HWC将底层的硬件合成后的图像发送至内核层的显示驱动。内核层的显示驱动将合成后的图像给到硬件层的显示驱动芯片,硬件层的显示驱动芯片对合成后的图像进行二次处理,将二次处理后的图像送到显示屏进行显示。实际应用中,也可以不进行二次处理。若不进行二次处理,则硬件层的显示驱动直接将合成后的图像送到显示屏进行显示。按照上述方式,显示屏可以完成一次刷新显示流程。电子设备可以按照显示屏的屏幕刷新率,以一定的周期执行上述刷新显示流程。例如,显示屏的屏幕刷新率为60Hz,对应的信号周期为16ms,相当于每间隔16ms执行一次上述刷新显示流程。
[0086] 示例性的,本申请实施例中的电子设备可以是手机、平板电脑、桌面型、膝上型、手持计算机、笔记本电脑、超级移动个人计算机(ultra‑mobile personal computer,UMPC)、上网本,以及蜂窝电话、个人数字助理(personal digital assistant,PDA)、增强现实(augmented reality,AR)\虚拟现实(virtual reality,VR)设备等包括触摸屏的设备,本申请实施例对该电子设备的具体形态不作特殊限制。
[0087] 下面将结合附图对本申请实施例的实施方式进行详细描述。
[0088] 请参考图2B,为本申请实施例提供的一种电子设备200的结构示意图。如图2B所示,电子设备200可以包括处理器210,外部存储器接口220,内部存储器221,通用串行总线(universal serial bus,USB)接口230,充电管理模块240,电源管理模块241,电池242,天线1,天线2,移动通信模块250,无线通信模块260,音频模块270,传感器模块280,按键290,马达291,指示器292,摄像头293,显示屏294,以及用户标识模块(subscriber identification module,SIM)卡接口295等。
[0089] 其中,传感器模块280可以包括触摸传感器。可以理解的是,本实施例示意的结构并不构成对电子设备200的具体限定。在另一些实施例中,电子设备200可以包括比图示更多或更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置。图示的部件可以以硬件,软件或软件和硬件的组合实现。
[0090] 处理器210可以包括一个或多个处理单元。其中,不同的处理单元可以是独立的器件,也可以集成在一个或多个处理器中。
[0091] 控制器可以是电子设备200的神经中枢和指挥中心。控制器可以根据指令操作码和时序信号,产生操作控制信号,完成取指令和执行指令的控制。
[0092] 处理器210中还可以设置存储器,用于存储指令和数据。在一些实施例中,处理器210中的存储器为高速缓冲存储器。该存储器可以保存处理器210刚用过或循环使用的指令或数据。如果处理器210需要再次使用该指令或数据,可从所述存储器中直接调用。避免了重复存取,减少了处理器210的等待时间,因而提高了系统的效率。
[0093] 在一些实施例中,处理器210可以包括一个或多个接口。接口可以包括集成电路(inter‑integrated circuit,I2C)接口,集成电路内置音频(inter‑integrated circuit sound,I2S)接口,脉冲编码调制(pulse code modulation,PCM)接口,通用异步收发传输器(universal asynchronous receiver/transmitter,UART)接口,移动产业处理器接口(mobile industry processor interface,MIPI),通用输入输出(general‑purpose input/output,GPIO)接口,用户标识模块(subscriber identity module,SIM)接口,和/或通用串行总线(universal serial bus,USB)接口等。
[0094] 可以理解的是,本实施例示意的各模块间的接口连接关系,只是示意性说明,并不构成对电子设备200的结构限定。在另一些实施例中,电子设备200也可以采用上述实施例中不同的接口连接方式,或多种接口连接方式的组合。
[0095] 充电管理模块240用于从充电器接收充电输入。充电管理模块240为电池242充电的同时,还可以通过电源管理模块241为电子设备供电。
[0096] 电源管理模块241用于连接电池242,充电管理模块240与处理器210。电源管理模块241接收电池242和/或充电管理模块240的输入,为处理器210,内部存储器221,外部存储器,显示屏294,摄像头293,和无线通信模块260等供电。在其他一些实施例中,电源管理模块241也可以设置于处理器210中。在另一些实施例中,电源管理模块241和充电管理模块240也可以设置于同一个器件中。
[0097] 电子设备200的无线通信功能可以通过天线1,天线2,移动通信模块250,无线通信模块260,调制解调处理器以及基带处理器等实现。
[0098] 天线1和天线2用于发射和接收电磁波信号。电子设备200中的每个天线可用于覆盖单个或多个通信频带。不同的天线还可以复用,以提高天线的利用率。例如:可以将天线1复用为无线局域网的分集天线。
[0099] 移动通信模块250可以提供应用在电子设备200上的包括2G/3G/4G/5G等无线通信的解决方案。移动通信模块250可以包括至少一个滤波器,开关,功率放大器,低噪声放大器(low noise amplifier,LNA)等。移动通信模块250可以由天线1接收电磁波,并对接收的电磁波进行滤波,放大等处理,传送至调制解调处理器进行解调。移动通信模块250还可以对经调制解调处理器调制后的信号放大,经天线1转为电磁波辐射出去。
[0100] 调制解调处理器可以包括调制器和解调器。其中,调制器用于将待发送的低频基带信号调制成中高频信号。解调器用于将接收的电磁波信号解调为低频基带信号。随后解调器将解调得到的低频基带信号传送至基带处理器处理。低频基带信号经基带处理器处理后,被传递给应用处理器。应用处理器通过音频设备输出声音信号,或通过显示屏294显示图像或视频。
[0101] 无线通信模块260可以提供应用在电子设备200上的包括无线局域网(wireless local area networks,WLAN)(如无线保真(wireless fidelity,Wi‑Fi)网络),蓝牙(bluetooth,BT),全球导航卫星系统(global navigation satellite system,GNSS),调频(frequency modulation,FM),近距离无线通信技术(near field communication,NFC),红外技术(infrared,IR)等无线通信的解决方案。无线通信模块260可以是集成至少一个通信处理模块的一个或多个器件。无线通信模块260经由天线2接收电磁波,将电磁波信号调频以及滤波处理,将处理后的信号发送到处理器210。无线通信模块260还可以从处理器210接收待发送的信号,对其进行调频,放大,经天线2转为电磁波辐射出去。
[0102] 在一些实施例中,电子设备200的天线1和移动通信模块250耦合,天线2和无线通信模块260耦合,使得电子设备200可以通过无线通信技术与网络以及其他设备通信。
[0103] 电子设备200通过GPU,显示屏294,以及应用处理器等实现显示功能。GPU为图像处理的微处理器,连接显示屏294和应用处理器。GPU用于执行数学和几何计算,用于图形渲染。处理器210可包括一个或多个GPU,其执行程序指令以生成或改变显示信息。
[0104] 显示屏294用于显示图像,视频等。该显示屏294包括显示面板。显示面板可以采用液晶显示屏(liquid crystal display,LCD),有机发光二极管(organic light‑emitting diode,OLED),有源矩阵有机发光二极体或主动矩阵有机发光二极体(active‑matrix organic light emitting diode,AMOLED),柔性发光二极管(flex light‑emitting diode,FLED),Miniled,MicroLed,Micro‑OLED,量子点发光二极管(quantum dot light emitting diodes,QLED)等。
[0105] 其中,本申请实施例中的显示屏294可以是触摸屏。即该显示屏294中集成了触摸传感器。该触摸传感器也可以称为“触控面板”。也就是说,显示屏294可以包括显示面板和触摸面板,由触摸传感器与显示屏294组成触摸屏,也称“触控屏”。触摸传感器用于检测作用于其上或附近的触摸操作。触摸传感器检测到的触摸操作后,可以由内核层的驱动(如TP驱动)传递给上层,以确定触摸事件类型。可以通过显示屏294提供与触摸操作相关的视觉输出。在另一些实施例中,触摸传感器也可以设置于电子设备200的表面,与显示屏294所处的位置不同。
[0106] 电子设备200可以通过ISP,摄像头293,视频编解码器,GPU,显示屏294以及应用处理器等实现拍摄功能。ISP用于处理摄像头293反馈的数据。摄像头293用于捕获静态图像或视频。数字信号处理器用于处理数字信号,除了可以处理数字图像信号,还可以处理其他数字信号。视频编解码器用于对数字视频压缩或解压缩。电子设备200可以支持一种或多种视频编解码器。这样,电子设备200可以播放或录制多种编码格式的视频,例如:动态图像专家组(moving picture experts group,MPEG)1,MPEG2,MPEG3,MPEG4等。
[0107] 外部存储器接口220可以用于连接外部存储卡,例如Micro SD卡,实现扩展电子设备200的存储能力。外部存储卡通过外部存储器接口220与处理器210通信,实现数据存储功能。例如将音乐,视频等文件保存在外部存储卡中。内部存储器221可以用于存储计算机可执行程序代码,所述可执行程序代码包括指令。处理器210通过运行存储在内部存储器221的指令,从而执行电子设备200的各种功能应用以及数据处理。例如,在本申请实施例中,处理器210可以通过执行存储在内部存储器221中的指令,内部存储器221可以包括存储程序区和存储数据区。其中,存储程序区可存储操作系统,至少一个功能所需的应用程序(比如声音播放功能,图像播放功能等)等。存储数据区可存储电子设备200使用过程中所创建的数据(比如音频数据,电话本等)等。此外,内部存储器221可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件,闪存器件,通用闪存存储器(universal flash storage,UFS)等。
[0108] 电子设备200可以通过音频模块270,扬声器270A,受话器270B,麦克风170C,耳机接口270D,以及应用处理器等实现音频功能。例如音乐播放,录音等。
[0109] 音频模块270用于将数字音频信息转换成模拟音频信号输出,也用于将模拟音频输入转换为数字音频信号。音频模块270还可以用于对音频信号编码和解码。
[0110] 按键290包括开机键,音量键等。按键290可以是机械按键。也可以是触摸式按键。电子设备200可以接收按键输入,产生与电子设备200的用户设置以及功能控制有关的键信号输入。马达291可以产生振动提示。马达291可以用于来电振动提示,也可以用于触摸振动反馈。指示器292可以是指示灯,可以用于指示充电状态,电量变化,也可以用于指示消息,未接来电,通知等。SIM卡接口295用于连接SIM卡。SIM卡可以通过插入SIM卡接口295,或从SIM卡接口295拔出,实现和电子设备200的接触和分离。电子设备200可以支持1个或N个SIM卡接口,N为大于1的正整数。SIM卡接口295可以支持NanoSIM卡,MicroSIM卡,SIM卡等。
[0111] 以下实施例中的方法均可以在具有上述硬件结构的电子设备200中实现。
[0112] 在一种场景下,如用户未对电子设备进行操作,电子设备也没有收到通知等,没有出现弹窗,电子设备的显示屏显示静态图像时,此时将显示屏的屏幕刷新率从高刷新率切换至低刷新率,可以节省电能和CPU资源。其中,低刷新率是指显示屏的屏幕刷新率小于或等于预设阈值,如屏幕刷新率为10Hz或1Hz。高刷新率是指显示屏的屏幕刷新率大于预设阈值,如屏幕刷新率为60Hz、90Hz或120Hz。但是,在显示屏的屏幕刷新率为低刷新率时,如果用户进行点击操作或滑动操作,或终端接收到消息通知,显示屏需要显示弹窗,或电子设备显示屏需要显示动画等,则显示屏需要退出低刷新率,切换回高刷新率。
[0113] 参见图3,图3示出了在显示屏需要退出低刷新率,切换回高刷新率的场景下,Android系统原生机制下的屏幕刷新率切换流程图。如图3所示,Android系统原生机制下的屏幕刷新率切换流程包括以下步骤:
[0114] S301、SurfaceFlinger在第i个信号周期(该信号周期为第一刷新率f1对应的信号周期T1,T1等于第一刷新率的倒数,即T1=1/f1,如在f1=10Hz的情况下,T1=100ms)内接收第一刷新率切换指令。该第一刷新率切换指令用于指示显示屏的屏幕刷新率从第一刷新率切换到第二刷新率。其中,第一刷新率小于或等于预设阈值,第二刷新率大于预设阈值。
[0115] 应理解,若电子设备在第i个信号周期内接收到用户操作(例如点击或滑动操作)或接收到通知需要进行界面更新等,则电子设备的帧率控制模块会在感知到上述情况后向SurfaceFlinger下发第一刷新率切换指令,以指示显示屏的屏幕刷新率从第一刷新率切换到第二刷新率。
[0116] S302、SurfaceFlinger接收第一刷新率切换指令,响应于第i个信号周期结束,即第i+1个信号周期开始,会产生一个第一Vsync信号,用于触发SurfaceFlinger进行新的图层合成,并将第一刷新率切换指令下发到显示驱动;并启动Vsync信号校准。
[0117] S303、显示驱动接收第一刷新率切换指令,并将第一刷新率切换指令下发至显示屏。
[0118] S304、显示屏接收第一刷新率切换指令,在第i+1个信号周期内,刷新显示一个图像帧。
[0119] S305、显示屏刷新显示一个图像帧完成,按照第一刷新率切换指令,将显示屏的屏幕刷新率从第一刷新率切换为第二刷新率,按照第二刷新率进行图像帧的刷新显示,并且显示屏按照第二刷新率,周期性地发送第二Vsync信号给显示驱动。
[0120] 通过上述步骤,可以将第二Vsync信号的信号周期从T1切换为第二刷新率f2对应的信号周期T2,每隔一个T2向显示驱动上报一个第二Vsync信号。其中,T2等于第二刷新率的倒数,即T2=1/f2。
[0121] S306、显示驱动周期性地接收来自于显示屏的第二Vsync信号,并向SurfaceFlinger上报接收到的第二Vsync信号。
[0122] S307、SurfaceFlinger周期性地接收第二Vsync信号。若接收到第二Vsync信号的周期(period,即接收到两个相邻的第二Vsync信号的间隔时间)为T2,则SurfaceFlinger确认完成了屏幕刷新率切换,关闭Vsync信号校准。若SurfaceFlinger接收到第二Vsync信号的周期不等于T2,则继续执行步骤S307。
[0123] 这样,SurfaceFlinger确定完成了屏幕刷新率切换后,可以响应于当前的信号周期(第i+2个信号周期)结束,按照Vsync信号校准后的信号周期,即T2,周期性地生成第一Vsync信号。也就是说,第一Vsync信号的信号周期调整为T2。
[0124] 应理解,上述步骤S306中,SurfaceFlinger确认完成了屏幕刷新率切换后,将第一Vsync信号的信号周期调整为T2,这需要在第i+2个信号周期结束才生效,也就是说,SurfaceFlinger在第i+2个信号周期结束才能够以第二刷新率为频率,以T2为周期,周期性生成第一Vsync信号(包括Vsync‑APP信号和Vsync‑SF信号)。
[0125] 示例性地,第一刷新率为10Hz,对应的T1为100ms。第二刷新率为60Hz,对应的T2为16ms。预设刷新率为120Hz,对应的预设周期为8ms。
[0126] 按照上述Android系统原生机制下的屏幕刷新率切换流程,在需要将显示屏的屏幕刷新率从低刷新率(第一刷新率)切换到高刷新率(第二刷新率)时,SurfaceFlinger在接收到第一刷新率切换指令之后,SurfaceFlinger仍需按照当前的信号周期(第i个信号周期)完成当前图像帧的图层合成,在第i个信号周期结束,即第i+1个信号周期开始,会产生一个第一Vsync信号,用于触发新的图层合成,此时才会下发第一刷新率切换指令,并启动Vsync信号校准。而且显示屏接收到该第一刷新率切换指令后,也仍需按照当前的信号周期(第i+1个信号周期)执行一次图像帧刷新显示,才将显示屏的屏幕刷新率从第一刷新率切换为第二刷新率,即将第二Vsync信号的信号周期从T1切换至T2(如16ms),每隔一个T2向显示驱动上报一个第二Vsync信号。SurfaceFlinger接收第二Vsync信号,根据接收到两个第二Vsync信号的间隔时间,判断第二Vsync信号的信号周期是否为T2,若是,则可以确认完成了屏幕刷新率切换。但SurfaceFlinger需要在当前的信号周期(第i+2个信号周期)结束,才能以第二刷新率为频率,以T2为信号周期,生成第一Vsync信号。这样,按照Android系统原生机制下的屏幕刷新率切换流程,整个屏幕刷新率切换过程(从SurfaceFlinger接收到第一刷新率切换指令到SurfaceFlinger按第二刷新率生成第一Vsync信号)至少需要消耗两个信号周期(该信号周期为T1,该两个信号周期即低刷新率下的2帧处理时长)的时间才能完成。
[0127] 例如,第一种情况:SurfaceFlinger在第i个信号周期即将结束时收到第一刷新率切换指令,即图3中所示的t1时刻接近i个信号周期的结束时刻,x1≈0。SurfaceFlinger在第i+1个信号周期一开始就下发第一刷新率切换指令,显示屏在第i+1个信号周期内接收到该第一刷新率切换指令,按照当前的信号周期(第i+1个信号周期)执行完一次图像帧刷新显示,之后将显示屏的屏幕刷新率从第一刷新率切换为第二刷新率,并每隔一个T2向显示驱动上报一个第二Vsync信号。SurfaceFlinger接收第二Vsync信号,根据接收到两个第二Vsync信号的间隔时间,判断第二Vsync信号的信号周期是否为T2,若是,则可以确认完成了屏幕刷新率切换,这时候已经是在第i+2个信号周期内。所以SurfaceFlinger需要在当前的信号周期(第i+2个信号周期)结束(如图3所示的t2时刻),才能以第二刷新率为频率,以T2为信号周期,生成第一Vsync信号。第一种情况是整个屏幕刷新率切换过程需要消耗的时间最短的情况,从SurfaceFlinger接收到第一刷新率切换指令到显示屏的屏幕刷新率从第一刷新率切换为第二刷新率需要经历将近一个信号周期(该信号周期为T1,如T1=100ms,一个信号周期即100ms)的时间,而从SurfaceFlinger接收到第一刷新率切换指令到SurfaceFlinger按第二刷新率生成第一Vsync信号(从t1时刻到t2时刻)需要经历两个信号周期(该信号周期为T1,如T1=100ms,两个信号周期即200ms)的时间。
[0128] 再例如,第二种情况:SurfaceFlinger在第i个信号周期刚开始就收到第一刷新率切换指令,即图3中所示的t1时刻接近i个信号周期的开始时刻,x1≈100。但SurfaceFlinger需要等到当前的信号周期结束,在第i+1个信号周期开始时才下发第一刷新率切换指令,显示屏在第i+1个信号周期内接收到该第一刷新率切换指令,仍需按照当前的信号周期(第i+1个信号周期)执行完一次图像帧刷新显示,之后才将显示屏的屏幕刷新率从第一刷新率切换为第二刷新率,并每隔一个T2向显示驱动上报一个第二Vsync信号。SurfaceFlinger接收第二Vsync信号,判断第二Vsync信号的周期为T2时,可以确认完成了屏幕刷新率切换,这时候已经是在第i+2个信号周期内。所以SurfaceFlinger需要在当前的信号周期(第i+2个信号周期)结束(如图3所示的t2时刻),才能以第二刷新率为频率,以T2为信号周期,生成第一Vsync信号。第二种情况是整个屏幕刷新率切换过程需要消耗的时间最长的情况,从SurfaceFlinger接收到第一刷新率切换指令到显示屏的屏幕刷新率从第一刷新率切换为第二刷新率需要经历将近两个信号周期(该信号周期为T1,如T1=100ms,两个信号周期即200ms)的时间,而从SurfaceFlinger接收到第一刷新率切换指令到SurfaceFlinger按第二刷新率生成第一Vsync信号(从t1时刻到t2时刻)需要经历三个信号周期(该信号周期为T1,如T1=100ms,三个信号周期即300ms)的时间。
[0129] 而如果第一刷新率为1Hz,对应的T1为1000ms。则按照Android系统原生机制下的屏幕刷新率切换流程,整个屏幕刷新率切换过程至少需要经历2000ms,即2s)的时间。
[0130] 因此,在将显示屏的屏幕刷新率由高刷新率切换到低刷新率时,由于高刷新率对应的信号周期较短,屏幕刷新率切换过程耗时较短,不会产生卡顿的问题。但是,在将显示屏的屏幕刷新率由低刷新率切换回高刷新率的处理机制上,根据Android系统的原生机制,最少需要经过在低刷新率下两个周期的时间才能完成整个屏幕刷新率切换过程。例如,显示屏起始的屏幕刷新率为10Hz,则至少需要经过200ms才能整个屏幕刷新率切换过程。再例如,显示屏起始的屏幕刷新率为1Hz,则至少需要经过2s才能整个屏幕刷新率切换过程。屏幕刷新率切换过程耗时较长,切换性能差。在这样的机制下,显示屏的屏幕刷新率切换时可能会产生卡顿,严重影响电子设备的跟手性。
[0131] 其中,电子设备的跟手性能可以体现为用户操作响应延迟的长度。用户操作响应延迟可以理解为从“用户对电子设备进行点击或滑动操作”到“电子设备显示该点击或滑动操作对应的图像被人眼感知”的延迟时间。
[0132] 具体的,用户操作响应延迟越长,跟手性能越差;用户操作响应延迟越短,跟手性能越好。其中,电子设备的跟手性能越好,用户通过点击或滑动操作控制电子设备的使用体验越好,感觉越流畅。
[0133] 基于此,本申请实施例提供一种屏幕刷新率切换方法,该方法可以应用于电子设备,该电子设备包括显示屏。该方法包括:电子设备的SurfaceFlinger接收来自上层(如电子设备的帧率控制模块)的第一刷新率切换指令。该第一刷新率切换指令用于指示显示屏的屏幕刷新率由第一刷新率切换为第二刷新率。其中,第一刷新率小于或等于预设阈值,第二刷新率大于预设阈值。SurfaceFlinger响应于当前的第一Vsync信号的信号周期结束,向电子设备的显示驱动发送第一刷新率切换指令。其中,第一Vsync信号用于触发SurfaceFlinger进行图层合成。第一Vsync信号的信号周期在显示屏的屏幕刷新率为第一刷新率的情况下,被设置为预设周期。该预设周期小于第一刷新率的倒数。显示驱动响应于第一刷新率切换指令,将显示屏的屏幕刷新率由第一刷新率切换为第二刷新率。
[0134] 应理解,上述第一刷新率小于或等于预设阈值,为低刷新率。上述第二刷新率大于预设阈值,为高刷新率。
[0135] 示例性地,本申请上述实施例提供的技术方案可以应用于以下场景:
[0136] 在第一种应用场景下,电子设备的显示屏显示静态图像,显示屏的屏幕刷新率为低刷新率,而此时用户进行点击操作。电子设备响应于用户的点击操作,需要更新显示屏的显示画面,显示屏的屏幕刷新率由第一刷新率切换为第二刷新率。
[0137] 在第二种应用场景下,电子设备的显示屏显示静态图像,显示屏的屏幕刷新率为低刷新率,而此时用户进行滑动操作。电子设备响应于用户的滑动操作,需要更新显示屏的显示画面,显示屏的屏幕刷新率由第一刷新率切换为第二刷新率。
[0138] 在第三种应用场景下,电子设备的显示屏显示静态图像,显示屏的屏幕刷新率为低刷新率,而此时电子设备接收到消息通知,显示屏需要显示弹窗。即需要更新显示屏的显示画面,显示屏的屏幕刷新率由第一刷新率切换为第二刷新率。
[0139] 在第四种应用场景下,电子设备的显示屏显示静态图像,显示屏的屏幕刷新率为低刷新率,而此时显示屏需要显示动画。即需要更新显示屏的显示画面,显示屏的屏幕刷新率由第一刷新率切换为第二刷新率。
[0140] 在上述应用场景及类似场景下,采用本申请上述实施例提供的屏幕刷新率切换方法,由于在电子设备的显示屏显示静态图像时,显示屏的屏幕刷新率为低刷新率时,第一Vsync信号的信号周期被设置为预设周期,SurfaceFlinger按照预设周期运行。这样,在需要将显示屏的屏幕刷新率从低刷新率切换回高刷新率时,SurfaceFlinger可以及时下发第一刷新率切换指令,显示屏也可以及时接收第一刷新率切换指令,并及时响应该第一刷新率切换指令,进行屏幕刷新率切换,因此可以使显示屏快速退出低刷新率,切换回高刷新率,减少了显示屏的屏幕刷新率的切换时间,以保证新的图像帧按高刷新率进行显示,可以保证显示屏滑动效果、动画动效显示流畅等效果,保证用户不会感觉到卡顿,保证用户体验。通过本申请实施例的方法,可以提升电子设备响应用户操作,从低刷新率切换回高刷新率的速度,优化切换性能。从而可以缩短电子设备的用户操作响应延迟,提升电子设备的跟手性能,提升用户体验。
[0141] 电子设备的显示屏在由低刷新率切换回高刷新率之前,是经过了屏幕刷新率切换为低刷新率的阶段。本申请实施例提供的技术方案,可以在显示屏的屏幕刷新率切换为低刷新率的阶段时,就提前做一些准备工作(如在低刷新率下,控制SurfaceFlinger将其信号周期设置为预设周期),以方便电子设备由低刷新率切换到高刷新率时,可以执行本申请实施例的方法(如S601‑S603),以解决相应的技术问题。
[0142] 具体地,参见图4,本申请实施例针对屏幕刷新率切换为低刷新率的场景,提供一种屏幕刷新率切换方法。该方法可以应用于电子设备,该电子设备包括显示屏。该方法包括步骤S401‑S405。
[0143] S401、显示屏接收第二刷新率切换指令。该第二刷新率切换指令用于指示显示屏的屏幕刷新率切换为第一刷新率。其中,第一刷新率小于或等于预设阈值。
[0144] 示例性地,在一些场景下,电子设备的显示屏幕刷新率可以从高刷新率切换到低刷新率。如,由电子设备的刷新率可以由高于第一刷新率的其他刷新率(如第三刷新率)切换为第一刷新率。如,在电子设备由显示动态图像切换为显示静态图像后,显示屏的屏幕刷新率则可以从高刷新率切换到低刷新率,以降低功耗。
[0145] 例如,如果电子设备在一定时长内,没有接收到用户的操作,该电子设备则可以自动显示上述静态图像。此时,上层可以向电子设备的显示屏发送第二刷新率切换指令,以指示显示屏的屏幕刷新率从第三刷新率切换到第一刷新率。此时,显示屏可以接收到上述第二刷新率切换指令。
[0146] 又例如,电子设备播放完动态图像(如视频)后,可以自动显示静态图像。此时,上层可以向电子设备的显示屏发送第二刷新率切换指令,以指示显示屏的屏幕刷新率从第三刷新率切换到第一刷新率。显示屏可以接收到上述第二刷新率切换指令。
[0147] 当然,显示屏的屏幕刷新率从高刷新率切换到低刷新率的场景包括但不限于上述示例中示出的情况,其他的情况本申请实施例这里不予赘述。
[0148] S402、显示屏响应于第二刷新率切换指令,将显示屏的屏幕刷新率切换为预设刷新率,按照预设周期,通过显示驱动向SurfaceFlinger发送第二Vsync信号。其中,预设周期等于预设刷新率的倒数,预设刷新率大于预设阈值。第二Vsync信号用于触发显示屏刷新显示图像帧。
[0149] S403、SurfaceFlinger接收来自显示驱动的第二Vsync信号。
[0150] S404、SurfaceFlinger判断从显示驱动接收第二Vsync信号的周期(即第二信号周期)是否等于预设周期。
[0151] 若从显示驱动接收第二Vsync信号的周期(即第二信号周期)等于预设周期,则执行步骤S404。若从显示驱动接收第二Vsync信号的周期(即第二信号周期)不等于预设周期,则继续执行步骤403。
[0152] S405、SurfaceFlinger将第一Vsync信号的信号周期设置为预设周期,并停止接收来自显示驱动的第二Vsync信号。其中,第一Vsync信号用于触发SurfaceFlinger进行图层合成。
[0153] 也就是说,显示屏接收到该第二刷新率切换指令,可以响应于该第二刷新率切换指令,在将显示屏的屏幕刷新率切换为低刷新率之前,先将显示屏的屏幕刷新率切换为预设刷新率。这样,显示屏可以按照预设周期,向SurfaceFlinger发送第二Vsync信号(即每隔一个预设周期,通过显示驱动上报一个第二Vsync信号给SurfaceFlinger)。该第二Vsync信号可以用于SurfaceFlinger进行Vsync信号校准,用于实现第一Vsync信号与第二Vsync信号保持周期同步。SurfaceFlinger完成Vsync信号校准后,可以按照预设周期运行,即第一Vsync信号的信号周期为预设周期。这样,在后续接收到新的刷新率切换指令(如第一刷新率切换指令)时,能够及时将刷新率切换指令下发。
[0154] 在一些实施例中,显示屏响应于所述第二刷新率切换指令,在预设时长后将显示屏的屏幕刷新率切换为所述第一刷新率。
[0155] 应理解,显示屏响应于第二刷新率切换指令,在预设时长后,SurfaceFlinger已经完成了Vsync信号校准,此时可以将显示屏的屏幕刷新率切换为第一刷新率,即减小显示屏刷新显示图像帧的频率,以节省电能和CPU资源。而SurfaceFlinger这时候已经关闭Vsync信号校准,SurfaceFlinger继续按照预设周期运行。需要说明的是,SurfaceFlinger虽然按照预设周期运行,但是如果是显示静态图像,显示屏需要显示内容是静态的,那么显示区域内的Surface内容没有更新,SurfaceFlinger也不需要进行合成操作。APP也不需要进行图层绘制和图层渲染操作。所以SurfaceFlinger按照预设周期运行,并不会增加图层合成操作的能耗。
[0156] 在一些实施例中,预设阈值可以是30Hz。该预设阈值可以根据电子设备对于显示屏的屏幕刷新率切换性能要求确定。
[0157] 在一些实施例中,预设刷新率是显示屏支持的一个屏幕刷新率。
[0158] 在一些实施例中,预设刷新率可以是120Hz,预设刷新率的倒数即预设周期为8ms。第一刷新率可以是10Hz或1Hz,第一刷新率的倒数T1为100ms或1s。第二刷新率可以是60Hz、
90Hz或120Hz,第二刷新率的倒数T2为16ms、11ms或8ms。
[0159] 应理解,上述步骤S401中的第二刷新率切换指令是由SurfaceFlinger下发至显示屏的。例如,电子设备(如电子设备的帧率控制模块)在判断显示内容没有更新时,可以通过SurfaceFlinger、HWC、显示驱动将第二刷新率切换指令依次下发至显示屏(如显示屏的显示驱动芯片)。
[0160] 在一些实施例中,SurfaceFlinger可以接收来自于上层的第二刷新率切换指令,并响应于第二刷新率切换指令,开始接收来自于下层的第二Vsync信号,并下发第二刷新率切换指令给显示屏。
[0161] 也就是说,SurfaceFlinger可以在接收到第二刷新率切换指令后,即SurfaceFlinger在确定需要进行屏幕刷新率切换的时候,开始接收来自于下层的第二Vsync信号,即开启Vsync信号校准。这样,SurfaceFlinger可以根据接收第二Vsync信号的周期(也就是第二Vsync信号的信号周期)。判断是否完成了屏幕刷新率切换,进而完成Vsync信号校准,即调整SurfaceFlinger产生第一Vsync信号的周期(也就是第一Vsync信号的信号周期,该第一Vsync信号可以包括Vsync‑APP信号和Vsync‑SF信号),使第一Vsync信号的信号周期等于第二Vsync信号的信号周期。SurfaceFlinger完成Vsync信号校准后,可以关闭硬件Vsync校准,即停止接收来自显示驱动的第二Vsync信号。此时,SurfaceFlinger可以按照完成Vsync信号校准后的信号周期,周期性地生成第一Vsync信号,以控制APP进行绘制和渲染,以及SurfaceFlinger进行绘制的周期。这样,SurfaceFlinger可以确认显示屏的屏幕刷新率已经切换为预设刷新率,SurfaceFlinger按照预设周期运行,以与显示屏的屏幕刷新率同步。如果之后再接收到新的刷新率切换指令(如第一刷新率切换指令),SurfaceFlinger可以快速响应该新的刷新率切换指令,在当前的预设周期结束后就将该新的刷新率切换指令下发,由此可以让显示屏快速从低刷新率切换回高刷新率。
[0162] 示例性地,在一应用场景下,在电子设备由显示动态图像切换为显示静态图像后,该显示屏的屏幕刷新率需要从60Hz切换到10Hz。参见图5,如图5所示,该屏幕刷新率切换过程可以采用上述实施例提供的屏幕刷新率切换方法(如步骤S401‑S405),对应的电子设备各部分之间的信号传输流程可以包括S501‑S507。
[0163] S501、SurfaceFlinger在第i个信号周期内,接收来自于上层(如帧率控制模块)的第二刷新率切换指令。该第二刷新率切换指令用于指示显示屏的屏幕刷新率从60Hz切换到10Hz。
[0164] 其中,信号周期是指第一Vsync信号的信号周期。在本实施例中该信号周期为16ms。
[0165] S502、SurfaceFlinger响应于第i个信号周期结束(即第i+1个信号周期开始),下发该第二刷新率切换指令给显示驱动,并开启Vsync信号校准。
[0166] 例如,SurfaceFlinger响应于第i个信号周期结束,通过HWC下发该第二刷新率切换指令给显示驱动。
[0167] S503、显示驱动在收到第二刷新率切换指令后,下发该第二刷新率切换指令给显示屏(如显示屏的显示驱动芯片)。
[0168] S504、显示屏接收第二刷新率切换指令。
[0169] S505、显示屏根据第二刷新率切换指令,先将显示屏的屏幕刷新率切换为120Hz,按照8ms的周期进行图像帧的刷新显示,并且显示屏按照8ms的周期,周期性地发送第二Vsync信号给显示驱动(即每隔8ms向显示驱动上报一个第二Vsync信号)。
[0170] S506、显示驱动周期性地接收来自于显示屏的第二Vsync信号,并向SurfaceFlinger上报接收到的第二Vsync信号。
[0171] S507、SurfaceFlinger周期性地接收第二Vsync信号,根据接收到第二Vsync信号的周期(即接收到两个相邻的第二Vsync信号的间隔时间),判断第二Vsync信号的信号周期是否为8ms,若是则可以确定完成了屏幕刷新率切换,关闭Vsync信号校准。若第二Vsync信号的周期不等于8ms,则继续执行步骤507。
[0172] 应理解,SurfaceFlinger确定完成了屏幕刷新率切换后,响应于当前的信号周期(16ms)结束,就可以按照Vsync信号校准后的信号周期,即8ms的信号周期,周期性地生成第一Vsync信号。也就是说,第一Vsync信号的信号周期调整为8ms。
[0173] 应理解,显示屏响应于第二刷新率切换指令,在预设时长后将显示屏的屏幕刷新率切换为10Hz。
[0174] 在一些应用场景下,显示屏的屏幕刷新率切换到低刷新率后,接收到用户操作(例如点击或滑动操作)或接收到通知等,显示屏的屏幕刷新率需要切换回高刷新率。参见图6,本申请实施例针对上述应用场景,提供一种屏幕刷新率切换方法。该方法可以应用于电子设备,该电子设备包括显示屏。该方法包括步骤S601‑S603。
[0175] S601、电子设备的SurfaceFlinger接收来自上层的第一刷新率切换指令。该第一刷新率切换指令用于指示显示屏的屏幕刷新率由第一刷新率切换为第二刷新率。其中,第一刷新率小于或等于预设阈值,第二刷新率大于预设阈值。
[0176] S602、SurfaceFlinger响应于当前的第一Vsync信号的信号周期结束,向显示驱动发送第一刷新率切换指令。其中,第一Vsync信号用于触发SurfaceFlinger进行图层合成。第一Vsync信号的信号周期在显示屏的屏幕刷新率为第一刷新率的情况下,被设置为预设周期。该预设周期小于第一刷新率的倒数。
[0177] S603、显示驱动响应于第一刷新率切换指令,将显示屏的屏幕刷新率由第一刷新率切换为第二刷新率。
[0178] 应理解,若电子设备在第j个第一Vsync信号的信号周期内接收到用户操作(例如点击或滑动操作)或接收到通知等需要进行界面更新,电子设备(如电子设备的帧率控制模块)可以在感知到上述情况后,向SurfaceFlinger发送第一刷新率切换指令。SurfaceFlinger可以通过HWC、显示驱动将第一刷新率切换指令依次下发至显示屏(如显示屏的显示驱动芯片),以指示将显示屏的屏幕刷新率从第一刷新率切换到第二刷新率。该第二刷新率大于第一刷新率。
[0179] 上述技术方案中,在电子设备的显示屏的屏幕刷新率为第一刷新率(低刷新率)的情况下,第一Vsync信号的信号周期被设置为预设周期。这样,在需要将显示屏的屏幕刷新率从第一刷新率(低刷新率)切换到第二刷新率(高刷新率)时,SurfaceFlinger可以当前的第一Vsync信号的信号周期(预设周期)结束就下发第一刷新率切换指令,由于预设周期小于第一刷新率的倒数,相对于Android系统的原生机制下SurfaceFlinger需要等到一个长度为第一刷新率的倒数的周期结束才能下发第一刷新率切换指令,SurfaceFlinger下发第一刷新率切换指令的及时性提高了,这样显示屏也可以及时接收第一刷新率切换指令,并及时响应该第一刷新率切换指令,进行屏幕刷新率切换,由此减少了显示屏的屏幕刷新率的切换时间,避免了卡顿,提升了电子设备的跟手性,提升了用户体验。
[0180] 在一些实施例中,在显示驱动响应于第一刷新率切换指令,将显示屏的屏幕刷新率由第一刷新率切换为第二刷新率之后,该方法还包括:显示驱动按照第一信号周期,向SurfaceFlinger发送第二Vsync信号,以向SurfaceFlinger指示显示屏的屏幕刷新率。其中,第二Vsync信号用于触发显示屏刷新显示图像帧,第一信号周期等于第二刷新率的倒数。
[0181] 也就是说,显示屏的屏幕刷新率由第一刷新率切换为第二刷新率之后,显示驱动按照第一信号周期(即第二刷新率的倒数),周期性地向SurfaceFlinger发送第二Vsync信号,用于SurfaceFlinger进行Vsync信号校准。这样,SurfaceFlinger可以根据接收到第二Vsync信号的周期,来确定显示屏的屏幕刷新率已经切换为了第二刷新率,SurfaceFlinger就可以按照第二刷新率的倒数,周期性地生成第一Vsync信号。由此,可以实现第一Vsync信号与第二Vsync信号保持周期同步。
[0182] 示例性地,在一应用场景下,显示屏的屏幕刷新率切换到10Hz后,接收到用户操作(例如点击或滑动操作),显示屏的屏幕刷新率需要从10Hz切换回60Hz。参见图7,如图7所示,该屏幕刷新率切换过程可以采用上述实施例提供的屏幕刷新率切换方法(如步骤S601‑S603),对应的电子设备各部分之间的信号传输流程可以包括:
[0183] S701、SurfaceFlinger在第j个信号周期内,即如图7所示的t3时刻,接收来自于上层(如电子设备的帧率控制模块)的第一刷新率切换指令。
[0184] 其中,信号周期是指第一Vsync信号的信号周期。本实施例中,该信号周期为8ms。
[0185] S702、SurfaceFlinger响应于第j个信号周期结束(第j+1个信号周期开始),下发该第一刷新率切换指令给显示驱动(例如,通过HWC下发该第二刷新率切换指令给显示驱动),并开启Vsync信号校准。
[0186] S703、显示驱动在收到第一刷新率切换指令后,下发该第一刷新率切换指令给显示屏(如显示屏的显示驱动芯片)。
[0187] S704、显示屏接收第一刷新率切换指令。
[0188] S705、显示屏根据第一刷新率切换指令,驱动显示屏完成屏幕刷新率切换,即将显示屏的屏幕刷新率从第一刷新率切换为第二刷新率,按照第二刷新率进行图像帧的刷新显示,并且显示屏按照第二刷新率,周期性地发送第二Vsync信号给显示驱动(每隔一个第一信号周期向显示驱动上报一个第二Vsync信号)。
[0189] S706、显示驱动周期性地接收来自于显示屏的第二Vsync信号,并向SurfaceFlinger上报接收到的第二Vsync信号。
[0190] S707、SurfaceFlinger周期性地接收第二Vsync信号,根据接收到第二Vsync信号的周期(即接收到两个相邻的第二Vsync信号的间隔时间),判断第二Vsync信号的信号周期是否为16ms,若是则可以确定完成了屏幕刷新率切换,关闭Vsync信号校准。若第二Vsync信号的周期不等于16ms,则继续执行步骤707。
[0191] 应理解,SurfaceFlinger确定完成了屏幕刷新率切换后,可以响应于当前的信号周期(8ms)结束,即如图7所示的t4时刻,按照Vsync信号校准后的信号周期,即16ms,周期性地生成第一Vsync信号。也就是说,第一Vsync信号的信号周期调整为16ms。
[0192] 基于上述实施例提供的技术方案,在电子设备的显示屏显示静态图像,显示屏的屏幕刷新率为第一刷新率(低刷新率)时,对应的显示屏刷新显示图像帧的周期为第一刷新率的倒数T1,而SurfaceFlinger设置预设刷新率模式,按照预设刷新率(如120Hz)运行,即第一Vsync信号的信号周期为预设周期。该预设周期小于第一刷新率的倒数T1。这样,在需要将显示屏的屏幕刷新率由第一刷新率切换到第二刷新率(高刷新率)时,SurfaceFlinger在接收到第一刷新率切换指令之后,可以在当前的信号周期结束就下发第一刷新率切换指令,并启动Vsync信号校准。而且显示屏接收到该第一刷新率切换指令后,就可以立即将显示屏的屏幕刷新率从第一刷新率切换为第二刷新率,由此将第二Vsync信号的周期从第一刷新率的倒数T1切换为第二刷新率的倒数T2,每隔一个第二刷新率的倒数T2向显示驱动上报一个第二Vsync信号。SurfaceFlinger接收第二Vsync信号,根据接收到两个第二Vsync信号的间隔时间,判断第二Vsync信号的信号周期是否为,若是,则可以确认完成了屏幕刷新率切换。SurfaceFlinger可以在确认完成了屏幕刷新率切换,且当前的信号周期结束,就以第二刷新率为频率,以第二刷新率的倒数T2为周期,生成第一Vsync信号。相对于Android原生Vsync机制,大大优化了切换性能,提高了跟手性。
[0193] 示例性地,第一刷新率为10Hz,第一刷新率的倒数T1为100ms。第二刷新率为60Hz,第二刷新率的倒数T2为16ms。预设刷新率为120Hz,预设刷新率的倒数即预设周期为8ms。
[0194] 例如,第一种情况:SurfaceFlinger在第j个信号周期即将结束时收到第一刷新率切换指令,即图7中所示的t3时刻接近j个信号周期的结束时刻,x2≈0。SurfaceFlinger在第j+1个信号周期一开始就下发第一刷新率切换指令,显示屏在第j+1个信号周期内接收到该第一刷新率切换指令,将显示屏的屏幕刷新率从第一刷新率切换为第二刷新率,并每隔一个第二刷新率的倒数T2向显示驱动上报一个第二Vsync信号。SurfaceFlinger接收第二Vsync信号,根据接收到两个第二Vsync信号的间隔时间,判断第二Vsync信号的信号周期是否为第二刷新率的倒数T2,若是,则可以确认完成了屏幕刷新率切换,这时候已经是在第j+3个信号周期内。所以SurfaceFlinger需要在当前的信号周期(第j+3个信号周期)结束,才能以第二刷新率为频率,以第二刷新率的倒数T2为周期,生成第一Vsync信号。第一种情况是整个屏幕刷新率切换过程需要消耗的时间最短的情况,从SurfaceFlinger接收到第一刷新率切换指令到显示屏的屏幕刷新率从第一刷新率切换为第二刷新率只需要经历不到一个信号周期(该信号周期为预设周期,即8ms)的时间,而从SurfaceFlinger接收到第一刷新率切换指令到SurfaceFlinger按新的刷新率生成第一Vsync信号(从t3时刻到t4时刻)只需要经历三个信号周期(该信号周期为预设周期,即8ms),共24ms的时间。
[0195] 再例如,第二种情况:SurfaceFlinger在第j个信号周期刚开始就收到第一刷新率切换指令,即图7中所示的t3时刻接近j个信号周期的开始时刻,x2≈8。但SurfaceFlinger需要等到当前的信号周期结束,在第j+1个信号周期开始时才下发第一刷新率切换指令,显示屏在第j+1个信号周期内接收到该第一刷新率切换指令,将显示屏的屏幕刷新率从第一刷新率切换为第二刷新率,并每隔一个第二刷新率的倒数T2向显示驱动上报一个第二Vsync信号。SurfaceFlinger接收第二Vsync信号,判断第二Vsync信号的周期为第二刷新率的倒数T2时,可以确认完成了屏幕刷新率切换,这时候已经是在第j+3个信号周期内。所以SurfaceFlinger需要在当前的信号周期(第j+3个信号周期)结束,才能以第二刷新率为频率,以第二刷新率的倒数T2为周期,生成第一Vsync信号。第二种情况是整个屏幕刷新率切换过程需要消耗的时间最长的情况,但从SurfaceFlinger接收到第一刷新率切换指令到显示屏的屏幕刷新率从第一刷新率切换为第二刷新率只需要经历不到两个信号周期(该信号周期为预设周期,即8ms,两个信号周期即16ms)的时间,而从SurfaceFlinger接收到第一刷新率切换指令到SurfaceFlinger按新的刷新率生成第一Vsync信号(从t3时刻到t4时刻)只需要经历四个信号周期(该信号周期为预设周期),共32ms的时间。
[0196] 综上所述,在设置预设刷新率为120Hz的情况下,本申请实施例提供的技术方案相对于Android系统原生机制下的屏幕刷新率切换流程,优化切换耗时的效果如表1所示。
[0197] 表1
[0198]
[0199] 在一些实施例中,第一刷新率为显示屏显示静态图像时的目标刷新率。
[0200] 在一些实施例中,第一刷新率切换指令是电子设备在显示静态图像的情况下,接收到通知或用户操作后触发的。其中,通知或用户操作用于触发电子设备更新界面。
[0201] 也就是说,电子设备在显示静态图像的情况下,若接收到通知或用户操作后,可以触发第一刷新率切换指令,从而控制显示屏的屏幕刷新率从第一刷新率(低刷新率)切换到第二刷新率(高刷新率)。
[0202] 在一些实施例中,第二刷新率切换指令是电子设备由显示动态图像切换为显示静态图像时触发的。
[0203] 也就是说,电子设备由显示动态图像切换为显示静态图像时,可以触发第二刷新率切换指令,以控制显示屏的屏幕刷新率切换到第一刷新率(低刷新率),以降低功耗。
[0204] 参见图8A,如图8A所示,在一些实施例中,本申请实施例提供的屏幕刷新率切换方法,在上述步骤S601之前,还可以包括步骤S401‑S405。
[0205] 也就是说,可以采用本申请实施例提供的屏幕刷新率切换方法,将显示屏的屏幕刷新率可以从某一刷新率(如第三刷新率)切换为低刷新率,再从低刷新率切换到高刷新率。
[0206] 示例性地,在显示屏的屏幕刷新率为第三刷新率的情况下,响应于电子设备由显示动态图像切换为显示静态图像,显示屏的屏幕刷新率由第三刷新率切换至第一刷新率,并设置第一Vsync信号的信号周期为预设周期。其中,第三刷新率大于第一刷新率,且第一刷新率小于或等于预设阈值,预设周期小于第一刷新率的倒数。具体实现过程可以参见上述步骤S401‑S405,在此不予赘述。应理解,相应地,步骤S401中第二刷新率切换指令用于指示显示屏的屏幕刷新率从第三刷新率切换到第一刷新率。上述第三刷新率可以等于第二刷新率。之后,响应于电子设备由显示静态图像切换为显示动态图像,电子设备的SurfaceFlinger可以接收到第一刷新率切换指令。该第一刷新率切换指令用于指示显示屏的屏幕刷新率由第一刷新率切换为第二刷新率。该第二刷新率大于预设阈值。响应于当前的第一Vsync信号的信号周期结束,SurfaceFlinger向电子设备的显示驱动发送第一刷新率切换指令。其中,第一Vsync信号用于触发SurfaceFlinger进行图层合成。显示驱动响应于第一刷新率切换指令,将显示屏的屏幕刷新率由第一刷新率切换为第二刷新率。具体实现过程可以参见上述步骤S601‑S603,在此不予赘述。
[0207] 示例性地,参见图8B,图8B示出了上述实施例提供的屏幕刷新率切换方法中步骤S401‑S405,以及步骤S601‑S603对应的信号传输流程。图8B左边所示为将显示屏的屏幕刷新率从高刷新率(如60Hz,对应的信号周期为16ms)切换至低刷新率(如10Hz,对应的信号周期为100ms)对应的信号传输流程,具体步骤为S801‑S807,该步骤S801‑S807的具体执行过程参见上述步骤S501‑S507,在此不进行赘述。图8B右边所示为将显示屏的屏幕刷新率从低刷新率(如10Hz,对应的信号周期为100ms)切换至高刷新率(如60Hz,对应的信号周期为16ms)对应的信号传输流程,具体步骤为S811‑S817,该步骤S811‑S817的具体执行过程参见上述步骤S701‑S707,在此不进行赘述。
[0208] 应理解,上述步骤S402中,显示屏接收第二刷新率切换指令,并响应于第二刷新率切换指令,将显示屏的屏幕刷新率切换为预设刷新率,按照预设周期向SurfaceFlinger发送第二Vsync信号,以便SurfaceFlinger完成Vsync信号校准,在步骤S405中将第一Vsync信号的周期设置为预设周期。在显示屏响应所述第二刷新率切换指令的预设时长后,显示屏的屏幕刷新率切换为第一刷新率(如10Hz),也就是图8B所示的延迟一定时间后,切换到100ms。这样,显示屏可以以低刷新率显示静态图像,节省电能和CPU资源。
[0209] 应理解,在需要将显示屏的屏幕刷新率从一个高刷新率切换为另一个高刷新率的场景下,例如从90Hz切换为60Hz,或者从60Hz切换为90Hz的场景下,依然可以采用Android系统原生机制下的屏幕刷新率切换方法。
[0210] 在一些实施例中,显示驱动可以设置真实刷新率(第一刷新率,如10Hz或1Hz)模式(或称档位)和模拟刷新率模式。模拟刷新率模式对应一个模拟的刷新率和一个真实的刷新率,其中模拟的刷新率(即预设刷新率)为高刷新率(如120Hz),真实的刷新率为低刷新率(10Hz或1Hz)。显示驱动可以将其支持的刷新率模式通过HWC上报给SurfaceFlinger和/或帧率控制模块。SurfaceFlinger和/或帧率控制模块可以根据刷新率模式中的各刷新率的标识(id)属性,确定各刷新率为真实的刷新率还是模拟的刷新率。例如,帧率控制模块可以通过Display.getSupportedModes()查询显示驱动获取其所支持的刷新率模式,显示驱动可以响应该查询请求,并将其支持的刷新率模式通过HWC上报给帧率控制模块。
[0211] 如图9所示,图9为本申请实施例提供的一种屏幕刷新率切换方法中各模块交互流程图。
[0212] 示例性地,如图9中实线箭头所示的信号传输流程。显示驱动设置模拟刷新率模式(模拟120Hz模式),该模拟120Hz模式对应一个模拟的120Hz刷新率和一个真实的10Hz或1Hz刷新率。显示驱动可以将其支持模拟120Hz模式的信息通过HWC上报给SurfaceFlinger。
[0213] 示例性地,如图9中虚线箭头所示的信号传输流程,该信号传输流程对应上述的步骤S501‑S505。在电子设备的帧率控制模块检测到电子设备由显示动态图像切换为显示静态图像后,其控制显示屏的屏幕刷新率切换到10Hz(或1Hz)。流程为:帧率控制模块向SurfaceFlinger发送显示屏的屏幕刷新率切换为模拟120Hz模式的指令(如第二刷新率切换指令)。SurfaceFlinger在收到帧率控制模块发送的第二刷新率切换指令后,可以通过HWC向显示驱动下发第二刷新率切换指令。应理解,显示驱动收到第二刷新率切换指令后,根据该指令中的刷新率的id属性,可以知道该第二刷新率切换指令中的模拟120Hz模式对应一个模拟的120Hz刷新率和一个真实的10Hz或1Hz刷新率。这样,显示驱动收到第二刷新率切换指令后,先将显示屏的屏幕刷新率切换为120Hz,以便SurfaceFlinger完成Vsync信号校准,即将第一Vsync信号的信号周期调整为8ms(即1/120ms)。显示驱动在预设时长后再将显示屏的屏幕刷新率切换为10Hz或1Hz,以节省电能和CPU资源。
[0214] 示例性地,如图9中点划线箭头所示的信号传输流程,该信号传输流程对应上述的步骤S701‑S705。电子设备的帧率控制模块检测到当前显示场景为用户进行点击、滑动操作,或出现弹窗通知时,帧率控制模块向SurfaceFlinger发送切换显示屏的屏幕刷新率为60Hz、90Hz或120Hz的指令(如第一刷新率切换指令)。SurfaceFlinger在帧率控制模块发送的第一刷新率切换指令时,可以通过HWC向显示驱动下发第一刷新率切换指令。显示驱动收到第一刷新率切换指令后,将显示屏的屏幕刷新率切换为60Hz、90Hz或120Hz。
[0215] 本申请一些实施例提供了一种电子设备,该电子设备可以包括:显示屏、存储器和一个或多个处理器。该显示屏、存储器和处理器耦合。该存储器用于存储计算机程序代码,该计算机程序代码包括计算机指令。当处理器执行计算机指令时,电子设备可执行上述方法实施例中电子设备执行的各个功能或者步骤。该电子设备的结构可以参考图2B所示的电子设备200的结构。
[0216] 本申请实施例还提供一种芯片系统,如图10所示,该芯片系统包括至少一个处理器1001和至少一个接口电路1002。处理器1001和接口电路1002可通过线路互联。例如,接口电路1002可用于从其它装置(例如电子设备的存储器)接收信号。又例如,接口电路1002可用于向其它装置(例如处理器1001或者电子设备的触摸屏)发送信号。示例性的,接口电路1002可读取存储器中存储的指令,并将该指令发送给处理器1001。当所述指令被处理器
1001执行时,可使得电子设备执行上述实施例中的各个步骤。当然,该芯片系统还可以包含其他分立器件,本申请实施例对此不作具体限定。
[0217] 本申请实施例还提供一种计算机存储介质,该计算机存储介质包括计算机指令,当所述计算机指令在上述电子设备上运行时,使得该电子设备执行上述方法实施例中电子设备执行的各个功能或者步骤。
[0218] 本申请实施例还提供一种计算机程序产品,当所述计算机程序产品在计算机上运行时,使得所述计算机执行上述方法实施例中电子设备执行的各个功能或者步骤。
[0219] 通过以上实施方式的描述,所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。
[0220] 在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个装置,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0221] 所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是一个物理单元或多个物理单元,即可以位于一个地方,或者也可以分布到多个不同地方。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0222] 另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
[0223] 所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该软件产品存储在一个存储介质中,包括若干指令用以使得一个设备(可以是单片机,芯片等)或处理器(processor)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(read only memory,ROM)、随机存取存储器(random access memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
[0224] 以上内容,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何在本申请揭露的技术范围内的变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。