System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本申请涉及互联网应用,特别是涉及一种缓冲区分配方法、装置、电子设备及存储介质。
技术介绍
1、在应用系统中启动新的应用、新的程序时,需要为其创建新的窗口(window)。在窗口不透明的情况下,会在布局流程中增加为该窗口对应的表面surface分配内存缓冲区的任务,以使得应用的渲染线程利用该缓冲区完成该窗口的绘制。实际应用中,为surface分配缓冲区的任务需要在渲染线程之外建立新的线程,使得分配缓冲区的任务在新线程中与渲染线程并行处理,以提高渲染线程的执行效率。
2、然而,当应用系统的负载过高时,由于渲染线程在应用系统中的执行优先级较高,用于执行分配缓冲区任务的新线程的执行优先级较低,新线程将会被自动延迟执行,无法及时为surface分配缓冲区,而得不到缓冲区分配的渲染线程只能进入休眠状态,直至缓冲区分配完成才能够唤醒,进行后续的绘制处理,渲染线程会因此陷入阻塞。而渲染线程阻塞的直接结果体现在新窗口出现后的第一帧显示耗时变长,给使用者带来应用系统响应慢、卡顿等感受。
技术实现思路
1、本申请实施例的目的在于提供一种缓冲区分配方法、装置、电子设备及存储介质,以实现提高图像的选取质量。具体技术方案如下:
2、第一方面,本申请实施例提供了一种缓冲区分配方法,所述方法包括:
3、在需要为窗口绘制任务分配缓冲区时,获取当前系统负载;
4、在当前系统负载超过预设负载阈值的情况下,在渲染线程中串行调用缓冲队列生成器类的分配缓冲区函数,通过所述分配缓
5、本申请的一个实施例中,在所述获取当前系统负载之前,所述方法还包括:
6、获取窗口创建任务;
7、在所述窗口创建任务对应的窗口不透明的情况下,创建窗口绘制任务。
8、本申请的一个实施例中,所述在所述窗口创建任务对应的窗口不透明的情况下,创建窗口绘制任务,包括:
9、基于所述窗口创建任务,调用视图查看根类的执行起点函数;
10、通过所述执行起点函数判断所述窗口创建任务对应的窗口是否透明;
11、在所述窗口不透明的情况下,调用硬件渲染器类的分配缓冲区函数;
12、通过所述硬件渲染器类的分配缓冲区函数调用渲染代理类的分配缓冲区函数;
13、通过所述渲染代理类的分配缓冲区函数,在所述渲染线程中创建所述窗口绘制任务。
14、本申请的一个实施例中,所述在渲染线程中串行调用缓冲队列生成器类的分配缓冲区函数,包括:
15、在渲染线程调用缓冲队列类的分配缓冲区函数后,利用所述渲染线程调用缓冲队列生成器类的分配缓冲区函数。
16、本申请的一个实施例中,所述在渲染线程中串行调用缓冲队列生成器类的分配缓冲区函数,通过所述分配缓冲区函数为所述窗口绘制任务分配缓冲区之前,所述方法还包括:
17、通过所述缓冲队列类的分配缓冲区函数判断所述当前系统负载是否超过预设负载阈值;
18、所述方法还包括:
19、在判定所述当前系统负载未超过预设负载阈值的情况下,通过所述缓冲队列类的分配缓冲区函数创建与所述渲染线程并行执行的缓冲区分配线程;
20、在所述分配线程中调用所述缓冲队列生成器类的分配缓冲区函数,通过所述分配缓冲区函数为所述窗口绘制任务分配缓冲区。
21、本申请的一个实施例中,在所述通过所述分配缓冲区函数为所述窗口绘制任务分配缓冲区之后,所述方法还包括:
22、在所述渲染线程中基于分配的缓冲区执行所述窗口绘制任务,绘制所述窗口创建任务对应的窗口。
23、第二方面,本申请实施例提供了一种缓冲区分配装置,所述装置包括:
24、系统负载获取模块,用于在需要为窗口绘制任务分配缓冲区时,获取当前系统负载;
25、第一缓冲区分配模块,用于在当前系统负载超过预设负载阈值的情况下,在渲染线程中串行调用缓冲队列生成器类的分配缓冲区函数,通过所述分配缓冲区函数为所述窗口绘制任务分配缓冲区。
26、本申请的一个实施例中,所述装置还包括:
27、第一任务创建模块,用于获取窗口创建任务;
28、第二任务创建模块,用于在所述窗口创建任务对应的窗口不透明的情况下,创建窗口绘制任务。
29、本申请的一个实施例中,所述第二任务创建模块,具体用于:
30、基于所述窗口创建任务,调用视图查看根类的执行起点函数;
31、通过所述执行起点函数判断所述窗口创建任务对应的窗口是否透明;
32、在所述窗口不透明的情况下,调用硬件渲染器类的分配缓冲区函数;
33、通过所述硬件渲染器类的分配缓冲区函数调用渲染代理类的分配缓冲区函数;
34、通过所述渲染代理类的分配缓冲区函数,在所述渲染线程中创建所述窗口绘制任务。
35、本申请的一个实施例中,所述第一缓冲区分配模块,具体用于:
36、在渲染线程调用缓冲队列类的分配缓冲区函数后,利用所述渲染线程调用缓冲队列生成器类的分配缓冲区函数。
37、本申请的一个实施例中,所述装置还包括:
38、系统负载判断模块,用于通过所述缓冲队列类的分配缓冲区函数判断所述当前系统负载是否超过预设负载阈值;
39、所述装置还包括:
40、线程创建模块,用于在判定所述当前系统负载未超过预设负载阈值的情况下,通过所述缓冲队列类的分配缓冲区函数创建与所述渲染线程并行执行的缓冲区分配线程;
41、第二缓冲区分配模块,用于在所述分配线程中调用所述缓冲队列生成器类的分配缓冲区函数,通过所述分配缓冲区函数为所述窗口绘制任务分配缓冲区。
42、本申请的一个实施例中,所述装置还包括:
43、窗口绘制模块,用于在所述渲染线程中基于分配的缓冲区执行所述窗口绘制任务,绘制所述窗口创建任务对应的窗口。
44、第三方面,本申请实施例提供了一种电子设备,包括:
45、存储器,用于存放计算机程序;
46、处理器,用于执行存储器上所存放的程序时,实现上述任一所述的缓冲区分配方法。
47、第四方面,本申请实施例提供了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述任一所述的缓冲区分配方法。
48、本申请实施例有益效果:
49、本申请实施例提供的缓冲区分配方法,在需要为窗口绘制任务分配缓冲区时,获取当前系统负载,在当前系统负载超过预设负载阈值的情况下,在渲染线程中串行调用缓冲队列生成器类的分配缓冲区函数,通过分配缓冲区函数为窗口绘制任务分配缓冲区。由于渲染线程具有更高的执行优先级,能够得到更加及时的调度,所以在系统负载较高的情况下,相较于相关技术中创建新线程来分配缓冲区的方案,本申请实施例的方案能够更及时地完本文档来自技高网...
【技术保护点】
1.一种缓冲区分配方法,其特征在于,所述方法包括:
2.根据权利要求1所述的方法,其特征在于,在所述获取当前系统负载之前,所述方法还包括:
3.根据权利要求2所述的方法,其特征在于,所述在所述窗口创建任务对应的窗口不透明的情况下,创建窗口绘制任务,包括:
4.根据权利要求1所述的方法,其特征在于,所述在渲染线程中串行调用缓冲队列生成器类的分配缓冲区函数,包括:
5.根据权利要求1所述的方法,其特征在于,所述在渲染线程中串行调用缓冲队列生成器类的分配缓冲区函数,通过所述分配缓冲区函数为所述窗口绘制任务分配缓冲区之前,所述方法还包括:
6.根据权利要求1-5任一项所述的方法,其特征在于,在所述通过所述分配缓冲区函数为所述窗口绘制任务分配缓冲区之后,所述方法还包括:
7.一种缓冲区分配装置,其特征在于,所述装置包括:
8.根据权利要求7所述的装置,其特征在于,所述装置还包括:
9.一种电子设备,其特征在于,包括:
10.一种计算机可读存储介质,其特征在于,包括计算机程序,当所述计
...【技术特征摘要】
1.一种缓冲区分配方法,其特征在于,所述方法包括:
2.根据权利要求1所述的方法,其特征在于,在所述获取当前系统负载之前,所述方法还包括:
3.根据权利要求2所述的方法,其特征在于,所述在所述窗口创建任务对应的窗口不透明的情况下,创建窗口绘制任务,包括:
4.根据权利要求1所述的方法,其特征在于,所述在渲染线程中串行调用缓冲队列生成器类的分配缓冲区函数,包括:
5.根据权利要求1所述的方法,其特征在于,所述在渲染线程中串行调用缓冲队列生成器类的分配缓冲区函数,通过所述分配缓冲区函数为所述...
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。