您好,我想请教关于引擎UMG部分常用原生接口重复值优化的事情。
一、情况描述
在我们使用LUA/C++开发UMG的UI业务逻辑过程中,由于业务开发人员对优化细节的处理不够到位,经常出现Tick当中轮询调用很多UI的接口实现——无论输入参数是否是不变的重复参数。这造成性能效率低下,常用接口调用次数很多,而又没有实际意义(平均每秒500多次)
[Image Removed]
其中包括但不限于:UTextBlock::SetText / UUserWidget::SetVisibility / UWidget::SetRenderTranslation / UUserWidget::StopAnimation等等。
我们已经向相关UI开发人员沟通,主动在调用之前对参数做上层输入同值判断,维护一个缓存状态,避免不必要的重新调用。
二、我的问题
虽然在业务实现代码上做了优化,但无法保证完全杜绝。因此我们目前考虑修改引擎源码以做到同值输入优化。以常用的SetVisibility为例。
[Image Removed]
[Image Removed]
[Image Removed]
我们注意到虽然做了前值判断,但还是存在SWidget::SetVisibility的无差别调用逻辑(无论输入变不变都走这里)。
问题:假设修改引擎源码改成彻底的,新旧值一样时,什么都没发生,比如如下写法,请问会有什么潜在问题呢?
[Image Removed]
三、另一个例子
再比如UTextBlock::SetText,假设先做Text判断,不变的话就什么逻辑都不执行,会有什么问题呢?
[Image Removed]