检查引证/信息源请点击:映维网
期望能够为你供给必定的参阅
(映维网 2019年11月05日)假如你曾测验提高运用程序的功用,你或许现已知道OVR Metrics Tool或Logcat中的VrApi日志。OVR Metrics Tool是Oculus供给的功用东西,面向Unity,Unreal和原生开发者。平视形式答应你检查VR叠加层中的实时方针,而陈述形式则在VR会话完毕后供给功用陈述。Oculus期望扩展在OVR方针东西中供给的信息,经过将其集成至操作体系中来进一步完结无缝的体会,以及构建答应你运用控制器来翻开和封闭它的办法。
FPS是两者中最显着的核算信息,它关于判别运用程序是不是以全帧速率运转十分有用,但里边一起包含很多的其他信息。日前,Oculus的软件工程师Trevor Dasch撰文介绍了OOVR Metrics Tool,包含你能够疏忽和不容忽视的信息。下面是映维网的详细收拾,期望能够为你供给必定的学习参阅:
OVR Metrics Tool参数和对应的VrApi日志值
1. 重要的参数
下面不是按字母次序摆放,而是依照重要性进行摆放(或许至少是我以为重要的次序摆放)。当然,你能够一直经过Ctrl + F的办法来快速定位方针内容。
1.1 过期帧(每秒)
OVR Metrics Tool: STALE
VrApi Logs: Stale
你或许会惊奇于我没有将FPS放在第一位。但在评价用户体会的质量时,过期帧实践上是更有用的方针。什么是过期帧呢?由于VR的作业办法,屏幕显现改写率并不直接与运用程序的帧烘托有关。取而代之的是一个名为合成器的中心过程,即时刻歪曲。它获取运用程序烘托的终究一帧,依据用户头部移动核算方向校对,并将其显现在物理显现器上。
所以,时刻歪曲期望在特定时刻烘托终究一帧。假如这一阵没有预备稳当,则有必要运用现已“过期”的前一帧。这与FPS有何不同呢?假如运用程序错失一帧,则过期帧加一,而帧速率减一,这好像看起来形成了完美的抵消反比。但实践上并非如此。由于CPU和GPU并行作业,所以烘托一帧的时刻或许会比单帧的总时长,但CPU或GPU花费的时刻都不会比单帧更长。因而,一个运用程序能够72fps的速度运转,但每秒有72个过期帧。实践状况并没有那么糟糕,烘托和显现时刻之间的推迟更长,但帧的开释速度却十分安稳。
但是,假如大于零但少于72的帧都过期,问题就会呈现。这个时分,某些帧将接连显现两次,某些帧则会越过。为了防止这种状况,咱们运用一种“Extra Latency Mode/额定推迟形式”(假如运用的是Unity或Unreal,则默许是启用状况)。这奉告时刻歪曲总是要等候额定一帧,而且除非第二帧之后都没有预备好,不然不要以为它们现已过期。假如运用程序的确能够快速烘托,则将帧视为“早到”,但悉数看起来都会十分流通。
1.2 运用GPU时刻
OVR Metrics Tool: APP T (in μs, 1/1000th ms)
VrApi Logs: App (in ms)
这或许是优化运用程序时要留意的最有用数据之一。运用GPU时刻可供给烘托单帧所花费的时刻。假如超越单帧长度(即72fps为13.88ms),则阐明是GPU Bound。假如小于这个值,则或许是受CPU Bound。它在更改着色器,添加更多纹路,更改网格等相同十分有用,它能够显现GPU剩下的空间,以及是否添加了调试逻辑来翻开和封闭特定方针,你能够判别所述方针的功用怎么。在不捣鼓RenderDoc或Snapdragon Profiler等东西的状况下,这是最接近实在功用剖析的办法。
1.3 CPU和GPU运用率
OVR Metrics Tool: CPU U和GPU U
VrApi Logs: GPU%和CPU%
关于承认运用程序是不是CPU Bound或GPU Bound十分有用,但你需求留意必定的问题。实践上,GPU运用率是更有用的方针,由于GPU在功用上归于单核(这不是GPU的作业办法,但就咱们的比方而言,无妨就选用这样的说法吧)。运用程序和时刻歪曲都将作业提交给GPU,然后GPU履行作业,而且能够依据给定时刻窗口履行的作业总量来核算单个运用率。假如到达100%,则阐明是GPU Bound。假如仅仅由于调度而使它超越90%,你实践上或许现已开端遇到费事。实践上,CPU运用率不太有用。由于移动CPU归于多核,所以咱们挑选运用率来代表功用最差的中心(VrApi日志一起显现均匀值和最差值)。但由于大多数运用程序都是多线程,而且调度程序会将线程分配给可用的中心,所以即使主线程运转十分缓慢,CPU运用率方针都或许无法表现出来,由于所述线程终究是由不同的中心运转。
要运用这个方针,你在调试时能够设置线程亲和性(thread affinity)并将主线程和烘托线程绑定到特定的中心。但这实践上会下降整个体系功率,由于调度程序十分拿手坚持高吞吐量。所以,你能够坚持重视,但不主张依托它来承认负载的方位。你需求运用比如systrace这样的剖析器或引擎内置的剖析器来寻觅CPU端的瓶颈。
1.4 CPU和GPU运转等级
OVR Metrics Tool: CPU L和GPU L
VrApi Logs: CPU[X]/GPU (X是当时的主中心)
关于Gear VR,这些数字需求运用程序手动设置。但跟着Oculus Go的推出,咱们添加了主动动态时钟,假如运用未到达要求的帧速,它将添加这些数字。假如运用程序未完结所需的帧速率,你最好检查一下CPU和GPU的运转等级,由于它会在CPU Bound或GPU Bound时供给信号,以及各自的大致负载。例如,假如你留意到CPU运转等级为4,GPU运转等级为2,则需求优化CPU运用率。假如两者均为4,则需求看看我上面列出的其他方针。你一起应该记住,运用率数字需求结合相关的运转等级数字。例如,GPU Level 2和90%运用率的功用实践要优于GPU Level 4和60%运用率更高。
1.5 均匀每秒帧数
OVR Metrics Tool: FPS
VrApi Logs: FPS
每秒帧数或许不需求太多解说。假如它与显现改写率匹配,则没有太大问题。假如小于显现改写率,则需求采纳必定的办法。
1.6 可用内存
OVR Metrics Tool: A MEM
VrApi Logs: Free
陈述的可用内存来自于Android OS。关于Android,内存以某种不透明的办法进行办理,所以这个数字难以完结。例如,假如运用程序进入后台,则新开的运用程序或许会占用很多内存,所以即使你有数百MB的可用空间,运用程序也或许会中止。但关于判别内存分配是否快于预期,或许是否有按预期地开释内存,这是一个适当不错的办法。
2. “知道最好”的参数
下面参数的重要性有所下降。它们首要用于判别运用程序的设置是否契合预期。当然,它们关于毛病扫除十分有用。
2.1 注视点烘托等级
OVR Metrics Tool: FOV
VrApi Logs: Fov
注视点烘托等级是指运用程序的固定注视点烘托强度。0为封闭,1为低,2为中,3为高,4为最高(仅支撑Quest),其间屏幕的下半部分比上半部分更为明晰(关于显现双手的运用程序十分有用)。这个数字将直接影响GPU功用,而且在更改烘托等级时,屏幕边际的可见伪影会越来越显着。为完结所需的功用提高,重要的是挑选视觉可接受的烘托等级升。
2.2 眼图缓冲区宽度/高度
OVR Metrics Tool: EBW和EBH
这是纹路的烘托分辨率。Oculus Go/Gear VR的默许值为1024×1024,而Quest的默许值为1216×1344。这有助于承认你已将其改成期望值,并承认宽高比契合视角。分辨率直接影响GPU烘托时刻,更多的像素意味着片段着色器需求更多的时刻。
2.3 时刻歪曲时刻
OVR Metrics Tool: TW T
VrApi Logs: TW
这是时刻歪曲烘托所花费的时刻。这个时刻与运用的层数及其复杂性直接相关(Equirect与Cylinder层的负载要高于Quad与Projection层)。大多数运用程序都无需忧虑这一点,但视频运用则不然,由于时刻歪曲花费的时刻过长会导致画面撕裂。
2.4 早到帧
OVR Metrics Tool: EARLY
VrApi Logs: Early
如前所述,在运用Extra Latency Mode/额定推迟形式时,能够在需求它们之前交给帧。能够疏忽一些早到帧。假如你一直以较高的帧速率运转,请保证CPU/GPU运转等级不要高于实践状况。假如早到帧具有匹配的fps,我主张你封闭额定推迟形式。你一起能够经过添加分辨率或添加着色器复杂性来运用余量。
2.5 画面撕裂
OVR Metrics Tool: TEARS
VrApi Logs: Tear
这表明时刻歪曲花费的时刻太长并呈现画面撕裂。这在前期的Gear VR设备更为常见。Oculus Go和Quest现在根本不会发作这种状况,除非运用程序运用了太多的层数(如运用Quad与Cylinder层来显现UI元素)。
2.6 已用内存
OVR Metrics Tool: U MEM
已用内存的确有用,但这个数字是用于阐明PSS(Proportional Set Size)内存。由于运用程序能够在Android中同享内存,所以这会添加所述运用程序运用的一切仅有内存,并依据同享运用程序的数量来核算同享内存的一小部分。例如,假如两个运用程序运用一个占用20mb的库,则这将为每个运用程序的PSS添加10mb。这个方针能够盯梢运用程序分配了多少相对内存,但关于盯梢实在内存占用量没有什么用途。
2.7 额定推迟形式
OVR Metrics Tool: LAT
VrApi Logs: LAT
详细请参阅前面的过期帧部分。它简直一直为1,这便是为什么虽然这个数字十分重要,但仍然坐落“知道最好”这个类别。
2.8 交流距离
OVR Metrics Tool: SWAP
VrApi Logs: VSync
交流距离奉告运用程序在烘托下一帧之前要越过多少帧。它简直一直为1,由于输入2或许会导致运用程序以一半的速率烘托,这或许会形成用户不适。Gear VR的省电形式会输入2,但咱们从未在Oculus Quest启用。你能够将其用于调试意图,或许在极高分辨率时运用,但绝不应该在发行运用中启用所述功用,由于用户只需回头就会轻松留意到它。
2.9 猜测时刻
OVR Metrics Tool: PRED
VrApi Logs: Prd
猜测时刻是指运用程序在烘托前查询姿势和屏幕显现帧之间的肯定时刻。依据引擎和显现器的改写率,这简直应该一直是40毫秒到50毫秒之间的固定数字。只有当数字比预期高得多的时分,这个参数才真实有用。它也不会奉告你有关推迟的悉数故事,由于这是用于烘托的姿势,而且Unity和Unreal都是运用不同的姿势来更新游戏逻辑。
2.10 显现改写率
OVR Metrics Tool: DRR
关于Oculus Go和Oculus Quest,显现改写率能够是60或72。这个方针仅奉告你当时的设置。假如屏幕改写为72,但你看到FPS为60,这会十分有用。这意味着你需求进行很多的优化。
2.11 电池电量
OVR Metrics Tool: BAT L
对功用剖析没有协助,但假如你想在运用程序中电池电量监控,这没有什么问题。
3. “对Gear VR略略有用,但疏忽也没有问题”的参数
下面的方针仅对Gear VR有用。关于Oculus Go和Quest,由于硬件固定,温度也不是问题,所以你能够进行疏忽。下面一起列出了或许对咱们团队以外的任何人都没有用的参数。
3.1 传感器温度
OVR Metrics Tool: TEMP
关于前期的Gear VR,温度或许是个问题。当低功率手机的时钟以VR所需的速度运转时,它们或许会敏捷变热,然后或许导致可怕的“过热”屏幕。跟着智能手机的功用提高,这已不再是一个问题,但假如你仍然将S6和S7作为方针,则能够进行监控。
3.2 电源办理
OVR Metrics Tool: POW L
这个方针奉告你设备是否处于省电形式,陈述的三个等级是NORMAL = 0,SAVE = 1,DANGER =2。跟着设备升温,功率等级将主动从NORMAL更改为SAVE,并终究变为DANGER。一旦到达DANGER,体系将显现过热对话框。关于运用程序,你能够查询当时功率等级,所以主张你将运用程序设置成到达SAVE状况,然后下降烘托本钱。有关这一论题的更多信息,请参阅咱们的电源办理文档。
3.3 CPU/GPU/内存频率
OVR Metrics Tool: CPU F, GPU F和MEM F
这是CPU/GPU/内存的时钟速度,当CPU运转等级或GPU运转等级更改时,时钟速度将更改。这关于监控并不是很有用,由于原始数字并不能供给选用不同SoC的设备之间的功用差异。
3.4 电池温度
OVR Metrics Tool: B TEM
电池的当时温度,对Gear VR更为重要。
3.5 电池/电源电流,电源电压
OVR Metrics Tool: BAT C, POW C和POW V
电池电流以毫安为单位,电压以伏特为单位。从理论上讲,你能够对其进行监控并承认耗费的电量(Apms×Volts=Watts),但最好的做法是针对CPU/GPU运转等级和运用率进行优化。
3.6 遥控器/控制器温度
OVR Metrics Tool: LC TM and RC TM (formerly R TEM)
控制器的温度
3.7 最大转速
OVR Metrics Tool: M ROT
头显的最大转速
4. VrApi日志参数
VrApi日志包含很多与OVR相同的核算信息,但它核算了少量共同的信息,而详细的用途将取决于你的特定需求。
FPS=,
Prd=ms,
Tear=,
Early=,
Stale=,
VSnc=,
Lat=,
Fov=,
CPU/GPU=/,
/MHz,
OC=,
TA=//,SP=//,
Mem=MHz,Free=MB,
PSM=,PLS=,
Temp=C/C,
TW=ms,App=ms,
GD=ms,
CPU&GPU=ms,
LCnt=,
GPU%=,
CPU%=(W)
这些方针依照它们在VrApi日志行中呈现的次序进行排序。我现已对每个参数进行了注明,并给出了我个人的实用性评分(满分5分)(依据需求,你或许会发现它们或多或少地有用)。
4.1 Measured CPU Core
实用性评分 1/5
这个数字仅表明陈述CPU频率时正在丈量的中心。关于大多数CPU架构而言,其具有大小不一的内核,除非将CPU Level设置为0,不然它将成为大中心。
4.2 online Core Mask
实用性评分 0/5
当CPU运转等级设置较低时,较旧的Gear VR会断电。现代CPU不再这样做,而且能够在不使中心脱机的状况下削减中心的能耗。所以,它并不是十分有用。
4.3 TimeWarp/Main/Render Thread Affinity
实用性评分:3/5
这表明各种线程的线程亲和性。这关于判别线程是否在大中心上运转十分有用,但现在最好防止手动设置亲和性。关于Quest,TimeWarp将显现为0。
4.4 TimeWarp/Main/Render Thread Scheduling Priority
实用性评分:4/5
这表明线程的优先级。“F” = SCHED_FIFO是最高优先级,“N” = SCHED_NORMAL。时刻歪曲应该一直是“F”,但关于Quest它是“N”。假如你将Main和Render传递给vrapi_SetPerfThreads(UE4会主动履行这个操作),它们将会设置为F。
4.5 Power Save Mode
实用性评分:0/5
省电形式是一个二进制值,仅表明电源办理是不是SAVE。
4.6 Guardian GPU Time
实用性评分:3/5
与运用GPU时刻和时刻歪曲GPU时刻相似,咱们丈量并陈述防护体系GPU时刻。当然,这只会对Quest有用。关于这个数字,你不能做什么。所以除了奉告你防护体系的GPU时刻之外,它并不是十分有用。
4.7 CPU & GPU Time
实用性评分:5/5
这是运用程序烘托一帧所花费的总时刻。当时仅在运用Unity或Unreal引擎时可用,而且是丈量从Render或RHI线程开端处理帧直到GPU完结烘托停止。从中减去运用GPU时刻能够核算出Render线程的大约时钟时刻。假如这是你的瓶颈,所述参数或许会很有用。
4.8 Layer Count
实用性评分:3/5
时刻歪曲每帧烘托的层数。这包含比如防护体系之类的体系层。你最好重视一下,由于这个数字与时刻歪曲GPU时刻之间存在直接的相关性。将它坚持在最小值将有助于防止画面撕裂。
5. 深化发掘
虽然OVR Metrics Tool和VrApi日志可答应你轻松拜访一些要害的方针,但这一般仅仅通往RenderDoc和SnapDragon Profiler等东西的第一步。首要的游戏引擎相同包含用于调试CPU瓶颈的优异功用剖析东西。