OK,再次回到MAME移植主线,上次显示屏显示帧率不够导致游戏运行的慢(可以打开游戏运行的速度,基本都在50%左右,也就是游戏运行的速度是本该运行的50%)。
那如何优化呢?答案是找到耗费CPU的操作,让每秒CPU运行游戏更多一点,这里采取perf抓取CPU耗时进行分析优化。有关perf请移步至perf + 火焰图分析程序性能。
1. 现有的耗时点
通过抓取perf分析,火焰图如下:
可以看到游戏中有下面的耗时是没有必要和游戏模拟CPU在同一个线程里,导致模拟CPU的时候速度变慢:
cpu_vblankcallback
这个函数下面主要是对输入的按键进行扫描,而按键扫描中有做延时(模拟clock,虽然1us一个clock),导致占用了相当多的CPU。而对此所做的优化是将按键扫描重新启动线程,然后在cpu_vblankcallback
的时候只需要获取扫描出的值即可。
除此之外,为了使各个任务之间互不干扰,需要将各个任务进行绑核,达到CPU核运行任务的最大化。涉及如下任务:
- 游戏主线程,即模拟街机CPU的线程;
- 按键扫描线程;
- 视频更新线程,更新一帧相当耗时,采用异步更新来节省时间,会导致画面音画不同步;
2. 优化后的耗时
基本运行游戏速度都会保持在100%左右。