Kay*_*Kay 5 graphics opengl-es ios
我正在试图弄清楚vsync如何在iOS上运行CADisplayLink.我想在这里回答的问题是:
我设置了一些测试:
CADisplayLink在iPhone上使用间隔为1 = ~60Hz 的计时器[CADisplayLink timestamp]和两者分析计时器调用之间的时间mach_absolute_time()测试1:基础测试:在这里,我只跟踪了10000个样本:
timestamp-----
max: 16.762583
min: 16.627625
mean: 16.675080
variance: 0.000333
mach----------
max: 22.606042
min: 10.815958
mean: 16.675694
variance: 0.602793
diff----------
max: 5.941417
min: 0.000750
mean: -0.000615
variance: 0.607476
Run Code Online (Sandbox Code Playgroud)
测试2:由于CPU等待时间短而导致帧丢失:这里,在帧X上,我只是坐在自旋锁中进行Y次迭代.相对于第X帧的记录帧时间:
Y = 200000
-1: 16.72 17.85 (-1.13)
0: 16.66 15.37 (1.29)
1: 33.32 43.74 (-10.42) (*)
2: 16.74 4.34 (12.40) (*)
3: 16.61 16.70 (-0.10)
4: 16.71 16.65 (0.06)
Y = 100000
-1: 16.66 16.50 (0.16)
0: 16.69 16.67 (0.02)
1: 16.63 22.21 (-5.58) (*)
2: 16.68 9.91 (6.77) (*)
3: 16.70 16.04 (0.67)
4: 16.69 16.70 (-0.01)
Run Code Online (Sandbox Code Playgroud)
测试3:与测试2相同,但使用OS调用睡眠t秒
t = 0.03
-1: 16.67 16.54 (0.14)
0: 16.68 16.91 (-0.23)
1: 33.35 34.78 (-1.43) (*)
2: 16.68 14.93 (1.74) (*)
3: 16.68 16.87 (-0.20)
4: 16.67 16.48 (0.19)
t = 0.02
-1: 16.64 16.54 (0.09)
0: 16.72 16.91 (-0.19)
1: 16.66 20.79 (-4.13) (*)
2: 16.69 12.60 (4.08) (*)
3: 16.67 18.24 (-1.57)
4: 16.68 15.09 (1.59)
t = 3.0
-1: 16.68 16.74 (-0.07)
0: 16.63 16.58 (0.05)
1: 266.84 3004.04 (-2737.20) (*)
2: 2751.35 14.82 (2736.54) (*)
3: 16.66 16.80 (-0.14)
4: 16.68 15.86 (0.81)
Run Code Online (Sandbox Code Playgroud)
观察:
CADisplayLink情况下不等待vsync.[CADisplayLink timestamp]CADisplayLink 只有当图形驱动程序的命令缓冲区为空,或GPU的命令缓冲区为空(并因此从图形驱动程序请求更多命令或取消阻止)时,才会发生调用.CADisplayLink停止调用.CADisplayLink调用.CADisplayLinkCADisplayLink大约每16.6ms调用一次 - 一个管道的下游结果,它在远端的vsync 上等待.[CADisplayLink timestamp]与"实际"时间不同的原因mach_absolute_time().例如,Test2:i = 100000:
因此,对于用户来说,没有丢帧.
我离这里有多远?我希望自己是一名计算机工程师.
| 归档时间: |
|
| 查看次数: |
976 次 |
| 最近记录: |