历史上的今天
今天是:2024年10月10日(星期四)
2020年10月10日 | 一加 创新了UI绘图优化方法
2020-10-10 来源:爱集微
近日,EISA(欧洲影音协会)颁布年度大奖,其中,由于一加8提高了高端智能手机的门槛,展示了尖端硬件技术如何与华丽的产品设计相契合,因此,一加8被评为最佳智能手机。
而除了一加8所搭载的强劲的晓龙865处理器、120Hz屏幕刷新以及快充技术、后置四摄等,一加在软件方面的优化也是其能够获得这项大奖的原因之一。
我们平时在使用手机时看到显示屏幕上的画面,实际上时经历了一个非常复杂的过程才出现在我们的面前,其中需要手机处理器进行大量的运算,以及需要UI绘图渲染进程进行大量的绘图渲染,才能够完成复杂的显示任务。
非常直观的体验就是,在使用手机的过程中,有时往往会遇到掉帧、卡顿等情况,甚至不同的手机采用一样的处理器,有些手机容易发生卡顿,而有些手机就不容易,这就是软件的优化所带来的影响。今天要介绍的就是一加在19年3月29日申请的一项名为“UI绘图方法、装置和移动终端”的发明专利(申请号:201910251998.5),申请人为深圳市万普拉斯科技有限公司。
根据目前该专利公开的资料,让我们一起来看看一加的这项UI优化方法吧。

如上图,为该专利发明的UI绘图方法的流程示意图,首先,系统中专门用于绘图的部件开始接收绘图任务(就是我们需要手机显示画面),并启动主绘图线程以及额外的绘图线程。
而我们在手机上屏幕上看到的画面,实际上并不是直接出现在屏幕上的,而是需要在运行各种程序时生成一组绘图命令来进行绘图任务,通过这个命令来控制绘图线程进行绘图任务,其中对于主线程和额外线程的分配方法如下图所示:

这种分配方法分为两个步骤,首先将上传绘图材质操作、帧缓冲绘制操作以及字型点阵图准备操作,分配给一个预先建立的额外绘图线程。其次,将减少过度绘制操作分配给主绘图线程。
这样,绘图任务中的主绘图线程,就可以通过执行这种减少过度绘制操作来减少同一像素上的重复绘制和渲染,从而避免多余操作导致绘图超时而导致的掉帧现象。
我们接着回到UI绘图方法的主流程中,结合主线程和额外线程的分配方法,可知在系统中会预先设置减少过度绘制的策略,这也就是减少同一像素重复绘制的操作。而绘图任务的主绘图线程可以利用这种策略来对绘图任务每帧的操作进行检查,从中筛选出每帧绘图中可以省略的操作。
最后,当去除掉这些可省略的操作后,就可以获得最优绘图操作,并最终按照最优绘图操作来进行绘图。

我们再来看看这种UI绘图方法的可省操作筛选的流程示意图,这个过程也包括两个步骤,首先要针对每一帧绘图中所有图层,通过主绘图线程由近到远筛选出每帧绘图任务中需要被下一图层覆盖的绘图(也就是发生变化的画面),并需要判断下一图层是否为不透明图层(也就是判断下一图层是不是会将当前图层覆盖)。
如果下一图层为不透明时,就可以确定下一图层覆盖的绘图范围,并根据被覆盖的范围确定每帧绘图中可以省略的操作。
例如绘图任务中包括有绘制文字、绘制栅格以及绘制帧缓冲图层等任务时,就可以通过建立额外线程去执行绘制任务所需的操作。然后通过主绘图线程判断这些任务是否可以省略,最终由主绘图线程进行绘图。
以上就是一加发明的UI绘图方法,该方法通过去除绘图任务中每帧可省略的步骤,以此来获得最优绘图操作,并按照这种最优操作进行绘图。从而在利用多线程进行绘图时,提高了主绘图线程的绘图效率,也增加了绘图速度和显示帧率。
史海拾趣
|
本帖最后由 jameswangsynnex 于 2015-3-3 19:57 编辑 北京慧峰腾达科技发展有限公司 专业代理销售功率元器件:电源模块,功率模块,GTR、IGBT、IPM、PIM、可控硅,整流桥模块,进口快速熔断器,电解电容。欢迎订购,电话: 13641266198,010-6293480 ...… 查看全部问答> |
|
电源逆变器的制造工艺问答 1. 电源逆变器的持续输出功率与峰值输出功率有什么不同? 持续功率和峰值功率因其表达的意义而不同。 持续负载=电流值×220(交流电压) 启动负载=2×功率值 一般而言,电器或电动工具的启动负载决定了您的电源 ...… 查看全部问答> |
|
vs2005,模拟器是ce6的,F5启动一个winmain,部署成功,但是启动报错,为什么? “无法启动程序.... 管道的另一段上无任何进程” 部署已经成功了,我看模拟器里已经有exe了 控制台日志: INFO: WAVEDEV.DLL: SetI2SClockRate: Using processor frequency reported by the OAL (50750000). Prescal ...… 查看全部问答> |
|
ToolBar上面的button能gray,但是不能disabled,为什么 采用的是evc4,CceCommandBar,但是不管是使用EnableButton(ID_BUTTON,FALSE)还是SetState(ID_BUTTON,TBSTATE_INDETERMINATE ),结果Button只是gray,但是还是Enabled.请问这是怎么回事? 另外采用SHCreateMenuBar和SHFS_HIDESIPBUTTON可以创建没有s ...… 查看全部问答> |
|
用C#在Pocket PC上播放.wav声音文件,可是听不到任何声音? 想在Pocket PC上写一个程序,用C#播放一个.wav文件当作提示音,可是听不到任何的声音。 代码如下所示,这段代码是直接从MSDN拷贝过来的,但在我的Pocket PC上运行过这段代码却放不出声音,在Visual Stadio 2005的pocket PC 2003 SE 模拟器上可以 ...… 查看全部问答> |
|
本人新来社区,希望大家给予帮助。 问题是:现在用VHDL设计数字频率计,计数器在每个分档处该如何记数?请高手指教,如有程序更好,谢谢!… 查看全部问答> |
|
买了块利尔达的开发板,想用KEIL 编译环境下的自带操作系统进行任务调度,在配置文件上,将rtx_config.c 文件复制到工程里,在跑程序的时候,操作系统只进行到初始化那一步,而没有去执行任务,不知道怎么回事,求教大虾指点,急得冒油了! #inc ...… 查看全部问答> |




