之前项目在安卓上遇到了anr问题,合入了官方的修改https://github.com/EpicGames/UnrealEngine/commit/364614974946a3d1f69f8401323e9338befcf7e3\#diff\-063f4a369a45f86905cd559b517545104cc1f19fa88eda4f8fed271fd6f19903
但是也引入了新的问题,预编译pso不全。在安卓编译pso的服务起来前,生成的编译任务在开始执行时就会return并没有真正执行,所以会漏掉开头一部分pso的编译。项目用的是4.27的引擎,但是看ue5上也是有这个问题的。
执行pso编译的时候会调到函数PrepareGFXBoundShaderState,CanCreateExternally里面会由于服务未都准备好而return false,进而导致不会走后面的编译。项目目前是起4个服务,在有的机器上全起来可能会有8s左右,所以之前会遇到anr问题,这个8s可能会导致很多重要的pso没有真正编译导致进入游戏后会卡。
有什么推荐的修改办法吗?
void FOpenGLDynamicRHI::PrepareGFXBoundShaderState(const FGraphicsPipelineStateInitializer& Initializer)
{ ...
const bool bCanCreateExternally = CanCreateExternally(bIsPreCachePSO);
if (!bCanCreateExternally)
{ ...
return;
}
...
}
[Attachment Removed]